Solved Mix Scripts = spawnAniEdge

Question that is answered or resolved.

dantedevil

Well-known member
I try to mix this two script but cant make it work.

Code:
void spawn02(void vName, float fX, float fY, float fZ, int Edge)
{
    //Spawns entity based on left screen edge
    //
    //vName: Model name of entity to be spawned in.
    //fX: X distance relative to left edge
    //fY: Y height from ground
      //fZ: Z location adjustment

    void self = getlocalvar("self"); //Get calling entity.
    void vSpawn; //Spawn object.
    int Direction = getentityproperty(self, "direction");
        int XPos = openborvariant("xpos"); //Get screen edge's position

    clearspawnentry(); //Clear current spawn entry.
      setspawnentry("name", vName); //Acquire spawn entity by name.

   if (Direction == 0){ //Is entity facing left?                 
      fX = Edge-fX; //Reverse X direction to match facing and screen length
   }

      fZ = fZ + getentityproperty(self, "z"); //Get Z location and add adjustment.

    vSpawn = spawn(); //Spawn in entity.

    changeentityproperty(vSpawn, "position", fX + XPos, fZ, fY); //Set spawn location.
    return vSpawn; //Return spawn.
}

Code:
void spawnAni(void vName, float fX, float fY, float fZ, void Ani, float Vx, float Vy, float Vz)
{
    //spawnB (Generic spawner) + Specific animation + velocities
    //Damon Vaughn Caskey + Douglas Baldan/O Ilusionista
    //07/06/2007 - 30/05/2013
    //
    //Spawns entity next to caller.
    //
    //vName: Model name of entity to be spawned in.
    //fX: X location adjustment.
    //fZ: Y location adjustment.
      //fY: Z location adjustment.

    void self = getlocalvar("self"); //Get calling entity.
    void vSpawn; //Spawn object.
    int  iDirection = getentityproperty(self, "direction");

    clearspawnentry(); //Clear current spawn entry.
      setspawnentry("name", vName); //Acquire spawn entity by name.

    if (iDirection == 0){ //Is entity facing left?                 
          fX = -fX; //Reverse X direction to match facing.
    }

      fX = fX + getentityproperty(self, "x"); //Get X location and add adjustment.
      fY = fY + getentityproperty(self, "a"); //Get Y location and add adjustment.
      fZ = fZ + getentityproperty(self, "z"); //Get Z location and add adjustment.
   
    vSpawn = spawn(); //Spawn in entity.

    changeentityproperty(vSpawn, "position", fX, fZ, fY); //Set spawn location.
    changeentityproperty(vSpawn, "direction", iDirection); //Set direction.
        performattack(vSpawn, openborconstant(Ani));
    changeentityproperty(vSpawn, "velocity", Vx, Vy, Vz);

    return vSpawn; //Return spawn.
}


An here my try:
Code:
void spawnAniEdge(void vName, float fX, float fY, float fZ, void Ani, int Edge)
{
    //Spawns entity based on left screen edge
    //
    //vName: Model name of entity to be spawned in.
    //fX: X distance relative to left edge
    //fY: Y height from ground
      //fZ: Z location adjustment

    void self = getlocalvar("self"); //Get calling entity.
    void vSpawn; //Spawn object.
    int Direction = getentityproperty(self, "direction");
        int XPos = openborvariant("xpos"); //Get screen edge's position

    clearspawnentry(); //Clear current spawn entry.
      setspawnentry("name", vName); //Acquire spawn entity by name.

   if (Direction == 0){ //Is entity facing left?                 
      fX = Edge-fX; //Reverse X direction to match facing and screen length
   }

      fZ = fZ + getentityproperty(self, "z"); //Get Z location and add adjustment.

    vSpawn = spawn(); //Spawn in entity.


    changeentityproperty(vSpawn, "position", fX + XPos, fZ, fY); //Set spawn location.
        performattack(vSpawn, openborconstant(Ani));
    return vSpawn; //Return spawn.
}
 
Last edited:
Solution
glad you got it solved
I haven't told anyone yet that actually Edge parameter of spawn02 function is obsolete. You can get the correct Edge value just with this:
        int Screen = openborvariant("hResolution"); // Get screen width

Yeah, I named it Screen instead of Edge
So your function should be like this without Edge parameter:

Code:
void spawnAniEdge(void vName, float fX, float fY, float fZ, void Ani)
{
	//Spawns entity based on left screen edge
	//Damon Vaughn Caskey + Douglas Baldan/O Ilusionista + Bloodbane + Dantedevil
	//
	//vName: Model name of entity to be spawned in.
	//fX: X distance relative to left edge
	//fY: Y height from ground
      //fZ: Z location adjustment

	void self = getlocalvar("self"); //Get...
msmalik681 said:
show a example command you use to spawn the entity and have you confirmed both the original scripts work ?

Yes my friend, both scripts works ok.

Here a example command for each one:

Code:
        @cmd    spawn02 "trcomplete" 0 0 0 0
	frame	data/chars/misc/empty.png

Code:
        @cmd    spawnAniM "carp"  -74 38 2 "ANI_FOLLOW16" 0 0 0 
	frame	data/chars/misc/bonus/car/car22.png

And using my mix script, I try this:
Code:
        @cmd   spawnAniEdge "texts"  0 0 0 "ANI_FOLLOW1" 0
	frame	data/chars/misc/empty.png
 
The idea is to use a single entity to spawn different texts. But for that I need the spawn to run taking into account the edge of the screen.

I have this entity using for different texts, with some anim follows:
Code:
name	textlist
type	text
setlayer 1001001000
facing 1
palette none
antigravity 100
facing	 1

anim	follow1
	loop	0
	offset	240 136
	delay	1
	frame	data/chars/misc/dialogue/00.png
	delay	4
	frame	data/chars/misc/dialogue/complete.png
	frame	data/chars/misc/dialogue/complete.png
	frame	data/chars/misc/dialogue/complete.png
	frame	data/chars/misc/dialogue/complete.png
	frame	data/chars/misc/dialogue/complete.png
	frame	data/chars/misc/dialogue/complete.png
	delay	9999
	frame	data/chars/misc/dialogue/complete.png

anim	follow2
	delay	30
	#flipframe	0
	loop	0
	offset	240 136
	frame	data/chars/misc/dialogue/00.png
	delay	2
	drawmethod	scaley 0.0
	sound	data/chars/misc/dialogue/bonus.wav
	frame	data/chars/misc/dialogue/bonus1c.png
	drawmethod	scaley 0.1
	frame	data/chars/misc/dialogue/bonus1c.png
	drawmethod	scaley 0.2
	frame	data/chars/misc/dialogue/bonus1c.png
	drawmethod	scaley 0.3
	frame	data/chars/misc/dialogue/bonus1c.png
	drawmethod	scaley 0.4
	frame	data/chars/misc/dialogue/bonus1c.png
	drawmethod	scaley 0.5
	frame	data/chars/misc/dialogue/bonus1c.png
	drawmethod	scaley 0.6
	frame	data/chars/misc/dialogue/bonus1c.png
	drawmethod	scaley 0.7
	frame	data/chars/misc/dialogue/bonus1c.png
	drawmethod	scaley 0.8
	frame	data/chars/misc/dialogue/bonus1c.png
	drawmethod	scaley 0.9
	frame	data/chars/misc/dialogue/bonus1c.png
	delay	5
	nodrawmethod	
	frame	data/chars/misc/dialogue/bonus1.png
	frame	data/chars/misc/dialogue/bonus1b.png
	frame	data/chars/misc/dialogue/bonus1.png
	frame	data/chars/misc/dialogue/bonus1b.png
	frame	data/chars/misc/dialogue/bonus1.png
	frame	data/chars/misc/dialogue/bonus1b.png
	frame	data/chars/misc/dialogue/bonus1.png
	frame	data/chars/misc/dialogue/bonus1b.png
	frame	data/chars/misc/dialogue/bonus1.png
	frame	data/chars/misc/dialogue/bonus1b.png
	frame	data/chars/misc/dialogue/bonus1.png
	frame	data/chars/misc/dialogue/bonus1b.png
	frame	data/chars/misc/dialogue/bonus1.png
	frame	data/chars/misc/dialogue/bonus1b.png
	frame	data/chars/misc/dialogue/bonus1.png
	frame	data/chars/misc/dialogue/bonus1b.png
	frame	data/chars/misc/dialogue/bonus1.png
	frame	data/chars/misc/dialogue/bonus1b.png
	frame	data/chars/misc/dialogue/bonus1.png
	frame	data/chars/misc/dialogue/bonus1b.png
	frame	data/chars/misc/dialogue/bonus1.png
	frame	data/chars/misc/dialogue/bonus1b.png
	frame	data/chars/misc/dialogue/bonus1.png
	frame	data/chars/misc/dialogue/bonus1b.png
	frame	data/chars/misc/dialogue/bonus1.png
	frame	data/chars/misc/dialogue/bonus1b.png
	frame	data/chars/misc/dialogue/bonus1.png
	frame	data/chars/misc/dialogue/bonus1b.png
	frame	data/chars/misc/dialogue/bonus1.png
	frame	data/chars/misc/dialogue/bonus1b.png
	frame	data/chars/misc/dialogue/bonus1.png
	frame	data/chars/misc/dialogue/bonus1b.png
	frame	data/chars/misc/dialogue/bonus1.png
	frame	data/chars/misc/dialogue/bonus1b.png
	frame	data/chars/misc/dialogue/bonus1.png
	frame	data/chars/misc/dialogue/bonus1b.png
	frame	data/chars/misc/dialogue/bonus1.png
	frame	data/chars/misc/dialogue/bonus1b.png
	frame	data/chars/misc/dialogue/bonus1.png
	frame	data/chars/misc/dialogue/bonus1b.png
	delay	5
	sound	data/sounds/ready.wav
	frame	data/chars/misc/dialogue/bonus2b.png
	frame	data/chars/misc/dialogue/bonus2.png
	frame	data/chars/misc/dialogue/bonus2b.png
	frame	data/chars/misc/dialogue/bonus2.png
	frame	data/chars/misc/dialogue/bonus2b.png
	frame	data/chars/misc/dialogue/bonus2.png
	frame	data/chars/misc/dialogue/bonus2b.png
	frame	data/chars/misc/dialogue/bonus2.png
	frame	data/chars/misc/dialogue/bonus2b.png
	frame	data/chars/misc/dialogue/bonus2.png
	frame	data/chars/misc/dialogue/bonus2b.png
	frame	data/chars/misc/dialogue/bonus2.png
	frame	data/chars/misc/dialogue/bonus2b.png
	frame	data/chars/misc/dialogue/bonus2.png
	frame	data/chars/misc/dialogue/bonus2b.png
	frame	data/chars/misc/dialogue/bonus2.png
	frame	data/chars/misc/dialogue/bonus2b.png
	frame	data/chars/misc/dialogue/bonus2.png
	frame	data/chars/misc/dialogue/bonus2b.png
	frame	data/chars/misc/dialogue/bonus2.png
	frame	data/chars/misc/dialogue/bonus2b.png
	frame	data/chars/misc/dialogue/bonus2.png
	frame	data/chars/misc/dialogue/bonus2b.png
	frame	data/chars/misc/dialogue/bonus2.png
	frame	data/chars/misc/dialogue/bonus2b.png
	frame	data/chars/misc/dialogue/bonus2.png
	frame	data/chars/misc/dialogue/bonus2b.png
	frame	data/chars/misc/dialogue/bonus2.png
	frame	data/chars/misc/dialogue/bonus2b.png
	frame	data/chars/misc/dialogue/bonus2.png
	frame	data/chars/misc/dialogue/bonus2b.png
	frame	data/chars/misc/dialogue/bonus2.png
	frame	data/chars/misc/dialogue/bonus2b.png
	frame	data/chars/misc/dialogue/bonus2.png
	frame	data/chars/misc/dialogue/bonus2b.png
	frame	data/chars/misc/dialogue/bonus2.png
	frame	data/chars/misc/dialogue/bonus2b.png
	frame	data/chars/misc/dialogue/bonus2.png
	frame	data/chars/misc/dialogue/bonus2b.png
	frame	data/chars/misc/dialogue/bonus2.png
	delay	2
	drawmethod	scale	3.0
	sound	data/sounds/go2.wav
	frame	data/chars/misc/dialogue/bonus3c.png
	drawmethod	scale	2.5
	frame	data/chars/misc/dialogue/bonus3c.png
	drawmethod	scale	2.0
	frame	data/chars/misc/dialogue/bonus3c.png
	drawmethod	scale	1.5
	frame	data/chars/misc/dialogue/bonus3c.png
	drawmethod	scale	1.0
	frame	data/chars/misc/dialogue/bonus3c.png
	delay	5
	nodrawmethod	
	frame	data/chars/misc/dialogue/bonus3b.png
	frame	data/chars/misc/dialogue/bonus3.png
	frame	data/chars/misc/dialogue/bonus3b.png
	frame	data/chars/misc/dialogue/bonus3.png
	frame	data/chars/misc/dialogue/bonus3b.png
	frame	data/chars/misc/dialogue/bonus3.png
	frame	data/chars/misc/dialogue/bonus3b.png
	frame	data/chars/misc/dialogue/bonus3.png
	frame	data/chars/misc/dialogue/bonus3b.png
	frame	data/chars/misc/dialogue/bonus3.png
	frame	data/chars/misc/dialogue/bonus3b.png
	frame	data/chars/misc/dialogue/bonus3.png
	frame	data/chars/misc/dialogue/bonus3b.png
	frame	data/chars/misc/dialogue/bonus3.png
	frame	data/chars/misc/dialogue/bonus3b.png
	frame	data/chars/misc/dialogue/bonus3.png
	frame	data/chars/misc/dialogue/bonus3b.png
	frame	data/chars/misc/dialogue/bonus3.png
	frame	data/chars/misc/dialogue/bonus3b.png
	frame	data/chars/misc/dialogue/bonus3.png
	frame	data/chars/misc/dialogue/bonus3b.png
	frame	data/chars/misc/dialogue/bonus3.png
	frame	data/chars/misc/dialogue/bonus3b.png
	frame	data/chars/misc/dialogue/bonus3.png
	frame	data/chars/misc/dialogue/bonus3b.png
	frame	data/chars/misc/dialogue/bonus3.png
	frame	data/chars/misc/dialogue/bonus3b.png
	frame	data/chars/misc/dialogue/bonus3.png
	frame	data/chars/misc/dialogue/bonus3b.png
	frame	data/chars/misc/dialogue/bonus3.png
	frame	data/chars/misc/dialogue/bonus3b.png
	frame	data/chars/misc/dialogue/bonus3.png
	frame	data/chars/misc/dialogue/bonus3b.png
	frame	data/chars/misc/dialogue/bonus3.png
	frame	data/chars/misc/dialogue/bonus3b.png
	frame	data/chars/misc/dialogue/bonus3.png
	frame	data/chars/misc/dialogue/bonus3b.png
	frame	data/chars/misc/dialogue/bonus3.png
	frame	data/chars/misc/dialogue/bonus3b.png
	frame	data/chars/misc/dialogue/bonus3.png
	@cmd	killentity getlocalvar("self")
	frame	data/chars/misc/dialogue/00.png
				
anim	follow3
	loop	0
	offset	240 136
	delay	2
	drawmethod	scale	3.0
	sound	data/sounds/go2.wav
	frame	data/chars/misc/dialogue/perfect.png
	drawmethod	scale	2.5
	frame	data/chars/misc/dialogue/perfect.png
	drawmethod	scale	2.0
	frame	data/chars/misc/dialogue/perfect.png
	drawmethod	scale	1.5
	frame	data/chars/misc/dialogue/perfect.png
	drawmethod	scale	1.0
	frame	data/chars/misc/dialogue/perfect.png
	delay	5
	nodrawmethod	
	frame	data/chars/misc/dialogue/perfect.png
	delay	100
	frame	data/chars/misc/dialogue/perfect.png


Here the animation of the car when use this scripts at the end:
anim fall
        loop    0
delay 12
offset 105 154
bbox 0 0 0 0
        @cmd    stop
        sound  data/sounds/obstacle.wav
        platform 105 194 -125 -95 80 120 50 1000
        @cmd    spawn01 "xplosion2" 8 36 1
        @cmd    spawnAniM "carp"  10 1 2 "ANI_FOLLOW17" 0 0 0
frame data/chars/misc/bonus/car/car25.png
delay 50
frame data/chars/misc/bonus/car/car25.png
        @cmd  damage_all_players 0 0 -100 "ATK_NORMAL98"
delay 70
        @cmd    spawn01 "smoky2" -30 30 1
frame data/chars/misc/bonus/car/car25.png
        @cmd    spawn01 "smoky2" 40 10 1
frame data/chars/misc/bonus/car/car25.png
        @cmd    spawn01 "smoky2" 10 30 1
frame data/chars/misc/bonus/car/car25.png
        @cmd    spawn01 "smoky2" -30 30 1
frame data/chars/misc/bonus/car/car25.png
        @cmd    spawn01 "smoky2" 40 10 1
frame data/chars/misc/bonus/car/car25.png
        @cmd    spawn01 "smoky2" 10 30 1
frame data/chars/misc/bonus/car/car25.png
delay 1
  @cmd    spawnAniEdge "textlist"  0 0 0 "ANI_FOLLOW3" 0
frame data/chars/misc/bonus/car/car25.png
delay 200
frame data/chars/misc/bonus/car/car25.png
delay 1
@cmd finishlevel
frame data/chars/misc/bonus/car/car25.png

The mod run ok, the problem is the mix script work almost like the original spawnAni and never take the value of int Edge.
 
Incredibly, I can solve it alone!

With this script, you can create a single entity with all the texts you need, and thanks to the addition of the edge, you can have the text centered, regardless of whether the spawn comes from another entity.
In the entity of the texts you need to create an ANIM FOLLOW for each text and use it in the following way:

@cmd    spawnAniEdge "textlist" 0 0 0 "ANI_FOLLOW3" 0

Here the script:
Code:
void spawnAniEdge(void vName, float fX, float fY, float fZ, void Ani, int Edge)
{
	//Spawns entity based on left screen edge
	//Damon Vaughn Caskey + Douglas Baldan/O Ilusionista + Bloodbane + Dantedevil
	//
	//vName: Model name of entity to be spawned in.
	//fX: X distance relative to left edge
	//fY: Y height from ground
      //fZ: Z location adjustment

	void self = getlocalvar("self"); //Get calling entity.
	void vSpawn; //Spawn object.
	int Direction = getentityproperty(self, "direction");
        int XPos = openborvariant("xpos"); //Get screen edge's position

	clearspawnentry(); //Clear current spawn entry.
      setspawnentry("name", vName); //Acquire spawn entity by name.

   if (Direction == 0){ //Is entity facing left?                 
      fX = Edge-fX; //Reverse X direction to match facing and screen length
   }

      fZ = fZ + getentityproperty(self, "z"); //Get Z location and add adjustment.

	vSpawn = spawn(); //Spawn in entity.

	changeentityproperty(vSpawn, "position", fX + XPos, fZ, fY); //Set spawn location.
    	performattack(vSpawn, openborconstant(Ani)); 
	return vSpawn; //Return spawn.
}

Important tip:
It is necessary that the entity of the texts have an ANIM IDLE with a frame without an empty image. Because if we do not place an idle and just follows, the mod crash.

Code:
anim	idle
	loop	0
	offset	0 208
	delay	1
	frame	data/chars/misc/dialogue/00.png
 
I too use a single entity to handle all speech in my mod seems to be the best way to handle story systems.

Do you use real text (text objects) or images with text on them ?
 
msmalik681 said:
I too use a single entity to handle all speech in my mod seems to be the best way to handle story systems.

Do you use real text (text objects) or images with text on them ?

I use this system with images, but only for specific texts.
Example: MISSION COMPLETE, BONUS STAGE, PERFECT, TIME UP, TRAINING COMPLETE, etc.

For the dialogues I use the story system.
 
glad you got it solved
I haven't told anyone yet that actually Edge parameter of spawn02 function is obsolete. You can get the correct Edge value just with this:
        int Screen = openborvariant("hResolution"); // Get screen width

Yeah, I named it Screen instead of Edge
So your function should be like this without Edge parameter:

Code:
void spawnAniEdge(void vName, float fX, float fY, float fZ, void Ani)
{
	//Spawns entity based on left screen edge
	//Damon Vaughn Caskey + Douglas Baldan/O Ilusionista + Bloodbane + Dantedevil
	//
	//vName: Model name of entity to be spawned in.
	//fX: X distance relative to left edge
	//fY: Y height from ground
      //fZ: Z location adjustment

	void self = getlocalvar("self"); //Get calling entity.
	void vSpawn; //Spawn object.
	int Direction = getentityproperty(self, "direction");
        int XPos = openborvariant("xpos"); //Get screen edge's position
        int Screen = openborvariant("hResolution"); // Get screen width

	clearspawnentry(); //Clear current spawn entry.
      setspawnentry("name", vName); //Acquire spawn entity by name.

   if (Direction == 0){ //Is entity facing left?                 
      fX = Screen-fX; //Reverse X direction to match facing and screen length
   }

      fZ = fZ + getentityproperty(self, "z"); //Get Z location and add adjustment.

	vSpawn = spawn(); //Spawn in entity.

	changeentityproperty(vSpawn, "position", fX + XPos, fZ, fY); //Set spawn location.
    	performattack(vSpawn, openborconstant(Ani));
	return vSpawn; //Return spawn.
}
 
Solution
Back
Top Bottom