Community

SCI Programming => SCI Syntax Help => Topic started by: King Graham on April 02, 2007, 01:21:11 PM

Title: Open door sez good idea
Post by: King Graham on April 02, 2007, 01:21:11 PM
Hey everybody!

I've used the door-code of the tutorial, but if i type "open door" or "close door" it sez: "Good idea. You can try that again later." and the door stays closed. So i cant come in anymore

 ??? Help plz!
Title: Re: Open door sez good idea
Post by: troflip on April 02, 2007, 01:36:30 PM
Can you post your *exact* code for your handleEvent method?
Title: Re: Open door sez good idea
Post by: King Graham on April 03, 2007, 01:59:29 PM
Just as in the tutorial, but without the locked code.

        (if(Said('open/door'))
         (aDoor:open())
        )
        (if(Said('close/door'))
         (aDoor:close())
        )
Title: Re: Open door sez good idea
Post by: troflip on April 03, 2007, 02:14:56 PM
That code is fine, but it is obviously never being hit.  You'll have to post your entire script.
Title: Re: Open door sez good idea
Post by: King Graham on April 04, 2007, 07:36:08 AM
Here it is
Code: [Select]
/******************************************************************************/
(include "sci.sh")
(include "game.sh")
/******************************************************************************/
(script 2)
/******************************************************************************/
(use "controls")
(use "cycle")
(use "door")
(use "feature")
(use "game")
(use "inv")
(use "main")
(use "obj")
/******************************************************************************/
(instance public rm002 of Rm
(properties
picture scriptNumber
north 0
east 3
south 0
west 0
)
(method (init)
(super:init())
(self:setScript(RoomScript))
        (aDoor:init())
        (aPasserby:
         setScript(passingBy)
         xStep(3)
         setPri(-1)
         ignoreActors()
         illegalBits(0)
         init()
         hide()
        ) // #1
(switch(gPreviousRoomNumber)
            (case 3
            (send gEgo:
posn(310 137)
loop(1)
)
            )
            (default
(send gEgo:
posn(141 117)
loop(2)
)
)
)

SetUpEgo()
(send gEgo:init())

)
)
/******************************************************************************/
(instance RoomScript of Script
(properties)
    (method (doit)
   )
    (method (handleEvent pEvent)
        (super:handleEvent(pEvent))

        /*****************************************
         * Handle the possible said phrases here *
         *****************************************/
        (if(Said('look'))
         Print("You are outside.")
        )
        (if(Said('open/door'))
         (aDoor:open())
        )
        (if(Said('close/door'))
         (aDoor:close())
        )
    )
)
/******************************************************************************/
(instance aDoor of Door
  (properties
    x 145
    y 106
    view 10
    entranceTo 1
    roomCtrl $4000
  )
)
/**************************************************************************/
(instance aPasserby of Act(properties x 0 y 137 view 1 loop 0))
/**************************************************************************/
(instance passingBy of Script
(properties)
  (method (changeState newState)
  = state newState
    (switch (state)
      (case 0 (aPasserby:setPri(3)hide()) = seconds Random(3 8))
      (case 1 (aPasserby:show()view(1)setPri(-1)setLoop(0)posn(0 137)setCycle(Walk)setMotion(MoveTo 320 137 passingBy)))
      (case 2 (aPasserby:hide()) = seconds Random(2 6))
      (case 3 (aPasserby:show()view(2)setPri(-1)setLoop(0)posn (0 137)setCycle(Walk)setMotion(MoveTo 320 137 passingBy)))
      (case 4 (aPasserby:hide()) = seconds Random(2 10))
      (case 5 (aPasserby:show()view(3)setPri(-1)setLoop(0)posn (0 137)setCycle(Walk)setMotion(MoveTo 320 137 passingBy)))
      (case 6 (aPasserby:setPri(11)hide()) = seconds Random(2 6))
      (case 7 (aPasserby:show()view(4)setPri(-1)setLoop(0)posn (0 137)setCycle(Walk)setMotion(MoveTo 320 137 passingBy)))
      (case 8 (self:changeState(0)))
    ) // switch end
  ) // end method
) // end instance
Title: Re: Open door sez good idea
Post by: Doan Sephim on April 04, 2007, 10:18:59 AM
Here's what I'm thinking. That code looks pretty normal to me...I only looked though it in entirety once, so I may have missed something.

But only in the mainscript is the property that says "Good idea. You can try that again later" used. My guess is that you edited the mainscript at some point. This is very important:

If you ever edit the mainscript, you must compile ALL scripts, or else all kinds of unexpected things tend to happen.

That is my guess. So, just use the "compile all scripts" function, rebuild, and run the game to see if the problem is fixed "on its own".
Title: Re: Open door sez good idea
Post by: King Graham on April 04, 2007, 11:04:45 AM
I did what you suggested and... Well, it does'nt say 'Good Idea.' anymore, but now it says 'You're not close enough.' even if i am in front of the door. Hmmm... strange.
Title: Re: Open door sez good idea
Post by: troflip on April 04, 2007, 11:07:50 AM
Sounds like that was the problem then.

"You're not close enough" is the door script telling you that the ego is not standing on the door control colour (navy blue).
Title: Re: Open door sez good idea
Post by: King Graham on April 04, 2007, 11:10:43 AM
Green  ??? I thought $4000 was yellow!
Title: Re: Open door sez good idea
Post by: Doan Sephim on April 04, 2007, 11:49:29 AM
I think it is yellow, but doesn't the door script assign yellow ($4000) as the block color? why not use a color like grey or silver or maroon? If yellow is assigned as the blocking color (as it is in the door script) then your ego would never actually be on that color unless the door was open, so you would never be close enough.

Another way to approach this without using control colors at all is check whether ego is close to the door by using code like:

Code: [Select]
(if(Said('open/door'))
  (if(<=(send gEgo:distanceTo(door))25)
    (door:open())
  )
)

I am not 100% sure that will work because I don't actually use the door script at all...I just use doors like any other Prop...
Title: Re: Open door sez good idea
Post by: troflip on April 04, 2007, 11:54:26 AM
The door control property by default is doorCtrl, which is  ($0002), which is ctlNAVY (see my correction above).

ctlYELLOW is the default door block ($4000)... e.g. the area your ego can't walk through when the door is closed.

Look at how the sample room pics are done...

You can also do what Doan suggested, but you need to set the force property of the door to TRUE.

Title: Re: Open door sez good idea
Post by: King Graham on April 04, 2007, 12:55:31 PM
 ;D Good! Doan's idea worked! Thanks!