(include "sci.sh")
(use "Main")
(use "Obj")
(script 989)



(class Sound of Obj
    (properties
        nodePtr 0
        handle 0
        number 0
        vol 127
        priority 0
        loop 1
        signal 0
        prevSignal 0
        dataInc 0
        min 0
        sec 0
        frame 0
        client 0
        owner 0
        flags 0
    )

    (method (new param1)
        (send ((super:new())):
            owner(
                (if (paramTotal)
                    param1
                )(else
                    0
                )
)
            yourself()
        )
    )


    (method (init)
        = prevSignal (= signal 0)
        (send gSounds:add(self))
        DoSound(5 self)
    )


    (method (dispose param1)
        (if (paramTotal and not param1)
            = client 0
        )
        (send gSounds:delete(self))
        (if (nodePtr)
            DoSound(6 self)
            = nodePtr 0
        )
        (super:dispose())
    )


    (method (play param1)
        (self:init())
        = client 
            (if (paramTotal)
                param1
            )(else
                0
            )
        (if (not loop)
            = loop 1
        )
        DoSound(7 self 0)
    )


    (method (playBed param1)
        (self:init())
        = client 
            (if (paramTotal)
                param1
            )(else
                0
            )
        (if (not loop)
            = loop 1
        )
        DoSound(7 self 1)
    )


    (method (stop param1)
        (if (paramTotal and not param1)
            = client 0
        )
        (if (nodePtr)
            DoSound(8 self)
        )
    )


    (method (pause param1)
        (if (not paramTotal)
            = param1 1
        )
        DoSound(9 
            (if ((self:isMemberOf(Sound)))
                self
            )(else
                0
            )
 param1)
    )


    (method (hold param1)
        (if (not paramTotal)
            = param1 1
        )
        DoSound(14 self param1)
    )


    (method (release)
        DoSound(14 self 0)
    )


    (method (fade param1 param2 param3 param4 param5)
        (if ((> paramTotal 4) and param5)
            = client 0
        )
        (if (paramTotal)
            DoSound(10 self param1 param2 param3 param4)
        )(else
            DoSound(10 self 0 25 10 1)
        )
    )


    (method (send param1 param2 param3)
        (if ((<= 1 param1) and (<= param1 15))
            DoSound(12 self param1 param2 param3)
        )
    )


    (method (changeState)
        DoSound(4 self)
    )


    (method (check)
        DoSound(11 self)
        (if (signal)
            = prevSignal signal
            = signal 0
            (if (IsObject(client))
                (send client:cue(self))
            )
        )
    )


    (method (clean param1)
        (if (not owner or (== owner param1))
            (self:dispose())
        )
    )

)
