(version 2)
(include "sci.sh")
(exports
    0 CharSave
)
(use "Main")
(use "Print")
(use "n958")
(use "File")
(use "Game")
(use "User")
(use "Obj")
(script 52)


(local
    local0 =     83
    local1
    local2
    local3
    local4
    theGGOwnerMaxStamina[34]
    local39
    local40
    local41
    local42
    local43
    local44
    local45 =     25
    local46 =     190
    local47
    local48
    local49 =     55
    local50 =     109
    local51 =     196
    local52 =     242
    local53 =     208
    local54
    local55
    local56[5]
    local61[44]
    local105[300]
    local405[300]
    local705
    local706[40]
    local746

)
(instance public CharSave of Rm
    (properties
        style $0007
    )

    (method (init param1)
        (super:init(rest param1))
        (send (ScriptID(15)):doit())
        (send gQg3KDHandler:add(self))
        (User:
            canControl(0)
            canInput(0)
        )
        (self:setScript(saveHero))
    )


    (method (dispose)
        (send gQg3KDHandler:delete(self))
        proc958_0(0 993 944)
        (super:dispose())
    )

)
(instance {glory3.sav} of File
    (properties)
)
(instance saveHero of Script
    (properties)

    (method (changeState newState)
        (var temp0, temp1, temp2, temp3, temp4)
        (switch (= state newState)
            (case 0
                Animate()
                Message(0 52 2 0 10 1 @local61)
                (if (>= global15 global16)
                    (send gQg3Messager:say(2 0 8 1 self))
                )(else
                    Message(0 52 2 0 4 1 @local405)
                    Format(@local105 @local405 global15 global16)
                    (Print:
                        mode(1)
                        width(220)
                        addText(@local105)
                        init(self)
                    )
                )
                = register 1
            )
            (case 1
                (send gQg3Messager:say(2 0 5 0 self))
                = register 1
            )
            (case 2
                (if ((Print:
                    mode(1)
                    addText(2 0 11 1 52)
                    addEdit(@local61 30 0 30 @local61)
                    init()
                )
)
                    ({glory3.sav}:name(@local61))
                    = cycles 2
                )(else
                    (self:changeState(8))
                )
            )
            (case 3
                (if (<> ({glory3.sav}:open(1)) 0)
                    Message(0 52 2 0 13 1 @local405)
                    Format(@local105 @local405 ({glory3.sav}:name))
                    (switch (= local746 (Print:
                            mode(1)
                            addText(@local105)
                            addButton(1 2 0 14 1 10 45)
                            addButton(2 2 0 15 1 100 45)
                            init()
                        )
)
                        (case 1
                            (self:changeState(2))
                        )
                        (case 2
                            ({glory3.sav}:close())
                            = cycles 1
                        )
                    )
                )(else
                    = cycles 1
                )
            )
            (case 4
                (if (({glory3.sav}:open(2)))
                    ({glory3.sav}:close())
                    = seconds 2
                )(else
                    Message(0 52 2 0 2 1 @local405)
                    Format(@local105 @local405 ({glory3.sav}:name))
                    (Print:
                        mode(1)
                        width(220)
                        addText(@local105)
                        init()
                    )
                    (self:changeState(8))
                )
            )
            (case 5
                (if (not ({glory3.sav}:open(0)))
                    (self:changeState(8))
                    return 
                )
                = temp0 0
                (while (< temp0 34)
                    = theGGOwnerMaxStamina[temp0] gGOwnerMaxStamina[temp0]
                    ++temp0
                )
                = temp1 (+ (send ((send gInv:at(0))):amount) (/ global410 100))
                = local1 global125
                = local2 (/ temp1 100)
                = local3 (% temp1 100)
                = local4 0
                (if ((send gOwner:has(16)))
                    = local4 (| local4 $0001)
                )
                (if ((send gOwner:has(9)))
                    = local4 (| local4 $0002)
                )
                (if ((send gOwner:has(28)))
                    = local4 (| local4 $0004)
                )
                (if ((send gOwner:has(2)))
                    = local4 (| local4 $0008)
                )
                (if ((send gOwner:has(15)))
                    = local4 (| local4 $0010)
                )
                (if ((send gOwner:has(33)))
                    = local4 (| local4 $0020)
                )
                (if (proc0_6(158))
                    = local4 (| local4 $0040)
                )
                (if ((send gOwner:has(26)))
                    = local4 (| local4 $0080)
                )
                (if ((send gOwner:has(7)))
                    = local4 (| local4 $0100)
                )
                (if ((send gOwner:has(1)))
                    = local4 (| local4 $0200)
                )
                (if ((send gOwner:has(5)) and (== global125 0))
                    = local4 (| local4 $0400)
                )
                = local39 (send ((send gInv:at(14))):amount)
                = local40 (send ((send gInv:at(10))):amount)
                = local41 (send ((send gInv:at(25))):amount)
                = local42 (send ((send gInv:at(12))):amount)
                = local43 (send ((send gInv:at(13))):amount)
                = local44 (send ((send gInv:at(11))):amount)
                = local54 local53
                = temp0 0
                (while (< temp0 44)
                    = local0[(+ temp0 1)] local0[(+ temp0 1)]
                    = local54 (+ local54 local0[(+ temp0 1)])
                    = temp0 (+ temp0 2)
                )
                = local55 0
                = temp0 1
                (while (< temp0 44)
                    = local0[(+ temp0 1)] local0[(+ temp0 1)]
                    = local55 (+ local55 local0[(+ temp0 1)])
                    = temp0 (+ temp0 2)
                )
                = local47 local54
                = local48 local55
                = temp0 0
                (while (< temp0 52)
                    = local0[(+ temp0 1)] local0[(+ temp0 1)]
                    = local0[(+ temp0 1)] (^ local0[(+ temp0 1)] local0[temp0])
                    ++temp0
                )
                = temp2 "*"
                StrAt(temp2 0 10)
                ({glory3.sav}:writeString(" glory3.sav " temp2))
                ({glory3.sav}:writeString(@global157 temp2))
                = temp0 1
                (while (< temp0 53)
                    Format(@local105 "%2x" / local0[temp0] 100)
                    ({glory3.sav}:writeString(@local105))
                    Format(@local105 "%2x" % local0[temp0] 100)
                    ({glory3.sav}:writeString(@local105))
                    ++temp0
                )
                ({glory3.sav}:writeString(temp2))
                ({glory3.sav}:close())
                = seconds 2
            )
            (case 6
                (if (gDialog)
                    (send gDialog:dispose())
                )
                = register 1
                (send gQg3Messager:say(2 0 1 0 self))
            )
            (case 7
                = local705 1
                (self:changeState(9))
            )
            (case 8
                = temp4 (Print:
                        mode(1)
                        addText(2 0 16 1)
                        addButton(1 2 0 14 1 55 30)
                        addButton(2 2 0 15 1 95 30)
                        init()
                    )
                (if (temp4)
                    (switch (= temp4 (Print:
                            mode(1)
                            addText(2 0 16 1)
                            addButton(1 2 0 14 1 55 30)
                            addButton(2 2 0 15 1 95 30)
                            init()
                        )
)
                        (case 1
                            = temp4 9
                        )
                        (case 2
                            = temp4 2
                            = local45 25
                            = local46 190
                            = local49 55
                            = local50 109
                            = local51 196
                            = local52 242
                        )
                    )
                )
                (self:changeState(temp4))
            )
            (case 9
                (send gQg3Messager:say(2 0 7 0 self))
            )
            (case 10
                (send global2:newRoom(890))
            )
        )
    )


    (method (handleEvent pEvent)
        (if (((== (send pEvent:type) 4) and (== (send pEvent:message) 13)) and register)
            = register 0
            = cycles 1
            (send pEvent:claimed(1))
        )
    )

)
