entity move z location ?

jonsilva

New member
hello
iam trying to move an entity to a certain location in level coordinates x and z.
the problem is x is working fine but z i cant get an exact value the entity moves more up or down depending on its position in the level...

heres the script iam using
if(anim == openborconstant("ANI_FOLLOW1"))
{
  if( x == 1025 && z == 330 ) // ---entity will stop here
  {
        changeentityproperty(self, "velocity", 0, 0);
  }

  else if( x < 1025 && z > 330 ) // ---entity moves right and up
  {
        changeentityproperty(self, "velocity", 0.2, -0.1);
  }
  else if( x < 1025 && z < 330 ) // ---entity moves right and down
  {
        changeentityproperty(self, "velocity", 0.2, 0.1);
  }
  else if( x > 1025 && z > 330 ) // ---entity moves left and up
  {
        changeentityproperty(self, "velocity", -0.2, -0.1);
  }
  else if( x > 1025 && z < 330 ) // ---entity moves left and down
  {
        changeentityproperty(self, "velocity", -0.2, 0.1);
  }
  }


ive already tried a lot of z values but sometimes i get a diference of 20 or 30 pixels i cant get the entity in 330 z pixels nor even get it between 328 / 332... but x works very well it goes exacly were i want...

anyone know how to move an entity to a z pixel position ?
 
Depending on the delay times of your follow1 animation, you might want to use a position interval instead of an exact position (destination area vs destination dot). If the delay times are too long, your entity might move forward and backward endlessly around the destination dot.

When entity enters the area, if you want it to be on your exact dot position then you can just wrap it there (changing its "x" and "z" properties).

You could also try to use onmovex and onmovez script events to get better time resolution independently from your animation delays.
 
jonsilva said:
hello
iam trying to move an entity to a certain location in level coordinates x and z.
the problem is x is working fine but z i cant get an exact value the entity moves more up or down depending on its position in the level...

heres the script iam using
if(anim == openborconstant("ANI_FOLLOW1"))
{
  if( x == 1025 && z == 330 ) // ---entity will stop here
  {
        changeentityproperty(self, "velocity", 0, 0);
  }

  else if( x < 1025 && z > 330 ) // ---entity moves right and up
  {
        changeentityproperty(self, "velocity", 0.2, -0.1);
  }
  else if( x < 1025 && z < 330 ) // ---entity moves right and down
  {
        changeentityproperty(self, "velocity", 0.2, 0.1);
  }
  else if( x > 1025 && z > 330 ) // ---entity moves left and up
  {
        changeentityproperty(self, "velocity", -0.2, -0.1);
  }
  else if( x > 1025 && z < 330 ) // ---entity moves left and down
  {
        changeentityproperty(self, "velocity", -0.2, 0.1);
  }
  }


ive already tried a lot of z values but sometimes i get a diference of 20 or 30 pixels i cant get the entity in 330 z pixels nor even get it between 328 / 332... but x works very well it goes exacly were i want...

anyone know how to move an entity to a z pixel position ?

Use this func from my mov library:
Code:
int movetoxz(void player, float dir_x, float dir_z, int final_direction) {
    float x = getentityproperty(player, "x");
    float z = getentityproperty(player, "z");
    float a = getentityproperty(player, "y");
    float base = getentityproperty(player, "base");
    float threshold = 0.99; // precisione
    float speed = getentityproperty(player,"speed");
    float speed_x, speed_z;

    if ( getentityproperty(player, "animationid") != openborconstant("ANI_SPAWN") && getentityproperty(player, "animationid") != openborconstant("ANI_RESPAWN") ) {
        if ( a != base ) changeentityproperty(player, "position", x, z, base);

        if ( x > dir_x-threshold && x < dir_x+threshold  ) {
            speed_x = 0;
        } else if ( x < dir_x+threshold ) { // pg deve andare a destra
            if ( getentityproperty(player, "animationid") != openborconstant("ANI_WALK") ) changeentityproperty(player, "animation", openborconstant("ANI_WALK"));
            changeentityproperty(player, "direction", 1);
            speed_x = speed;
            if ( (dir_x-x) <= threshold ) speed_x = (dir_x-x)*(2/3); // Impostiamo la velocità proprio uguale alla distanza che manca
        } else if ( x > dir_x-threshold ) { // pg deve andare a sinistra
            if ( getentityproperty(player, "animationid") != openborconstant("ANI_WALK") ) changeentityproperty(player, "animation", openborconstant("ANI_WALK"));
            changeentityproperty(player, "direction", 0);
            speed_x = -1*speed;
            if ( (x-dir_x) <= threshold ) speed_x = -1*(x-dir_x)*(2/3);
        }

        // Diamo la priorità all'animazione UP/DOWN
        if ( z > dir_z-threshold && z < dir_z+threshold  ) {
            speed_z = 0;
        } else if ( z < dir_z+threshold ) { // pg deve andare giù
            if ( getentityproperty(player, "animationid") != openborconstant("ANI_DOWN") ) changeentityproperty(player, "animation", openborconstant("ANI_DOWN"));
            speed_z = speed/2;
            if ( (dir_z-z) <= threshold ) speed_z = (dir_z-z)*(2/3);
        } else if ( z > dir_z-threshold ) { // pg deve andare su
            if ( getentityproperty(player, "animationid") != openborconstant("ANI_UP") ) changeentityproperty(player, "animation", openborconstant("ANI_UP"));
            speed_z = -1*(speed/2);
            if ( (z-dir_z) <= threshold ) speed_z = -1*(z-dir_z)*(2/3);
        }

        if ( speed_x == 0 && speed_z == 0 ) {
            changeentityproperty(player, "velocity", speed_x, speed_z, NULL());
            if ( getentityproperty(player, "animationid") != openborconstant("ANI_IDLE") ) changeentityproperty(player, "animation", openborconstant("ANI_IDLE"));
            changeentityproperty(player, "direction", final_direction);

            return 1;
        }

        changeentityproperty(player, "velocity", speed_x, speed_z, NULL());
    } // fine if spawn

  return 0;
}

first use noaicontrol set to 1.
then use this function in ondrawscript or script event.
set the player, x, z and the final direction.
 
thanks
this is weird moments ago i could get the entity to stop more down...
now iam tired of testing it and it seems to be stoping in a good position...
maybe iam missing an angle or maybe its working iam confused...
Depending on the delay times of your follow1 animation
iam using the script in the entity header  ;D  i could use a delay of 5000 and it would still move the same way unfortunaly i cant seem to upload a video (ive tried)... iam doing the test your might thing and all the entities are moving kind like ping poing when they hit the screen border or less to give a more cooler effect...

Use this func from my mov library:
thanks i ill try to use it on the entity header... it could be more complicated or easy to use the automove script since the in this part the player is not being used instead iam using one big image that hits an obstacle...

might1.jpg


might2.jpg


might3.jpg


since everything is movement here background/player image/boards... my point was when the player presses the special key to release the attack... he and boards would move to the coordinates x1025 z 330 and then he would make the attack.
 
jonsilva said:
iam using the script in the entity header  ;D

If your talking about @script @end_script in header, then it is still linked to animations delays. If your talking about script, then ok, this one is linked to engine cycles  ;)
 
yes its the script is right on top of all animations...
heres the background and breaks .txt

Code:
name	mightback
type	obstacle
health	1000
nolife	1
facing	1
nomove	1 1
shadow 	0
hostile player
setlayer  1000
offscreenkill	50000
subject_to_gravity 0

animationscript data/scripts/escript.c

load	cuptext

palette	none

script	@script
void main()
{
    void self = getlocalvar("self");
	void anim = getentityproperty(self,"animationID");
	//void target = findtarget(self);
  	//void plyr = getentityproperty(target, "playerindex");
	//void frame = getentityproperty(self,"animpos");

	int x = getentityproperty(self,"x");
	int z = getentityproperty(self,"z");

	int XPos = openborvariant("xpos");
	int YPos = openborvariant("ypos");
	int Screen = openborvariant("hResolution");
	int Screen2 = openborvariant("vResolution");
		float Vx = getlocalvar("x"+self);
		float Vz = getlocalvar("z"+self);

	float cnt = getglobalvar ("center");


	if(anim == openborconstant("ANI_IDLE"))
	{
   		if( x >= XPos+Screen-180) // right
   		{
        	changeentityproperty(self, "velocity", -0.2, Vz);
   		}
   		else if(x <= XPos+180) // left
   		{
        	changeentityproperty(self, "velocity", 0.2, Vz);
   		}
   		else if( z >= YPos+Screen2-130) // down
   		{
		changeentityproperty(self, "velocity", Vx, -0.1);
   		}
   		else if( z <= YPos+100) // up
   		{
		changeentityproperty(self, "velocity", Vx, 0.1);
   		}
  	}

	if(anim == openborconstant("ANI_FOLLOW10") || anim == openborconstant("ANI_FOLLOW12") && cnt != 1)
	{
   		if( x >= XPos+Screen-220) // right
   		{
        	changeentityproperty(self, "velocity", -0.4, Vz);
   		}
   		else if(x <= XPos+220) // left
   		{
        	changeentityproperty(self, "velocity", 0.4, Vz);
   		}
   		else if( z >= YPos+Screen2+40) // down
   		{
		changeentityproperty(self, "velocity", Vx, -0.1);
   		}
   		else if( z <= YPos+280) // up
   		{
		changeentityproperty(self, "velocity", Vx, 0.1);
   		}
  	}
	if(anim == openborconstant("ANI_FOLLOW10") || anim == openborconstant("ANI_FOLLOW12") && cnt == 1)
	{
   		if( x == 1025 && z == 385 )
   		{
        	changeentityproperty(self, "velocity", 0, 0);
		changeentityproperty(self, "position", 1025, 330);
   		}

   		else if( x < 1025 && z > 385 ) 
   		{
        	changeentityproperty(self, "velocity", 0.4, -0.1);
   		}
   		else if( x < 1025 && z < 385 ) 
   		{
        	changeentityproperty(self, "velocity", 0.4, 0.1);
   		}
   		else if( x > 1025 && z > 385 ) 
   		{
        	changeentityproperty(self, "velocity", -0.4, -0.1);
   		}
   		else if( x > 1025 && z < 385 ) 
   		{
        	changeentityproperty(self, "velocity", -0.4, 0.1);
   		}
  	}

//-------------------//---break-kill---//---------//---------------------

	float out = getglobalvar ("brkgo");

   	if( out == 1 || out == 2 )
   	{
	killentity(self);
   	}

}
@end_script

anim	idle
	loop	1 2 14
	delay	14
	offset	305 200
	frame	data/bgs/0might/bck/back01.gif
	@cmd	dasher -0.2 0 0.1
	frame	data/bgs/0might/bck/back01.gif
	frame	data/bgs/0might/bck/back01.gif #2
	@cmd	clearL
	frame	data/bgs/0might/bck/back01.gif
	frame	data/bgs/0might/bck/back02.gif
	frame	data/bgs/0might/bck/back03.gif
	frame	data/bgs/0might/bck/back04.gif
	delay	50
	frame	data/bgs/0might/bck/back05.gif
	delay	14
	frame	data/bgs/0might/bck/back04.gif
	frame	data/bgs/0might/bck/back03.gif
	frame	data/bgs/0might/bck/back02.gif
	frame	data/bgs/0might/bck/back01.gif
	delay	60
	frame	data/bgs/0might/bck/back01.gif
	delay	14
	frame	data/bgs/0might/bck/back01.gif
	frame	data/bgs/0might/bck/back01.gif
	frame	data/bgs/0might/bck/back01.gif



#-------------------//----BREAKS--//-----------------------

#-------------------//----focus-board-start---//-----------

anim	follow10
@script
void self = getlocalvar("self");
if (frame == 1)
	{
	changeentityproperty(self, "setlayer", 2500);
	}
@end_script
	loop	1 3 12
	delay	5
	offset	200 100
	bbox	30 10 350 160 600
	frame	data/bgs/0might/bck/mbrd01.gif
	frame	data/bgs/0might/bck/mbrd01.gif
	frame	data/bgs/0might/bck/mbrd01.gif
	frame	data/bgs/0might/bck/mbrd01.gif
	@cmd	damage 60 "ANI_FOLLOW11"
	frame	data/bgs/0might/bck/mbrd01.gif #4
	@cmd	damage 60 "ANI_FOLLOW11"
	frame	data/bgs/0might/bck/mbrd01.gif
	@cmd	damage 60 "ANI_FOLLOW11"
	frame	data/bgs/0might/bck/mbrd01.gif
	@cmd	looper 4 9
	delay	15
	@cmd	damage 60 "ANI_FOLLOW11"
	frame	data/bgs/0might/bck/mbrd06.gif
	@cmd	damage 60 "ANI_FOLLOW11"
	frame	data/bgs/0might/bck/mbrd07.gif
	@cmd	damage 60 "ANI_FOLLOW11"
	frame	data/bgs/0might/bck/mbrd08.gif
	@cmd	damage 60 "ANI_FOLLOW11"
	frame	data/bgs/0might/bck/mbrd07.gif
	@cmd	damage 60 "ANI_FOLLOW11"
	frame	data/bgs/0might/bck/mbrd06.gif
	frame	data/bgs/0might/bck/mbrd06.gif


anim	follow11
@script
void self = getlocalvar("self");
if (frame == 25)
	{
	setglobalvar ("brkgo", 1);
	}
@end_script
	loop	0
	delay	5
	offset	200 100
	bbox	0 0 0 0
	frame	data/bgs/0might/bck/mbrd02.gif
	@cmd	stop
	sound	data/sounds/wood.wav
	frame	data/bgs/0might/bck/mbrd01.gif
	frame	data/bgs/0might/bck/mbrd02.gif
	frame	data/bgs/0might/bck/mbrd01.gif
	frame	data/bgs/0might/bck/mbrd03.gif
	frame	data/bgs/0might/bck/mbrd02.gif
	frame	data/bgs/0might/bck/mbrd03.gif
	frame	data/bgs/0might/bck/mbrd02.gif
	frame	data/bgs/0might/bck/mbrd04.gif
	frame	data/bgs/0might/bck/mbrd03.gif
	frame	data/bgs/0might/bck/mbrd04.gif
	frame	data/bgs/0might/bck/mbrd03.gif
	frame	data/bgs/0might/bck/mbrd05.gif
	frame	data/bgs/0might/bck/mbrd04.gif
	frame	data/bgs/0might/bck/mbrd05.gif
	frame	data/bgs/0might/bck/mbrd04.gif
	delay	4
	offset	200 101
	frame	data/bgs/0might/bck/mbrd05.gif #16
	offset	200 100
	frame	data/bgs/0might/bck/mbrd05.gif
	offset	200 101
	frame	data/bgs/0might/bck/mbrd05.gif
	offset	200 100
	frame	data/bgs/0might/bck/mbrd05.gif
	@cmd	looper 16 30
	frame	data/bgs/0might/bck/mbrd05.gif
	@cmd	spawnAni2 "cuptext" 40 0 30 "ANI_FOLLOW2"
	frame	data/bgs/0might/bck/mbrd05.gif
	delay	20
	frame	data/bgs/0might/bck/mbrd05.gif
	frame	data/bgs/0might/bck/mbrd05.gif
	frame	data/bgs/0might/bck/mbrd05.gif
	frame	data/bgs/0might/bck/mbrd05.gif #25
	frame	data/bgs/0might/bck/mbrd05.gif
	frame	data/bgs/0might/bck/mbrd05.gif

#-------------------//----focus-board-end---//-----------



#-------------------//----focus-log-start---//-----------

anim	follow12
@script
void self = getlocalvar("self");
if (frame == 1)
	{
	changeentityproperty(self, "setlayer", 2500);
	}
@end_script
	loop	1 3 12
	delay	5
	offset	255 110
	bbox	60 10 390 160 600
	frame	data/bgs/0might/bck/logrk01.gif
	frame	data/bgs/0might/bck/logrk01.gif
	frame	data/bgs/0might/bck/logrk01.gif
	frame	data/bgs/0might/bck/logrk01.gif
	@cmd	damage 60 "ANI_FOLLOW13"
	frame	data/bgs/0might/bck/logrk01.gif #4
	@cmd	damage 60 "ANI_FOLLOW13"
	frame	data/bgs/0might/bck/logrk01.gif
	@cmd	damage 60 "ANI_FOLLOW13"
	frame	data/bgs/0might/bck/logrk01.gif
	@cmd	looper 4 9
	delay	15
	@cmd	damage 60 "ANI_FOLLOW13"
	frame	data/bgs/0might/bck/logrk06.gif
	@cmd	damage 60 "ANI_FOLLOW13"
	frame	data/bgs/0might/bck/logrk07.gif
	@cmd	damage 60 "ANI_FOLLOW13"
	frame	data/bgs/0might/bck/logrk08.gif
	@cmd	damage 60 "ANI_FOLLOW13"
	frame	data/bgs/0might/bck/logrk07.gif
	@cmd	damage 60 "ANI_FOLLOW13"
	frame	data/bgs/0might/bck/logrk06.gif
	frame	data/bgs/0might/bck/logrk06.gif


anim	follow13
@script
void self = getlocalvar("self");
if (frame == 25)
	{
	setglobalvar ("brkgo", 1);
	}
@end_script
	loop	0
	delay	5
	offset	255 110
	bbox	0 0 0 0
	frame	data/bgs/0might/bck/logrk02.gif
	@cmd	stop
	sound	data/sounds/wood.wav
	frame	data/bgs/0might/bck/logrk01.gif
	frame	data/bgs/0might/bck/logrk02.gif
	frame	data/bgs/0might/bck/logrk01.gif
	frame	data/bgs/0might/bck/logrk03.gif
	frame	data/bgs/0might/bck/logrk02.gif
	frame	data/bgs/0might/bck/logrk03.gif
	frame	data/bgs/0might/bck/logrk02.gif
	frame	data/bgs/0might/bck/logrk04.gif
	frame	data/bgs/0might/bck/logrk03.gif
	frame	data/bgs/0might/bck/logrk04.gif
	frame	data/bgs/0might/bck/logrk03.gif
	frame	data/bgs/0might/bck/logrk05.gif
	frame	data/bgs/0might/bck/logrk04.gif
	frame	data/bgs/0might/bck/logrk05.gif
	frame	data/bgs/0might/bck/logrk04.gif
	delay	4
	offset	255 111
	frame	data/bgs/0might/bck/logrk05.gif #16
	offset	255 110
	frame	data/bgs/0might/bck/logrk05.gif
	offset	255 111
	frame	data/bgs/0might/bck/logrk05.gif
	offset	255 110
	frame	data/bgs/0might/bck/logrk05.gif
	@cmd	looper 16 30
	frame	data/bgs/0might/bck/logrk05.gif
	@cmd	spawnAni2 "cuptext" 40 0 30 "ANI_FOLLOW2"
	frame	data/bgs/0might/bck/logrk05.gif
	delay	20
	frame	data/bgs/0might/bck/logrk05.gif
	frame	data/bgs/0might/bck/logrk05.gif
	frame	data/bgs/0might/bck/logrk05.gif
	frame	data/bgs/0might/bck/logrk05.gif #25
	frame	data/bgs/0might/bck/logrk05.gif
	frame	data/bgs/0might/bck/logrk05.gif

#-------------------//----focus-log-end---//-----------

#-------------------//----BUTTONS--//-----------------------

anim	follow20
@script
void self = getlocalvar("self");
if (frame == 1)
	{
	changeentityproperty(self, "setlayer", 9999900);
	}
@end_script
	loop	1 3 6
	delay	6
	offset	100 50
	bbox	0 0 0 0
	frame	data/bgs/0might/bck/a01.gif
	frame	data/bgs/0might/bck/a02.gif #1
	frame	data/bgs/0might/bck/a03.gif
	frame	data/bgs/0might/bck/a01.gif #3
	frame	data/bgs/0might/bck/a02.gif
	frame	data/bgs/0might/bck/a03.gif
	frame	data/bgs/0might/bck/a01.gif
	frame	data/bgs/0might/bck/a02.gif
	frame	data/bgs/0might/bck/a03.gif
	frame	data/bgs/0might/bck/a01.gif
	frame	data/bgs/0might/bck/a01.gif

#-------------------//----BREAK-TIME--//-----------

anim	follow21
@script
void self = getlocalvar("self");
float eTime = openborvariant("elapsed_time");
float cnt2 = getglobalvar ("center");
if (frame == 1)
	{
	changeentityproperty(self, "setlayer", 9999900);
	}
if ( frame > 7 && cnt2 == 1)
	{
		//changeentityproperty(self, "frozen", 1);
		//changeentityproperty(self, "freezetime", eTime+1800);
		killentity(self);
	}
if ( frame == 34)
	{
	setglobalvar ("brkgo", 2);
	}
@end_script
	loop	0
	delay	5
	offset	90 80
	bbox	0 0 0 0
	frame	data/bgs/0might/bck/empty.gif
	frame	data/bgs/0might/bck/empty.gif
	frame	data/bgs/0might/bck/empty.gif
	delay	25
	frame	data/bgs/0might/bck/tm11.gif #3
	frame	data/bgs/0might/bck/empty.gif
	frame	data/bgs/0might/bck/tm11.gif
	frame	data/bgs/0might/bck/empty.gif
	@cmd	looper 3 3
	delay	15
	frame	data/bgs/0might/bck/tm11.gif #7
	frame	data/bgs/0might/bck/tm10.gif
	frame	data/bgs/0might/bck/tm11.gif #9
	frame	data/bgs/0might/bck/tm10.gif
	frame	data/bgs/0might/bck/tm11.gif
	frame	data/bgs/0might/bck/tm10.gif
	@cmd	looper 9 2
	frame	data/bgs/0might/bck/tm10.gif
	frame	data/bgs/0might/bck/tm10.gif #14
	delay	190
	frame	data/bgs/0might/bck/tm10.gif
	frame	data/bgs/0might/bck/tm09.gif
	frame	data/bgs/0might/bck/tm08.gif
	frame	data/bgs/0might/bck/tm07.gif
	frame	data/bgs/0might/bck/tm06.gif
	frame	data/bgs/0might/bck/tm05.gif
	frame	data/bgs/0might/bck/tm04.gif
	frame	data/bgs/0might/bck/tm03.gif
	frame	data/bgs/0might/bck/tm02.gif
	frame	data/bgs/0might/bck/tm01.gif
	frame	data/bgs/0might/bck/tm00.gif
	delay	15
	frame	data/bgs/0might/bck/tm00.gif #26
	frame	data/bgs/0might/bck/tm11.gif
	frame	data/bgs/0might/bck/tm00.gif
	frame	data/bgs/0might/bck/tm11.gif
	frame	data/bgs/0might/bck/tm00.gif
	frame	data/bgs/0might/bck/tm11.gif
	@cmd	looper 28 5
	frame	data/bgs/0might/bck/tm11.gif
	frame	data/bgs/0might/bck/empty.gif
	@cmd	spawnAni2 "cuptext" 40 0 30 "ANI_FOLLOW6"
	frame	data/bgs/0might/bck/empty.gif
	frame	data/bgs/0might/bck/empty.gif #35
	frame	data/bgs/0might/bck/empty.gif
	frame	data/bgs/0might/bck/empty.gif
	frame	data/bgs/0might/bck/empty.gif
	frame	data/bgs/0might/bck/empty.gif
	@cmd	suicide
	frame	data/bgs/0might/bck/empty.gif

if the problem is the delay in animations this may have to take more frames to replace the ones above 5.
now that ive advanced a little further i think the player image position stops down more times when i press the attack repeatetly but it doesnt happen often... i only got it in 1 time...
in the player image iam using edelay script to make the animation go faster, if the health is above 20/30/40 etc... the delay is changing many times in this animation... the problem here is that it happens very rarelly there must be a hole in those coordinates...
 
Back
Top Bottom