Solved This time, while doing the Double Dragon remix, there is a feature that I was interested in.

Question that is answered or resolved.

DD Tokki

Well-known member
The player moves from place to place. Take the elevator on one stage and move automatically for a while. is this a script?

DDR_v.1.1.F._ENG - 0000.pngDDR_v.1.1.F._ENG - 0001.png
 
I've coded that kind of elevator some years ago.
To save texts, I merged the elevator script with door opening mechanic.
Code:
name        LiftDoor
type        none
setlayer    1
facing        1
subject_to_wall    0
subject_to_gravity 0
offscreenkill    3000
animationscript    data/scripts/prscript.c


anim spawn
@script
    void self = getlocalvar("self");
    int State = getentityvar(self, 0);

    if(frame==1){
      if(State==1){
        setentityvar(self, 0, NULL());
        changeentityproperty(self, "animation", openborconstant("ANI_FOLLOW1"));
      }
    }
@end_script
    delay    8
    offset    24 72
    sound    data/sounds/door.snd
    frame    data/bgs/streets/lidoor1.png
    frame    data/bgs/streets/lidoor2.png
    frame    data/bgs/streets/lidoor3.png
    delay    100
    frame    data/bgs/streets/lidoor4.png
    delay    8
    frame    data/bgs/streets/lidoor4.png

anim idle
@script
    void self = getlocalvar("self");
    void P1 = getplayerproperty(0, "entity");
    void P2 = getplayerproperty(1, "entity");

    float x = getentityproperty(self, "x");
    float y = getentityproperty(self, "a");
    float z = getentityproperty(self, "z");
    char Name = getentityproperty(self,"name");
    float Tx1 = getentityproperty(P1, "x");
    float Ty1 = getentityproperty(P1, "a");
    float Tz1 = getentityproperty(P1, "z");
    float Tx2 = getentityproperty(P2, "x");
    float Ty2 = getentityproperty(P2, "a");
    float Tz2 = getentityproperty(P2, "z");

    float Disx1 = Tx1 - x;
    float Disy1 = Ty1 - y;
    float Disz1 = Tz1 - z;
    float Disx2 = Tx2 - x;
    float Disy2 = Ty2 - y;
    float Disz2 = Tz2 - z;

    if(Disx1 < 0){
      Disx1 = -Disx1;
    }

    if(Disx2 < 0){
      Disx2 = -Disx2;
    }

    if(Disz1 < 0){
      Disz1 = -Disz1;
    }

    if(Disz2 < 0){
      Disz2 = -Disz2;
    }

    if(frame >= 1){
      if(Disx1 <= 10 && Disz1 <= 10 && Disy1 <= 5){
        setentityvar(self, 1, 0);
        changeentityproperty(self, "animation", openborconstant("ANI_FOLLOW2"));
      } else if(Disx2 <= 10 && Disz2 <= 10 && Disy2 <= 5){
        setentityvar(self, 1, 1);
        changeentityproperty(self, "animation", openborconstant("ANI_FOLLOW2"));
      }
    }
@end_script
    loop    1
    delay    5
    offset    24 72
    frame    data/bgs/streets/lidoor4.png
    frame    data/bgs/streets/lidoor4.png

anim follow1
    delay    8
    offset    24 72
    sound    data/sounds/door.snd
    frame    data/bgs/streets/lidoor1.png
    frame    data/bgs/streets/lidoor2.png
    frame    data/bgs/streets/lidoor3.png
    delay    100
    frame    data/bgs/streets/lidoor4.png
    delay    8
    sound    data/sounds/door.snd
    frame    data/bgs/streets/lidoor3.png
    frame    data/bgs/streets/lidoor2.png
    frame    data/bgs/streets/lidoor1.png
    @cmd    suicide
    frame    data/chars/misc/empty.gif

anim follow2
@script
    void self = getlocalvar("self");
    int P = getentityvar(self, 1);
    void Player = getplayerproperty(P, "entity");

    if(frame==1){
      changeentityproperty(Player,"noaicontrol", 1);
      changeentityproperty(Player,"setlayer", -20);
      bindentity(Player, self, 0, -10, 0, 2, 0);
    }
    if(frame==11){
      changeentityproperty(Player,"noaicontrol", 0);
      changeentityproperty(Player,"setlayer", 0);
      bindentity(Player, NULL());
      changeentityproperty(Player,"position", 735, 330, 220);
      setindexedvar(0, 750);
      setindexedvar(1, 330);
      setindexedvar(2, 220);
      setindexedvar(3, 1);
    }
    if(frame==19){
      setentityvar(self, 1, NULL());
    }
@end_script
    delay    5
    offset    24 72
    frame    data/bgs/streets/lidoor4.png
    frame    data/bgs/streets/lidoor4.png
    delay    8
    sound    data/sounds/door.snd
    frame    data/bgs/streets/lidoor3.png
    frame    data/bgs/streets/lidoor2.png
    delay    20
    frame    data/bgs/streets/lidoor1.png
sound data/sounds/elev.wav
    delay    218
    @cmd    dasher 0 1 0
    frame    data/chars/misc/empty.gif
    delay    50
    @cmd    dasher 0 0 0
    frame    data/chars/misc/empty.gif
    delay    8
    sound    data/sounds/door.snd
    frame    data/bgs/streets/lidoor1.png
    frame    data/bgs/streets/lidoor2.png
    frame    data/bgs/streets/lidoor3.png # 10
    delay    50
    frame    data/bgs/streets/lidoor4.png
    frame    data/bgs/streets/lidoor4.png
    delay    8
    sound    data/sounds/door.snd
    frame    data/bgs/streets/lidoor3.png
    frame    data/bgs/streets/lidoor2.png
    frame    data/bgs/streets/lidoor1.png
    delay    218
    @cmd    dasher 0 -1 0
    frame    data/chars/misc/empty.gif
    delay    50
    @cmd    dasher 0 0 0
    frame    data/chars/misc/empty.gif
    delay    8
    sound    data/sounds/door.snd
    frame    data/bgs/streets/lidoor1.png
    frame    data/bgs/streets/lidoor2.png
    frame    data/bgs/streets/lidoor3.png # 20
    delay    20
    frame    data/bgs/streets/lidoor4.png
    @cmd    beidle
    frame    data/chars/misc/empty.gif

If you wondered about the sprites used for this LiftDoor, they are just door opening sprites.

The script in IDLE works like this:
1. It waits for player 1 or player 2 to stand in front of the door.
2. If one player is there, the door will snatch that player, hides him/her behind background while waiting for the door to close, move up and opens.
3. After it opens, it will drop the snatched player up near where door is.
4. The door will close, move down and opens after reaching ground floor.
repeat to step 1.

Although the door can snatch either player 1 or 2, it can only snatch and carry one at a time. That's why, I looped the system back to IDLE to allow second player to ride the elevator too. Also useful if player who has gone up somehow fall down and need to go up again ;).

That's the gist of it.
 
I've coded that kind of elevator some years ago.
To save texts, I merged the elevator script with door opening mechanic.
Code:
name        LiftDoor
type        none
setlayer    1
facing        1
subject_to_wall    0
subject_to_gravity 0
offscreenkill    3000
animationscript    data/scripts/prscript.c


anim spawn
@script
    void self = getlocalvar("self");
    int State = getentityvar(self, 0);

    if(frame==1){
      if(State==1){
        setentityvar(self, 0, NULL());
        changeentityproperty(self, "animation", openborconstant("ANI_FOLLOW1"));
      }
    }
@end_script
    delay    8
    offset    24 72
    sound    data/sounds/door.snd
    frame    data/bgs/streets/lidoor1.png
    frame    data/bgs/streets/lidoor2.png
    frame    data/bgs/streets/lidoor3.png
    delay    100
    frame    data/bgs/streets/lidoor4.png
    delay    8
    frame    data/bgs/streets/lidoor4.png

anim idle
@script
    void self = getlocalvar("self");
    void P1 = getplayerproperty(0, "entity");
    void P2 = getplayerproperty(1, "entity");

    float x = getentityproperty(self, "x");
    float y = getentityproperty(self, "a");
    float z = getentityproperty(self, "z");
    char Name = getentityproperty(self,"name");
    float Tx1 = getentityproperty(P1, "x");
    float Ty1 = getentityproperty(P1, "a");
    float Tz1 = getentityproperty(P1, "z");
    float Tx2 = getentityproperty(P2, "x");
    float Ty2 = getentityproperty(P2, "a");
    float Tz2 = getentityproperty(P2, "z");

    float Disx1 = Tx1 - x;
    float Disy1 = Ty1 - y;
    float Disz1 = Tz1 - z;
    float Disx2 = Tx2 - x;
    float Disy2 = Ty2 - y;
    float Disz2 = Tz2 - z;

    if(Disx1 < 0){
      Disx1 = -Disx1;
    }

    if(Disx2 < 0){
      Disx2 = -Disx2;
    }

    if(Disz1 < 0){
      Disz1 = -Disz1;
    }

    if(Disz2 < 0){
      Disz2 = -Disz2;
    }

    if(frame >= 1){
      if(Disx1 <= 10 && Disz1 <= 10 && Disy1 <= 5){
        setentityvar(self, 1, 0);
        changeentityproperty(self, "animation", openborconstant("ANI_FOLLOW2"));
      } else if(Disx2 <= 10 && Disz2 <= 10 && Disy2 <= 5){
        setentityvar(self, 1, 1);
        changeentityproperty(self, "animation", openborconstant("ANI_FOLLOW2"));
      }
    }
@end_script
    loop    1
    delay    5
    offset    24 72
    frame    data/bgs/streets/lidoor4.png
    frame    data/bgs/streets/lidoor4.png

anim follow1
    delay    8
    offset    24 72
    sound    data/sounds/door.snd
    frame    data/bgs/streets/lidoor1.png
    frame    data/bgs/streets/lidoor2.png
    frame    data/bgs/streets/lidoor3.png
    delay    100
    frame    data/bgs/streets/lidoor4.png
    delay    8
    sound    data/sounds/door.snd
    frame    data/bgs/streets/lidoor3.png
    frame    data/bgs/streets/lidoor2.png
    frame    data/bgs/streets/lidoor1.png
    @cmd    suicide
    frame    data/chars/misc/empty.gif

anim follow2
@script
    void self = getlocalvar("self");
    int P = getentityvar(self, 1);
    void Player = getplayerproperty(P, "entity");

    if(frame==1){
      changeentityproperty(Player,"noaicontrol", 1);
      changeentityproperty(Player,"setlayer", -20);
      bindentity(Player, self, 0, -10, 0, 2, 0);
    }
    if(frame==11){
      changeentityproperty(Player,"noaicontrol", 0);
      changeentityproperty(Player,"setlayer", 0);
      bindentity(Player, NULL());
      changeentityproperty(Player,"position", 735, 330, 220);
      setindexedvar(0, 750);
      setindexedvar(1, 330);
      setindexedvar(2, 220);
      setindexedvar(3, 1);
    }
    if(frame==19){
      setentityvar(self, 1, NULL());
    }
@end_script
    delay    5
    offset    24 72
    frame    data/bgs/streets/lidoor4.png
    frame    data/bgs/streets/lidoor4.png
    delay    8
    sound    data/sounds/door.snd
    frame    data/bgs/streets/lidoor3.png
    frame    data/bgs/streets/lidoor2.png
    delay    20
    frame    data/bgs/streets/lidoor1.png
sound data/sounds/elev.wav
    delay    218
    @cmd    dasher 0 1 0
    frame    data/chars/misc/empty.gif
    delay    50
    @cmd    dasher 0 0 0
    frame    data/chars/misc/empty.gif
    delay    8
    sound    data/sounds/door.snd
    frame    data/bgs/streets/lidoor1.png
    frame    data/bgs/streets/lidoor2.png
    frame    data/bgs/streets/lidoor3.png # 10
    delay    50
    frame    data/bgs/streets/lidoor4.png
    frame    data/bgs/streets/lidoor4.png
    delay    8
    sound    data/sounds/door.snd
    frame    data/bgs/streets/lidoor3.png
    frame    data/bgs/streets/lidoor2.png
    frame    data/bgs/streets/lidoor1.png
    delay    218
    @cmd    dasher 0 -1 0
    frame    data/chars/misc/empty.gif
    delay    50
    @cmd    dasher 0 0 0
    frame    data/chars/misc/empty.gif
    delay    8
    sound    data/sounds/door.snd
    frame    data/bgs/streets/lidoor1.png
    frame    data/bgs/streets/lidoor2.png
    frame    data/bgs/streets/lidoor3.png # 20
    delay    20
    frame    data/bgs/streets/lidoor4.png
    @cmd    beidle
    frame    data/chars/misc/empty.gif

If you wondered about the sprites used for this LiftDoor, they are just door opening sprites.

The script in IDLE works like this:
1. It waits for player 1 or player 2 to stand in front of the door.
2. If one player is there, the door will snatch that player, hides him/her behind background while waiting for the door to close, move up and opens.
3. After it opens, it will drop the snatched player up near where door is.
4. The door will close, move down and opens after reaching ground floor.
repeat to step 1.

Although the door can snatch either player 1 or 2, it can only snatch and carry one at a time. That's why, I looped the system back to IDLE to allow second player to ride the elevator too. Also useful if player who has gone up somehow fall down and need to go up again ;).

That's the gist of it.

thank you. Moving through the elevator was successful. But it seems to return to the first state with @cmd beidle at the end, but it's not going well.
void beidle()
{// Go to IDLE animation!
void self = getlocalvar("self");
setidle(self);
}
I have beidle in my script file list, but it doesn't work.

Here is the code I rewrote for my game.

name Elevator
type none
setlayer 1
facing 1
subject_to_wall 0
subject_to_gravity 0
offscreenkill 3000
animationscript data/scripts/script.c


anim spawn
@script
void self = getlocalvar("self");
int State = getentityvar(self, 0);

if(frame==1){
if(State==1){
setentityvar(self, 0, NULL());
changeentityproperty(self, "animation", openborconstant("ANI_FOLLOW1"));
}
}
@end_script
delay 3
offset 15 47
sound data/sounds/door.wav
frame data/sprites/cr/misc/ev/elevator-01.gif
frame data/sprites/cr/misc/ev/elevator-02.gif
frame data/sprites/cr/misc/ev/elevator-03.gif
frame data/sprites/cr/misc/ev/elevator-04.gif
frame data/sprites/cr/misc/ev/elevator-05.gif
frame data/sprites/cr/misc/ev/elevator-06.gif
frame data/sprites/cr/misc/ev/elevator-07.gif
frame data/sprites/cr/misc/ev/elevator-08.gif
frame data/sprites/cr/misc/ev/elevator-09.gif
frame data/sprites/cr/misc/ev/elevator-10.gif
frame data/sprites/cr/misc/ev/elevator-11.gif
frame data/sprites/cr/misc/ev/elevator-12.gif
frame data/sprites/cr/misc/ev/elevator-13.gif
delay 100
frame data/sprites/cr/misc/ev/elevator-13.gif
delay 3
frame data/sprites/cr/misc/ev/elevator-13.gif

anim idle
@script
void self = getlocalvar("self");
void P1 = getplayerproperty(0, "entity");
void P2 = getplayerproperty(1, "entity");

float x = getentityproperty(self, "x");
float y = getentityproperty(self, "a");
float z = getentityproperty(self, "z");
char Name = getentityproperty(self,"name");
float Tx1 = getentityproperty(P1, "x");
float Ty1 = getentityproperty(P1, "a");
float Tz1 = getentityproperty(P1, "z");
float Tx2 = getentityproperty(P2, "x");
float Ty2 = getentityproperty(P2, "a");
float Tz2 = getentityproperty(P2, "z");

float Disx1 = Tx1 - x;
float Disy1 = Ty1 - y;
float Disz1 = Tz1 - z;
float Disx2 = Tx2 - x;
float Disy2 = Ty2 - y;
float Disz2 = Tz2 - z;

if(Disx1 < 0){
Disx1 = -Disx1;
}

if(Disx2 < 0){
Disx2 = -Disx2;
}

if(Disz1 < 0){
Disz1 = -Disz1;
}

if(Disz2 < 0){
Disz2 = -Disz2;
}

if(frame >= 1){
if(Disx1 <= 10 && Disz1 <= 10 && Disy1 <= 5){
setentityvar(self, 1, 0);
changeentityproperty(self, "animation", openborconstant("ANI_FOLLOW2"));
} else if(Disx2 <= 10 && Disz2 <= 10 && Disy2 <= 5){
setentityvar(self, 1, 1);
changeentityproperty(self, "animation", openborconstant("ANI_FOLLOW2"));
}
}
@end_script
loop 1
delay 5
offset 15 47
frame data/sprites/cr/misc/ev/elevator-13.gif
frame data/sprites/cr/misc/ev/elevator-13.gif

anim follow1
delay 3
offset 15 47
sound data/sounds/door.wav
frame data/sprites/cr/misc/ev/elevator-01.gif
frame data/sprites/cr/misc/ev/elevator-02.gif
frame data/sprites/cr/misc/ev/elevator-03.gif
frame data/sprites/cr/misc/ev/elevator-04.gif
frame data/sprites/cr/misc/ev/elevator-05.gif
frame data/sprites/cr/misc/ev/elevator-06.gif
frame data/sprites/cr/misc/ev/elevator-07.gif
frame data/sprites/cr/misc/ev/elevator-08.gif
frame data/sprites/cr/misc/ev/elevator-09.gif
frame data/sprites/cr/misc/ev/elevator-10.gif
frame data/sprites/cr/misc/ev/elevator-11.gif
frame data/sprites/cr/misc/ev/elevator-12.gif
delay 100
frame data/sprites/cr/misc/ev/elevator-13.gif
delay 3
sound data/sounds/door.wav
frame data/sprites/cr/misc/ev/elevator-12.gif
frame data/sprites/cr/misc/ev/elevator-11.gif
frame data/sprites/cr/misc/ev/elevator-10.gif
frame data/sprites/cr/misc/ev/elevator-09.gif
frame data/sprites/cr/misc/ev/elevator-08.gif
frame data/sprites/cr/misc/ev/elevator-07.gif
frame data/sprites/cr/misc/ev/elevator-06.gif
frame data/sprites/cr/misc/ev/elevator-05.gif
frame data/sprites/cr/misc/ev/elevator-04.gif
frame data/sprites/cr/misc/ev/elevator-03.gif
frame data/sprites/cr/misc/ev/elevator-02.gif
frame data/sprites/cr/misc/ev/elevator-01.gif
@cmd suicide
frame data/sprites/empty.gif

anim follow2
@script
void self = getlocalvar("self");
int P = getentityvar(self, 1);
void Player = getplayerproperty(P, "entity");

if(frame==1){
changeentityproperty(Player,"noaicontrol", 1);
changeentityproperty(Player,"setlayer", -20);
bindentity(Player, self, 0, -10, 0, 2, 0);
}
if(frame==28){
changeentityproperty(Player,"noaicontrol", 0);
changeentityproperty(Player,"setlayer", 0);
bindentity(Player, NULL());
changeentityproperty(Player,"position", 200, 138, 0);
setindexedvar(0, 200);
setindexedvar(1, 138);
setindexedvar(2, 0);
setindexedvar(3, 1);
}
if(frame==19){
setentityvar(self, 1, NULL());
}
@end_script
delay 5
offset 15 47
frame data/sprites/cr/misc/ev/elevator-13.gif
frame data/sprites/cr/misc/ev/elevator-13.gif
delay 3
sound data/sounds/door.wav
frame data/sprites/cr/misc/ev/elevator-12.gif
frame data/sprites/cr/misc/ev/elevator-11.gif
frame data/sprites/cr/misc/ev/elevator-10.gif
frame data/sprites/cr/misc/ev/elevator-09.gif
frame data/sprites/cr/misc/ev/elevator-08.gif
frame data/sprites/cr/misc/ev/elevator-07.gif
frame data/sprites/cr/misc/ev/elevator-06.gif
frame data/sprites/cr/misc/ev/elevator-05.gif
frame data/sprites/cr/misc/ev/elevator-04.gif
frame data/sprites/cr/misc/ev/elevator-03.gif
frame data/sprites/cr/misc/ev/elevator-02.gif
delay 20
frame data/sprites/cr/misc/ev/elevator-01.gif
delay 100
@cmd dasher 0 0.46 0
frame data/sprites/cr/misc/ev/elevator-01.gif
delay 50
@cmd dasher 0 0 0
frame data/sprites/cr/misc/ev/elevator-01.gif
delay 3
sound data/sounds/door.wav
frame data/sprites/cr/misc/ev/elevator-01.gif
frame data/sprites/cr/misc/ev/elevator-02.gif
frame data/sprites/cr/misc/ev/elevator-03.gif
frame data/sprites/cr/misc/ev/elevator-04.gif
frame data/sprites/cr/misc/ev/elevator-05.gif
frame data/sprites/cr/misc/ev/elevator-06.gif
frame data/sprites/cr/misc/ev/elevator-07.gif
frame data/sprites/cr/misc/ev/elevator-08.gif
frame data/sprites/cr/misc/ev/elevator-09.gif
frame data/sprites/cr/misc/ev/elevator-10.gif
frame data/sprites/cr/misc/ev/elevator-11.gif
frame data/sprites/cr/misc/ev/elevator-12.gif # 10
delay 50
frame data/sprites/cr/misc/ev/elevator-13.gif
frame data/sprites/cr/misc/ev/elevator-13.gif
delay 3
sound data/sounds/door.wav
frame data/sprites/cr/misc/ev/elevator-12.gif
frame data/sprites/cr/misc/ev/elevator-11.gif
frame data/sprites/cr/misc/ev/elevator-10.gif
frame data/sprites/cr/misc/ev/elevator-09.gif
frame data/sprites/cr/misc/ev/elevator-08.gif
frame data/sprites/cr/misc/ev/elevator-07.gif
frame data/sprites/cr/misc/ev/elevator-06.gif
frame data/sprites/cr/misc/ev/elevator-05.gif
frame data/sprites/cr/misc/ev/elevator-04.gif
frame data/sprites/cr/misc/ev/elevator-03.gif
frame data/sprites/cr/misc/ev/elevator-02.gif
frame data/sprites/cr/misc/ev/elevator-01.gif
delay 100
@cmd dasher 0 -0.46 0
frame data/sprites/cr/misc/ev/elevator-01.gif
delay 50
@cmd dasher 0 0 0
frame data/sprites/cr/misc/ev/elevator-01.gif
delay 3
sound data/sounds/door.wav
frame data/sprites/cr/misc/ev/elevator-01.gif
frame data/sprites/cr/misc/ev/elevator-02.gif
frame data/sprites/cr/misc/ev/elevator-03.gif
frame data/sprites/cr/misc/ev/elevator-04.gif
frame data/sprites/cr/misc/ev/elevator-05.gif
frame data/sprites/cr/misc/ev/elevator-06.gif
frame data/sprites/cr/misc/ev/elevator-07.gif
frame data/sprites/cr/misc/ev/elevator-08.gif
frame data/sprites/cr/misc/ev/elevator-09.gif
frame data/sprites/cr/misc/ev/elevator-10.gif
frame data/sprites/cr/misc/ev/elevator-11.gif
frame data/sprites/cr/misc/ev/elevator-12.gif # 20
delay 50
frame data/sprites/cr/misc/ev/elevator-13.gif
@cmd beidle
frame data/sprites/empty.gif
 

thank you. Moving through the elevator was successful. But it seems to return to the first state with @cmd beidle at the end, but it's not going well.
void beidle()
{// Go to IDLE animation!
void self = getlocalvar("self");
setidle(self);
}
I have beidle in my script file list, but it doesn't work.

Here is the code I rewrote for my game.

name Elevator
type none
setlayer 1
facing 1
subject_to_wall 0
subject_to_gravity 0
offscreenkill 3000
animationscript data/scripts/script.c


anim spawn
@script
void self = getlocalvar("self");
int State = getentityvar(self, 0);

if(frame==1){
if(State==1){
setentityvar(self, 0, NULL());
changeentityproperty(self, "animation", openborconstant("ANI_FOLLOW1"));
}
}
@end_script
delay 3
offset 15 47
sound data/sounds/door.wav
frame data/sprites/cr/misc/ev/elevator-01.gif
frame data/sprites/cr/misc/ev/elevator-02.gif
frame data/sprites/cr/misc/ev/elevator-03.gif
frame data/sprites/cr/misc/ev/elevator-04.gif
frame data/sprites/cr/misc/ev/elevator-05.gif
frame data/sprites/cr/misc/ev/elevator-06.gif
frame data/sprites/cr/misc/ev/elevator-07.gif
frame data/sprites/cr/misc/ev/elevator-08.gif
frame data/sprites/cr/misc/ev/elevator-09.gif
frame data/sprites/cr/misc/ev/elevator-10.gif
frame data/sprites/cr/misc/ev/elevator-11.gif
frame data/sprites/cr/misc/ev/elevator-12.gif
frame data/sprites/cr/misc/ev/elevator-13.gif
delay 100
frame data/sprites/cr/misc/ev/elevator-13.gif
delay 3
frame data/sprites/cr/misc/ev/elevator-13.gif

anim idle
@script
void self = getlocalvar("self");
void P1 = getplayerproperty(0, "entity");
void P2 = getplayerproperty(1, "entity");

float x = getentityproperty(self, "x");
float y = getentityproperty(self, "a");
float z = getentityproperty(self, "z");
char Name = getentityproperty(self,"name");
float Tx1 = getentityproperty(P1, "x");
float Ty1 = getentityproperty(P1, "a");
float Tz1 = getentityproperty(P1, "z");
float Tx2 = getentityproperty(P2, "x");
float Ty2 = getentityproperty(P2, "a");
float Tz2 = getentityproperty(P2, "z");

float Disx1 = Tx1 - x;
float Disy1 = Ty1 - y;
float Disz1 = Tz1 - z;
float Disx2 = Tx2 - x;
float Disy2 = Ty2 - y;
float Disz2 = Tz2 - z;

if(Disx1 < 0){
Disx1 = -Disx1;
}

if(Disx2 < 0){
Disx2 = -Disx2;
}

if(Disz1 < 0){
Disz1 = -Disz1;
}

if(Disz2 < 0){
Disz2 = -Disz2;
}

if(frame >= 1){
if(Disx1 <= 10 && Disz1 <= 10 && Disy1 <= 5){
setentityvar(self, 1, 0);
changeentityproperty(self, "animation", openborconstant("ANI_FOLLOW2"));
} else if(Disx2 <= 10 && Disz2 <= 10 && Disy2 <= 5){
setentityvar(self, 1, 1);
changeentityproperty(self, "animation", openborconstant("ANI_FOLLOW2"));
}
}
@end_script
loop 1
delay 5
offset 15 47
frame data/sprites/cr/misc/ev/elevator-13.gif
frame data/sprites/cr/misc/ev/elevator-13.gif

anim follow1
delay 3
offset 15 47
sound data/sounds/door.wav
frame data/sprites/cr/misc/ev/elevator-01.gif
frame data/sprites/cr/misc/ev/elevator-02.gif
frame data/sprites/cr/misc/ev/elevator-03.gif
frame data/sprites/cr/misc/ev/elevator-04.gif
frame data/sprites/cr/misc/ev/elevator-05.gif
frame data/sprites/cr/misc/ev/elevator-06.gif
frame data/sprites/cr/misc/ev/elevator-07.gif
frame data/sprites/cr/misc/ev/elevator-08.gif
frame data/sprites/cr/misc/ev/elevator-09.gif
frame data/sprites/cr/misc/ev/elevator-10.gif
frame data/sprites/cr/misc/ev/elevator-11.gif
frame data/sprites/cr/misc/ev/elevator-12.gif
delay 100
frame data/sprites/cr/misc/ev/elevator-13.gif
delay 3
sound data/sounds/door.wav
frame data/sprites/cr/misc/ev/elevator-12.gif
frame data/sprites/cr/misc/ev/elevator-11.gif
frame data/sprites/cr/misc/ev/elevator-10.gif
frame data/sprites/cr/misc/ev/elevator-09.gif
frame data/sprites/cr/misc/ev/elevator-08.gif
frame data/sprites/cr/misc/ev/elevator-07.gif
frame data/sprites/cr/misc/ev/elevator-06.gif
frame data/sprites/cr/misc/ev/elevator-05.gif
frame data/sprites/cr/misc/ev/elevator-04.gif
frame data/sprites/cr/misc/ev/elevator-03.gif
frame data/sprites/cr/misc/ev/elevator-02.gif
frame data/sprites/cr/misc/ev/elevator-01.gif
@cmd suicide
frame data/sprites/empty.gif

anim follow2
@script
void self = getlocalvar("self");
int P = getentityvar(self, 1);
void Player = getplayerproperty(P, "entity");

if(frame==1){
changeentityproperty(Player,"noaicontrol", 1);
changeentityproperty(Player,"setlayer", -20);
bindentity(Player, self, 0, -10, 0, 2, 0);
}
if(frame==28){
changeentityproperty(Player,"noaicontrol", 0);
changeentityproperty(Player,"setlayer", 0);
bindentity(Player, NULL());
changeentityproperty(Player,"position", 200, 138, 0);
setindexedvar(0, 200);
setindexedvar(1, 138);
setindexedvar(2, 0);
setindexedvar(3, 1);
}
if(frame==19){
setentityvar(self, 1, NULL());
}
@end_script
delay 5
offset 15 47
frame data/sprites/cr/misc/ev/elevator-13.gif
frame data/sprites/cr/misc/ev/elevator-13.gif
delay 3
sound data/sounds/door.wav
frame data/sprites/cr/misc/ev/elevator-12.gif
frame data/sprites/cr/misc/ev/elevator-11.gif
frame data/sprites/cr/misc/ev/elevator-10.gif
frame data/sprites/cr/misc/ev/elevator-09.gif
frame data/sprites/cr/misc/ev/elevator-08.gif
frame data/sprites/cr/misc/ev/elevator-07.gif
frame data/sprites/cr/misc/ev/elevator-06.gif
frame data/sprites/cr/misc/ev/elevator-05.gif
frame data/sprites/cr/misc/ev/elevator-04.gif
frame data/sprites/cr/misc/ev/elevator-03.gif
frame data/sprites/cr/misc/ev/elevator-02.gif
delay 20
frame data/sprites/cr/misc/ev/elevator-01.gif
delay 100
@cmd dasher 0 0.46 0
frame data/sprites/cr/misc/ev/elevator-01.gif
delay 50
@cmd dasher 0 0 0
frame data/sprites/cr/misc/ev/elevator-01.gif
delay 3
sound data/sounds/door.wav
frame data/sprites/cr/misc/ev/elevator-01.gif
frame data/sprites/cr/misc/ev/elevator-02.gif
frame data/sprites/cr/misc/ev/elevator-03.gif
frame data/sprites/cr/misc/ev/elevator-04.gif
frame data/sprites/cr/misc/ev/elevator-05.gif
frame data/sprites/cr/misc/ev/elevator-06.gif
frame data/sprites/cr/misc/ev/elevator-07.gif
frame data/sprites/cr/misc/ev/elevator-08.gif
frame data/sprites/cr/misc/ev/elevator-09.gif
frame data/sprites/cr/misc/ev/elevator-10.gif
frame data/sprites/cr/misc/ev/elevator-11.gif
frame data/sprites/cr/misc/ev/elevator-12.gif # 10
delay 50
frame data/sprites/cr/misc/ev/elevator-13.gif
frame data/sprites/cr/misc/ev/elevator-13.gif
delay 3
sound data/sounds/door.wav
frame data/sprites/cr/misc/ev/elevator-12.gif
frame data/sprites/cr/misc/ev/elevator-11.gif
frame data/sprites/cr/misc/ev/elevator-10.gif
frame data/sprites/cr/misc/ev/elevator-09.gif
frame data/sprites/cr/misc/ev/elevator-08.gif
frame data/sprites/cr/misc/ev/elevator-07.gif
frame data/sprites/cr/misc/ev/elevator-06.gif
frame data/sprites/cr/misc/ev/elevator-05.gif
frame data/sprites/cr/misc/ev/elevator-04.gif
frame data/sprites/cr/misc/ev/elevator-03.gif
frame data/sprites/cr/misc/ev/elevator-02.gif
frame data/sprites/cr/misc/ev/elevator-01.gif
delay 100
@cmd dasher 0 -0.46 0
frame data/sprites/cr/misc/ev/elevator-01.gif
delay 50
@cmd dasher 0 0 0
frame data/sprites/cr/misc/ev/elevator-01.gif
delay 3
sound data/sounds/door.wav
frame data/sprites/cr/misc/ev/elevator-01.gif
frame data/sprites/cr/misc/ev/elevator-02.gif
frame data/sprites/cr/misc/ev/elevator-03.gif
frame data/sprites/cr/misc/ev/elevator-04.gif
frame data/sprites/cr/misc/ev/elevator-05.gif
frame data/sprites/cr/misc/ev/elevator-06.gif
frame data/sprites/cr/misc/ev/elevator-07.gif
frame data/sprites/cr/misc/ev/elevator-08.gif
frame data/sprites/cr/misc/ev/elevator-09.gif
frame data/sprites/cr/misc/ev/elevator-10.gif
frame data/sprites/cr/misc/ev/elevator-11.gif
frame data/sprites/cr/misc/ev/elevator-12.gif # 20
delay 50
frame data/sprites/cr/misc/ev/elevator-13.gif
@cmd beidle
frame data/sprites/empty.gif

I may have misunderstood
For idle of type none, @cmd beidle doesn't seem to apply.
I wrote the way I remembered it. I'm still confused, so I think there is an accurate way.

name Elevator
type none
setlayer 1
facing 1
subject_to_wall 0
subject_to_gravity 0
offscreenkill 3000
animationscript data/scripts/script.c

Load elevator

anim spawn
@script
void self = getlocalvar("self");
int State = getentityvar(self, 0);

if(frame==1){
if(State==1){
setentityvar(self, 0, NULL());
changeentityproperty(self, "animation", openborconstant("ANI_FOLLOW1"));
}
}
@end_script
delay 3
offset 15 47
sound data/sounds/door.wav
frame data/sprites/cr/misc/ev/elevator-01.gif
frame data/sprites/cr/misc/ev/elevator-02.gif
frame data/sprites/cr/misc/ev/elevator-03.gif
frame data/sprites/cr/misc/ev/elevator-04.gif
frame data/sprites/cr/misc/ev/elevator-05.gif
frame data/sprites/cr/misc/ev/elevator-06.gif
frame data/sprites/cr/misc/ev/elevator-07.gif
frame data/sprites/cr/misc/ev/elevator-08.gif
frame data/sprites/cr/misc/ev/elevator-09.gif
frame data/sprites/cr/misc/ev/elevator-10.gif
frame data/sprites/cr/misc/ev/elevator-11.gif
frame data/sprites/cr/misc/ev/elevator-12.gif
frame data/sprites/cr/misc/ev/elevator-13.gif
delay 50
frame data/sprites/cr/misc/ev/elevator-13.gif

anim idle
@script
void self = getlocalvar("self");
void P1 = getplayerproperty(0, "entity");
void P2 = getplayerproperty(1, "entity");

float x = getentityproperty(self, "x");
float y = getentityproperty(self, "a");
float z = getentityproperty(self, "z");
char Name = getentityproperty(self,"name");
float Tx1 = getentityproperty(P1, "x");
float Ty1 = getentityproperty(P1, "a");
float Tz1 = getentityproperty(P1, "z");
float Tx2 = getentityproperty(P2, "x");
float Ty2 = getentityproperty(P2, "a");
float Tz2 = getentityproperty(P2, "z");

float Disx1 = Tx1 - x;
float Disy1 = Ty1 - y;
float Disz1 = Tz1 - z;
float Disx2 = Tx2 - x;
float Disy2 = Ty2 - y;
float Disz2 = Tz2 - z;

if(Disx1 < 0){
Disx1 = -Disx1;
}

if(Disx2 < 0){
Disx2 = -Disx2;
}

if(Disz1 < 0){
Disz1 = -Disz1;
}

if(Disz2 < 0){
Disz2 = -Disz2;
}

if(frame >= 1){
if(Disx1 <= 10 && Disz1 <= 10 && Disy1 <= 5){
setentityvar(self, 1, 0);
changeentityproperty(self, "animation", openborconstant("ANI_FOLLOW2"));
} else if(Disx2 <= 10 && Disz2 <= 10 && Disy2 <= 5){
setentityvar(self, 1, 1);
changeentityproperty(self, "animation", openborconstant("ANI_FOLLOW2"));
}
}
@end_script
loop 1
delay 5
offset 15 47
frame data/sprites/cr/misc/ev/elevator-13.gif
frame data/sprites/cr/misc/ev/elevator-13.gif

anim follow
delay 3
offset 15 47
sound data/sounds/door.wav
frame data/sprites/cr/misc/ev/elevator-01.gif
frame data/sprites/cr/misc/ev/elevator-02.gif
frame data/sprites/cr/misc/ev/elevator-03.gif
frame data/sprites/cr/misc/ev/elevator-04.gif
frame data/sprites/cr/misc/ev/elevator-05.gif
frame data/sprites/cr/misc/ev/elevator-06.gif
frame data/sprites/cr/misc/ev/elevator-07.gif
frame data/sprites/cr/misc/ev/elevator-08.gif
frame data/sprites/cr/misc/ev/elevator-09.gif
frame data/sprites/cr/misc/ev/elevator-10.gif
frame data/sprites/cr/misc/ev/elevator-11.gif
frame data/sprites/cr/misc/ev/elevator-12.gif
delay 100
frame data/sprites/cr/misc/ev/elevator-13.gif
delay 3
sound data/sounds/door.wav
frame data/sprites/cr/misc/ev/elevator-12.gif
frame data/sprites/cr/misc/ev/elevator-11.gif
frame data/sprites/cr/misc/ev/elevator-10.gif
frame data/sprites/cr/misc/ev/elevator-09.gif
frame data/sprites/cr/misc/ev/elevator-08.gif
frame data/sprites/cr/misc/ev/elevator-07.gif
frame data/sprites/cr/misc/ev/elevator-06.gif
frame data/sprites/cr/misc/ev/elevator-05.gif
frame data/sprites/cr/misc/ev/elevator-04.gif
frame data/sprites/cr/misc/ev/elevator-03.gif
frame data/sprites/cr/misc/ev/elevator-02.gif
frame data/sprites/cr/misc/ev/elevator-01.gif
@cmd suicide
frame data/sprites/empty.gif

anim follow2
@script
void self = getlocalvar("self");
int P = getentityvar(self, 1);
void Player = getplayerproperty(P, "entity");

if(frame==1){
changeentityproperty(Player,"noaicontrol", 1);
changeentityproperty(Player,"setlayer", -20);
bindentity(Player, self, 0, -100, 0, 2, 0);
}
if(frame==29){
changeentityproperty(Player,"noaicontrol", 0);
changeentityproperty(Player,"setlayer", 0);
bindentity(Player, NULL());
changeentityproperty(Player,"position", 200, 138, 0);
setindexedvar(0, 750);
setindexedvar(1, 330);
setindexedvar(2, 220);
setindexedvar(3, 1);
}
if(frame==29){
setentityvar(self, 1, NULL());
}
@end_script
delay 5
offset 15 47
frame data/sprites/cr/misc/ev/elevator-13.gif
frame data/sprites/cr/misc/ev/elevator-13.gif
delay 3
sound data/sounds/door.wav
frame data/sprites/cr/misc/ev/elevator-12.gif
frame data/sprites/cr/misc/ev/elevator-11.gif
frame data/sprites/cr/misc/ev/elevator-10.gif
frame data/sprites/cr/misc/ev/elevator-09.gif
frame data/sprites/cr/misc/ev/elevator-08.gif
frame data/sprites/cr/misc/ev/elevator-07.gif
frame data/sprites/cr/misc/ev/elevator-06.gif
frame data/sprites/cr/misc/ev/elevator-05.gif
frame data/sprites/cr/misc/ev/elevator-04.gif
frame data/sprites/cr/misc/ev/elevator-03.gif
frame data/sprites/cr/misc/ev/elevator-02.gif
delay 20
frame data/sprites/cr/misc/ev/elevator-01.gif
delay 100
@cmd dasher 0 0.46 0
frame data/sprites/cr/misc/ev/elevator-01.gif
delay 50
@cmd dasher 0 0 0
frame data/sprites/cr/misc/ev/elevator-01.gif
delay 3
sound data/sounds/door.wav
frame data/sprites/cr/misc/ev/elevator-01.gif
frame data/sprites/cr/misc/ev/elevator-02.gif
frame data/sprites/cr/misc/ev/elevator-03.gif
frame data/sprites/cr/misc/ev/elevator-04.gif
frame data/sprites/cr/misc/ev/elevator-05.gif
frame data/sprites/cr/misc/ev/elevator-06.gif
frame data/sprites/cr/misc/ev/elevator-07.gif
frame data/sprites/cr/misc/ev/elevator-08.gif
frame data/sprites/cr/misc/ev/elevator-09.gif
frame data/sprites/cr/misc/ev/elevator-10.gif
frame data/sprites/cr/misc/ev/elevator-11.gif
frame data/sprites/cr/misc/ev/elevator-12.gif # 10
delay 50
frame data/sprites/cr/misc/ev/elevator-13.gif
frame data/sprites/cr/misc/ev/elevator-13.gif
delay 3
sound data/sounds/door.wav
frame data/sprites/cr/misc/ev/elevator-12.gif
frame data/sprites/cr/misc/ev/elevator-11.gif
frame data/sprites/cr/misc/ev/elevator-10.gif
frame data/sprites/cr/misc/ev/elevator-09.gif
frame data/sprites/cr/misc/ev/elevator-08.gif
frame data/sprites/cr/misc/ev/elevator-07.gif
frame data/sprites/cr/misc/ev/elevator-06.gif
frame data/sprites/cr/misc/ev/elevator-05.gif
frame data/sprites/cr/misc/ev/elevator-04.gif
frame data/sprites/cr/misc/ev/elevator-03.gif
frame data/sprites/cr/misc/ev/elevator-02.gif
frame data/sprites/cr/misc/ev/elevator-01.gif
delay 100
@cmd dasher 0 -0.46 0
frame data/sprites/cr/misc/ev/elevator-01.gif
delay 50
@cmd dasher 0 0 0
frame data/sprites/cr/misc/ev/elevator-01.gif
subentity elevator
spawnframe 44 0 0 0 0
@cmd killentity getlocalvar("self")
frame data/sprites/empty.gif

I tried by loading the elevator entity and calling the simultaneous entity with the elevator disappearing after the role has been completed.
 
You should use these forum functions next time to reduce your post size :D :
Code:
Put your script or texts here

Back to topic, it's strange that beidle doesn't work.... :unsure:
Wait a second, your beidle is different than mine. Mine is like this:
C:
void beidle()
{// Go to IDLE animation!
    void self = getlocalvar("self");

    setidle(self, openborconstant("ANI_IDLE"));
}

Mine specifies animation change so it changes animation when the function is run.

BTW you can omit these lines from your script:
C:
setindexedvar(0, 750);
setindexedvar(1, 330);
setindexedvar(2, 220);
setindexedvar(3, 1);

Those lines are for defining respawn coords and mode, which are more likely not used by you.
 
You should use these forum functions next time to reduce your post size :D :
Code:
Put your script or texts here

Back to topic, it's strange that beidle doesn't work.... :unsure:
Wait a second, your beidle is different than mine. Mine is like this:
C:
void beidle()
{// Go to IDLE animation!
    void self = getlocalvar("self");

    setidle(self, openborconstant("ANI_IDLE"));
}

Mine specifies animation change so it changes animation when the function is run.

BTW you can omit these lines from your script:
C:
setindexedvar(0, 750);
setindexedvar(1, 330);
setindexedvar(2, 220);
setindexedvar(3, 1);

Those lines are for defining respawn coords and mode, which are more likely not used by you.
thank you. Scripts and elevators are working fine.
 
Back
Top Bottom