(include "sci.sh")
(use "Main")
(use "Class_255_0")
(use "Sound")
(use "Cycle")
(use "Game")
(use "InvI")
(use "PV")
(use "Obj")
(script 518)


(local
    newProp
    local1

)
(instance uniTheme of Sound
    (properties)
)
(instance public regUnicorn of Rgn
    (properties)

    (method (init)
        Load(rsVIEW 388)
        Load(rsVIEW 389)
        Load(rsVIEW 382)
        Load(rsVIEW 380)
        Load(rsVIEW 381)
        Load(rsVIEW 383)
        Load(rsVIEW 31)
        Load(rsVIEW 681)
        (super:init())
        (if (== 0 global124)
            (switch (Random(1 3))
                (case 1
                    = global124 20
                )
                (case 2
                    = global124 26
                )
                (case 3
                    = global124 27
                )
            )
        )
        (if (== gGNewPropX global124)
            = gNewAct (Act:new())
            (send gNewAct:
                view(388)
                xStep(4)
                yStep(1)
                setCycle(Fwd)
                cycleSpeed(2)
                setAvoider((Avoid:new()))
                init()
            )
            (switch (gGNewPropX)
                (case 20
                    (send gNewAct:
                        x(145)
                        y(110)
                    )
                )
                (case 26
                    (send gNewAct:
                        loop(0)
                        posn(226 97)
                    )
                )
                (case 27
                    (send gNewAct:
                        x(177)
                        y(139)
                        loop(
                            (if (< (send gEgo:x()) (send gNewAct:x()))
                                0
                            )(else
                                1
                            )
)
                    )
                )
            )
            (if (< (send gEgo:x()) (send gNewAct:x()))
                (send gNewAct:loop(0))
            )(else
                (send gNewAct:loop(1))
            )
            (send gNewAct:setScript(uniActions))
        )
    )


    (method (dispose)
        (send gSounds:eachElementDo(172))
        (send gTimers:eachElementDo(172))
        (super:dispose())
    )


    (method (handleEvent pEvent)
        (var gInvSaidMe)
        (if ((send pEvent:claimed()))
            return 1
        )
        return 
            (if ((((== (send pEvent:type()) 128) and (<> (uniActions:state()) 3)) and (send gCast:contains(gNewAct))) and (<> (send gNewAct:script()) 0))
                (if ((== global123 999) and Said('/unicorn'))
                    Print(518 0)
                )(else
                    (if (Said('launch/arrow,unicorn,arrow'))
                        (if ((send gEgo:has(14)) and (< (send ((Inv:at(14))):loop()) 2))
                            (if (<> (send gEgo:view()) 2)
                                Print(518 1)
                            )(else
                                (if ((send gNewAct:inRect(0 0 319 189)))
                                    proc0_3(gEgo gNewAct)
                                    (uniActions:changeState(10))
                                    (if (not global191)
                                        = global191 1
                                        (send gGame:changeScore(4))
                                    )
                                    (send ((Inv:at(14))):loop((+ (send ((Inv:at(14))):loop()) 1)))
                                )(else
                                    Print(518 2)
                                )
                            )
                        )(else
                            Print(518 3)
                        )
                    )(else
                        (if (Said('converse[/!*]') or Said('converse/unicorn'))
                            (if ((send gCast:contains(gNewAct)))
                                (switch (global123)
                                    (case 0
                                        Print(518 4)
                                    )
                                    (case 1
                                        Print(518 5)
                                    )
                                    (case 2
                                        Print(518 6)
                                    )
                                )
                            )(else
                                Print(518 7)
                            )
                        )(else
                            (if (Said('look/horn'))
                                (if ((send gCast:contains(gNewAct)))
                                    Print(518 8)
                                )(else
                                    (send pEvent:claimed(0))
                                )
                            )(else
                                (if (Said('bit/unicorn') or Said('place/bit'))
                                    (switch (global123)
                                        (case 0
                                            Print(518 9)
                                        )
                                        (case 1
                                            (if ((send gEgo:has(21)))
                                                (if (((== (send gNewAct:loop()) 0) and (send gEgo:inRect((+ (send gNewAct:x()) 20) (- (send gNewAct:y()) 5) (+ (send gNewAct:x()) 40) (+ (send gNewAct:y()) 5)))) or (send gEgo:inRect((- (send gNewAct:x()) 40) (- (send gNewAct:y()) 5) (- (send gNewAct:x()) 20) (+ (send gNewAct:y()) 5))))
                                                    Print(518 10)
                                                    (send gGame:changeScore(3))
                                                    (send ((Inv:at(21))):moveTo(205))
                                                    (uniActions:changeState(20))
                                                )(else
                                                    Print(800 1)
                                                )
                                            )(else
                                                Print(518 11)
                                            )
                                        )
                                        (case 2
                                            Print(518 12)
                                        )
                                    )
                                )(else
                                    (if (Said('kiss'))
                                        (if ((send gCast:contains(gNewAct)))
                                            (if (== global123 0)
                                                Print(518 13)
                                            )(else
                                                (if (((== (send gNewAct:loop()) 0) and (send gEgo:inRect((+ (send gNewAct:x()) 20) (- (send gNewAct:y()) 5) (+ (send gNewAct:x()) 40) (+ (send gNewAct:y()) 5)))) or (send gEgo:inRect((- (send gNewAct:x()) 40) (- (send gNewAct:y()) 5) (- (send gNewAct:x()) 20) (+ (send gNewAct:y()) 5))))
                                                    Print(518 14)
                                                )(else
                                                    Print(800 1)
                                                )
                                            )
                                        )(else
                                            (send pEvent:claimed(0))
                                        )
                                    )(else
                                        (if (Said('/unicorn>'))
                                            (if ((send gCast:contains(gNewAct)))
                                                (if (Said('look'))
                                                    (switch (global123)
                                                        (case 0
                                                            Print(518 15)
                                                        )
                                                        (case 1
                                                            Print(518 16)
                                                        )
                                                        (case 2
                                                            Print(518 17)
                                                        )
                                                    )
                                                )(else
                                                    (if ((Said('mount') or Said('get<on')) or Said('climb<on'))
                                                        (switch (global123)
                                                            (case 0
                                                                Print(518 18)
                                                            )
                                                            (case 1
                                                                Print(518 19)
                                                            )
                                                            (case 2
                                                                (if (< (send gEgo:distanceTo(gNewAct)) 10)
                                                                    (if (> (send gEgo:y()) (send gNewAct:y()))
                                                                        (send gEgo:
                                                                            view(389)
                                                                            setAvoider((Avoid:new()))
                                                                            ignoreActors()
                                                                            setMotion(0)
                                                                            posn((send gNewAct:x()) (send gNewAct:y()))
                                                                            cel(0 71)
                                                                        )
                                                                        (if (== (send gNewAct:loop()) 0)
                                                                            (send gEgo:loop(0))
                                                                        )(else
                                                                            (send gEgo:loop(1))
                                                                        )
                                                                        = global123 3
                                                                        = global124 333
                                                                        = gTheGGNewPropX 333
                                                                    )(else
                                                                        Print(518 20)
                                                                    )
                                                                )(else
                                                                    Print(800 1)
                                                                )
                                                            )
                                                        )
                                                    )(else
                                                        (if (Said('get,capture'))
                                                            (switch (global123)
                                                                (case 0
                                                                    Print(518 18)
                                                                )
                                                                (case 1
                                                                    Print(518 21)
                                                                )
                                                                (case 2
                                                                    Print(518 22)
                                                                )
                                                            )
                                                        )(else
                                                            (if (Said('pat'))
                                                                (if (== global123 0)
                                                                    Print(518 18)
                                                                )(else
                                                                    (if (((== (send gNewAct:loop()) 0) and (send gEgo:inRect((+ (send gNewAct:x()) 20) (- (send gNewAct:y()) 5) (+ (send gNewAct:x()) 40) (+ (send gNewAct:y()) 5)))) or (send gEgo:inRect((- (send gNewAct:x()) 40) (- (send gNewAct:y()) 5) (- (send gNewAct:x()) 20) (+ (send gNewAct:y()) 5))))
                                                                        Print(518 23)
                                                                    )(else
                                                                        Print(800 1)
                                                                    )
                                                                )
                                                            )(else
                                                                (if (Said('feed'))
                                                                    Print(518 24)
                                                                )(else
                                                                    (if (Said('guide'))
                                                                        (switch (global123)
                                                                            (case 0
                                                                                Print(518 13)
                                                                            )
                                                                            (case 1
                                                                                Print(518 25)
                                                                            )
                                                                            (case 2
                                                                                Print(518 22)
                                                                            )
                                                                        )
                                                                    )
                                                                )
                                                            )
                                                        )
                                                    )
                                                )
                                            )(else
                                                Print(518 26)
                                            )
                                        )(else
                                            (if (Said('deliver>'))
                                                (if (= gInvSaidMe (send gInv:saidMe()))
                                                    (if ((send gEgo:has((send gInv:indexOf((= gInvSaidMe (send gInv:saidMe())))))))
                                                        Print(518 27)
                                                    )(else
                                                        Print(800 2)
                                                    )
                                                )(else
                                                    Print(518 28)
                                                    (send pEvent:claimed(1))
                                                )
                                            )
                                        )
                                    )
                                )
                            )
                        )
                    )
                )
            )(else
                0
            )
    )

)
(instance uniActions of Script
    (properties)

    (method (changeState newState)
        (switch (= state newState)
            (case 0
                ((uniTheme:
                    number(32)
                    loop(1)
                    play()
                )
 = seconds 4  )
            )
            (case 1
                (
                (switch (global123)
                    (case 0
                        ((send gNewAct:
                            view(382)
                            cel(0)
                            cycleSpeed(1)
                            setCycle(End self)
                        )
  )
                    )
                    (case 1
                        ((self:changeState(13))  )
                    )
                    (case 2
                        ((send gNewAct:
                            view(381)
                            cycleSpeed(1)
                            setCycle(Fwd)
                        )
  )
                    )
                    (case 999
                        ((send gNewAct:
                            view(382)
                            cel(0)
                            cycleSpeed(1)
                            setCycle(End self)
                        )
 )
                    )
                )
  )
            )
            (case 2
                (
                (switch (gGNewPropX)
                    (case 20
                        ((send gNewAct:
                            view(383)
                            cycleSpeed(0)
                            setCycle(Walk)
                        )
 
                        (if (< (send gEgo:x()) (send gNewAct:x()))
                            (send gNewAct:setMotion(MoveTo 350 95 self))
                        )(else
                            (send gNewAct:setMotion(MoveTo 65486 91 self))
                        )
 )
                    )
                    (case 26
                        ((send gNewAct:
                            view(383)
                            cycleSpeed(0)
                            setCycle(Walk)
                        )
 (send gNewAct:setMotion(MoveTo 350 94 self))  )
                    )
                    (case 27
                        ((send gNewAct:
                            view(383)
                            cycleSpeed(0)
                            setCycle(Walk)
                        )
 
                        (if (< (send gEgo:x()) (send gNewAct:x()))
                            (send gNewAct:setMotion(MoveTo 350 139 self))
                        )(else
                            (send gNewAct:setMotion(MoveTo 65486 139 self))
                        )
 )
                    )
                )
  )
            )
            (case 3
                ((uniTheme:dispose()) (send gNewAct:dispose()) 
                (switch (gGNewPropX)
                    (case 20
                        (= global124 27  )
                    )
                    (case 26
                        (= global124 27  )
                    )
                    (case 27
                        (
                        (if (< (send gNewAct:x()) 0)
                            = global124 26
                        )(else
                            = global124 20
                        )
 )
                    )
                )
  )
            )
            (case 10
                (proc0_10() proc0_3(gEgo gNewAct) (send gEgo:
                    view(31)
                    cel(0)
                    setCycle(End self)
                )
  )
            )
            (case 11
                ((send gEgo:setCycle(Beg)) = global123 1 = newProp (Prop:new()) (send gNewAct:
                    setMotion(0)
                    setCycle(0)
                )
 (send newProp:
                    view(681)
                    cel(0)
                    loop(0)
                    setPri(15)
                    posn((send gNewAct:x()) - (send gNewAct:y()) 15)
                    setCycle(End self)
                    init()
                )
  )
            )
            (case 12
                ((send newProp:dispose()) Print(518 29 134 -1 20) (send gNewAct:
                    view(383)
                    cycleSpeed(0)
                    setCycle(Walk)
                )
 (send gEgo:
                    view(2)
                    setCycle(Walk)
                )
 proc0_11() Print(518 30 134 -1 20) 
                (switch (gGNewPropX)
                    (case 20
                        ((send gNewAct:setMotion(MoveTo 160 110 self))  )
                    )
                    (case 21
                        ((send gNewAct:setMotion(MoveTo 142 91 self))  )
                    )
                    (case 26
                        ((send gNewAct:setMotion(MoveTo 226 99 self))  )
                    )
                    (case 27
                        ((send gNewAct:setMotion(MoveTo 177 139 self)) )
                    )
                )
  )
            )
            (case 13
                (
                (switch (++local1)
                    (case 1
                        ((send gNewAct:
                            view(380)
                            cycleSpeed(2)
                            setCycle(Fwd)
                        )
 (send (ScriptID(0 4)):setReal(self 3))  )
                    )
                    (case 2
                        ((send gNewAct:
                            view(388)
                            cycleSpeed(2)
                            setCycle(Fwd)
                        )
 (send (ScriptID(0 4)):setReal(self 5))  )
                    )
                    (case 3
                        ((send gNewAct:
                            view(388)
                            cel(0)
                            setCycle(0)
                        )
 (send (ScriptID(0 4)):setReal(self 7)) )
                    )
                )
  )
            )
            (case 14
                (
                (if (== local1 3)
                    = local1 0
                )
 (self:changeState(13))  )
            )
            (case 20
                ((send gNewAct:
                    view(381)
                    setCycle(Fwd)
                )
 (send ((Inv:at(21))):moveTo(205)) = global123 2 )
            )
        )
    )

)
