Blade of Darkness holds true to the greatest of hack and slash legends, combining sorcery, knights, and swords with god forsaken enemies that deserve to have their arms slashed off with a broadsward. Blade of Darkness looked excellent in 2001, and still delivers its gore well today. Holding True to it's genre it offers modders both custom maps and scripts. Relevent Links Fansite Mod List Modding Community

Post tutorial Report RSS Level Editing Scripting by Prospero. Part. 13

Unlike Doors, opening Gates use a movable object rather than a sliding sector. You can use any object for this purpose, but practically all the RAS gates use the "Rastrillo".

Posted by on - Basic Client Side Coding

Tut13. Gates

Unlike Doors, opening Gates use a movable object rather than a sliding sector. You can use any object for this purpose, but practically all the RAS gates use the "Rastrillo". (There are various flavours.) I'll stick to using this object in this tut.

Use the EBrowser to place the Rastrillo in the closed position in you doorway. It is up to you if you want to make a channel in the doorway for the gate to slide into. It will happily slide into a solid wall but it looks more convincing if it has a channel. Save the position/orientation in a temporary file.

You can put all your gates in the same file as Doors. First make some
clanky-type sounds:

python code:
snd_slidegate=Sounds.CreateEntitySound("..\\..\\Sounds\\rastrillo.wav", "GateSlideSound")
snd_slidegate.MaxDistance=20000
snd_slidegate.MinDistance=2000

snd_hitgate=Sounds.CreateEntitySound("..\\..\\Sounds\\golpe-metal-mediano.wav", "GateHitSound")
snd_hitgate.MaxDistance=20000
snd_hitgate.MinDistance=2000

# then create the gate:

gate1=Bladex.CreateEntity("Gate1","Rastrillo10",2000,-3000,8000,"Physic")
gate1.Scale=1.0
gate1.Orientation=0.5,0.5,-0.5,0.5

# take the Position/Orientation/Scale from the temp file you saved with EBrowser

gate1.Frozen=1 # dunno what this is for
gate1=Sparks.SetMetalSparkling(gate1.Name) # This makes sparks if you hit the gate.
gate1din=Objects.CreateDinamicObject(gate1.Name) # Assigns data to handle moving.

You now need a couple of functions in DefFuncs.py:

python code:
def OpenGate(gate,d1=2200,d2=600):
    displacement=(d1,d2)
    vectors=(0.0,-1.0,0.0),(0.0,-1.0,0.0)
    vel_init=(500,2000)
    vel_fin=(2000,500)
    whilesnd=(snd_slidegate,snd_slidegate)
    endsnd=("",snd_hitgate)
    Objects.NDisplaceObject(gate,displacement,vectors,vel_init,vel_fin,(),whilesnd,endsnd)

def CloseGate(gate,d1=2200,d2=600):
    displacement=(d1,d2)
    vectors=(0.0,1.0,0.0),(0.0,1.0,0.0)
    vel_init=(500,2000)
    vel_fin=(2000,500)
    whilesnd=(snd_slidegate,snd_slidegate)
    endsnd=("",snd_hitgate)
    Objects.NDisplaceObject(gate,displacement,vectors,vel_init,vel_fin,(),whilesnd,endsnd)

These functions will handle all your gates. I have put in default args for the distance of travel. These should work fine for the majority of gates but if you have an extra big one you can pass args in the function call to alter them for that particular gate.

You can use a lever to open in the same manner as doors, but you must tell the functions which gate you want to open:

python code:
gate1lvr.OnTurnOnFunc=OpenGate
gate1lvr.OnTurnOnArgs=(gate1din,)
gate1lvr.OnTurnOffFunc=CloseGate
gate1lvr.OnTurnOffArgs=(gate1din,)

# to  alter the displacement use:

gate1.OnTurnOnArgs=(gate1din,3000,600,) #  adjust values until it moves far enough.

For other different objects you can make other functions based on these, customised to the object in question.

Locks

Locks work like levers, but you need a KEY.

First, pick one of the lock plates and position it with the EBrowser.
Generate script to a temp file.

Create lock with this code:

Make the key first

python code:
gate1key=Bladex.CreateEntity("Gate1Key","Llavecutre",4000,-500,-78000,"Physic")
gate1key.Scale=1
gate1key.Orientation=0.5,0.25,-0.825,0.0
darfuncs.SetHint(gate1key,"Key") # This name will show onscreen
Stars.Twinkle(gate1key.Name) # this is optional

You can place the key anywhere with EBrowser or give it to an enemy.
If you give it to an enemy, create it at 0,0,0 and omit the Orientation setting.
Use Actions.

python code:
TakeObject("NameOfEnemy","NameOf Key").

Bear in mind that the key must be created before the enemy can take it.

#Make the lock

python code:
gate1lock=Locks.PlaceLock("Gate1Lock","Cerraduracutre",(-150,-6200,5500),(0.5,0.5,-0.5,0.5),1.6)
gate1lock.key="Gate1Key"
darfuncs.SetHint(gate1lock.obj, "Lock")# put appropiate name here
gate1lock.OnUnLockFunc=OpenGate
gate1lock.OnLockFunc=CloseGate
gate1lock.OnUnLockArgs=(gate1din,)
gate1lock.OnLockArgs=(gate1din,)

Use the settings you saved in the temp file. (Position),(Orientation) The last arg is the Scale. Unlike the Lever code the Scale will have effect.

That about covers the subject.

A word on Elevators. They work in much the same way as Doors and Gates, except you ride up and down on them. They can be slide sectors or dinamic objects or sometimes a combination of both. You just have to give them greater displacement settings. They can get complicated if you want to be able to 'call' them from different floors, especially if you want them to stop at multiple levels. It can be done but I won't go into all that at the moment.

Post a comment

Your comment will be anonymous unless you join the community. Or sign in with your social account: