Read-only archive of the Armageddon Games Forums Archive (2000–2026) · About this archive

newww questions

89 replies · 17,160 views · Started 03 February 2008

ok so basically,

while(Abs(this->X - x) > 4) || Abs(this->Y-y) > 4){(this->X=x)&&(this->Y=y)
}

is bad because it is out of order and also more complex than it needs to be. so i need to take out the ()'s because they arent grouping functions together and that would cause an error.

then they need to be seperated which would do the same thing as the &&. and then i need the ; and waitframes() at the end to make it work perfectly like i wanted it to. i get it.

so now, about the movement switching.

im planning on having 5 ffcs. the first is the beast that "controls" the eyes. its basically a blank ffc that will die after all of the eyes are destroyed. so, i need the other 4 to be the ones moving. the big one just kinda sits there.

the other 4 move around ONLY on the top half of the screen. they move around pretty randomly. they bounce off of certain combos, which should be set via a D: number because if its set to bounce off unwalkable combos, then it wont move seeing as to how the whole top half of the screen is un-walkable damage combos. I think i only need it to bounce from 2 combos though.

and at some point, i need the eyes to be able to be pulled toward you via hookshot.

so, the main one is a non moving ffc that is linked to the minion eyes existence.

the other 4 ffcs are the minion eyes. they float randomly.

ok so basically,
while(Abs(this->X - x) > 4) || Abs(this->Y-y) > 4){(this->X=x)&&(this->Y=y)
}

is bad because it is out of order and also more complex than it needs to be.

No!
It's bad because you are using punctuation that should go in the if requirements to try and use functions!
Go back and read the syntax thing again.

so i need to take out the ()'s because they arent grouping functions together and that would cause an error.

They would, as well as the fact that:
Your functions do not end in a semi colon.
All functions must end in semi colons
this->X = x

Is bad
this->X = x;

Is good.

then they need to be seperated which would do the same thing as the &&.

No it would not do the same thing as &&.
In the if requirements, that means 'if(this AND this)'
In a set of functions, you put one function, end with a semi colon, then just put the next.
Often on the next line, but it doesn't have to be.

and then i need the ; and waitframes()

Yes, finish functions with ;
And Waitframe(); is what you want, not Waitframes();
The second is for waiting more than one frame, and what happens is that the loop repeats, and will keep looping the single waitframe for the number of frames necessary.

BUT!
This part is just an excersize in syntax, not anything to do with what you need to put in that loop, because all that was necessary was one waitframe.

Also, I'm not sure that you understand scope properly:

//global
script{
// a
void run(){
int foo;
// b
while(true){
// c
if(1){
//d
}
//c
if(2){
//d
if(3){
//e
}
//d
}
//c
Waitframe();
}
//b
}
//a
}

The Global scope contains everything in your script file
Scope A contains everything within the script
Scope B contains everything within the void run
Scope C contains everything within the while loop
Scope D could be at the level of both if(1) and if(2)
Scope E contains evething within if(3)

So the while loop is within scope b, but things in the while loop are at scope c.
Different numbers of indentations show different scopes, so scope a is at one indentation, whereas scope d is at 4, within both ifs.

I always put my Waitframe() on the same scope as the while, even though it should technically be at scope c, and I always declare all integers on the same scope as the void run(), although they should tecnically be at scope b.
This is all theoretical, because you could write your script out on one line if you wanted, but it makes it a lot easier to read if you get your scope correct.

im planning on having 5 ffcs. the first is the beast that "controls" the eyes. its basically a blank ffc that will die after all of the eyes are destroyed. so, i need the other 4 to be the ones moving. the big one just kinda sits there.

Interesting, if a little complex.

the other 4 move around ONLY on the top half of the screen. they move around pretty randomly. they bounce off of certain combos, which should be set via a D: number because if its set to bounce off unwalkable combos, then it wont move seeing as to how the whole top half of the screen is un-walkable damage combos. I think i only need it to bounce from 2 combos though.

Yeah that's not too hard, I've been scripting random motion quite a bit recently anyway, check the script showcase, I have a random motion script you might find interesting in it.

and at some point, i need the eyes to be able to be pulled toward you via hookshot.

I don't think this is feasable, but other people have said it is.

ah ok i understand a slight bit better now. so the part thats wrong is the type of punctuation im using. i should use ; because im editing the variables there, not the function. ok.

so im in the process of writing this now. this is how far i am.

import "std.zh"

ffc script eyesore;

void run(){

load ffc(1){

int x = 0;

int y = 0;

int Vx = 6;

int Vy = 6;

however i think this might not be right already. ffc 1 is an eye. so it eill be moving. i need to set the combos to "bounce" off of if it hits them.

so... is there a variable to reflect motion over an axis? i want it to just basically set the speed on its axis multiplied by -1 so it reverses direction when it collides with certain combos.

import "std.zh"

ffc script eyesore;

void run(){

load ffc(1){

int x = 0;

int y = 0;

int Vx = 6;

int Vy = 6;


Some bad punctuation still.
Opening scopes starts with '{', not ';', and the script is a scope, so:
ffc script eyesore{

Void run is in that scope, so:
ffc script eyesore{
void run(){

To use functions, you need pointers.
The function is 'LoadFFC(number);' for a start, not 'load ffc(number){'
The pointer for this function is 'Screen->'
Loading an ffc is not a scope, it is a new pointer, so the function ends in ';', not '{'.
So what you need is:
ffc whatever = Screen->LoadFFC(1);

When you declare integers, please declare them at the void run scope.
It's not essential, but it's easier to read.
Also, when you declare an integer, if you declare it with nothing after the declaration it is automatically set to 0 (I was getting at this earlier with the fooeios bit you didn't pick up on it obviously).
It'll be confusing is you use 'Vx' as an integer like that, because 'this->Vx' is a function already.
I'd go for 'xs' (xspeed) or something personaly.
And finally, 6 pix/frm is very very fast.

so:

ffc script eyesore{
void run(){
int x; int y;
int xs = 2;
int ys = 2;
ffc eye1 = Screen->LoadFFC(1);
while(true) // I've put this, you'll probably want it, but you didn't get that far yours

so... is there a variable to reflect motion over an axis? i want it to just basically set the speed on its axis multiplied by -1 so it reverses direction when it collides with certain combos.

Variable:
10. Mathematics, Computers.
a. a quantity or function that may assume any given value or set of values.

Variables do not reflect motion over axis.
Variables store the magnitude of your motion, and functions reflect it.

If you say:

int speed = 15;
this->Vx = -speed;

it will reflect your speed.

You could also put:

int speed = 15;
speed *= -1;
this->Vx = speed;

The '*=' operator means 'Take the value of the integer on the left, and multiply it by the value on the right, then set it to what you get.

hmkay... question. in

ffc script eyesore{
void run(){
int x; int y;
int xs = 2;
int ys = 2;
ffc eye1 = Screen->LoadFFC(1);
while(true)

why did you move the screen->loadffc(1); to after the variables describing it?

also, i understand that putting variables in the () after the void run sets them to the D: slots. how would i set them to describe a combo to set it to? i need 2 of them, but both set combo IDs.

and also how do i say "if ffc eye1 collides with (variable for the combo to bounce off of)"?

sorry for the double-post. my computer is acting up.

so ive fixed what little i have and addes a few things.

import "std.zh"

ffc script eyesore{

void run( int foo,int bar){

int bar = combo();

int foo = combo();

int x; int y;

int xs = 2;

int ys = 2;

ffc eye1 = screen-> load ffc(1);

while (true){

the problem is that i probably have the combo variables wrong. should they be set to

combo(int foo);
combo(int bar);

instead? or is it completely wrong either way?

import "std.zh"

ffc script eyesore{

void run( int foo,int bar){

int bar = combo(); //combo is undeclared!

int foo = combo(); //you have to use data for a combo, it's just a number after all

int bar = 123; //or...
int combo = 123;
int bar = combo;

int x; int y;

int xs = 2;

int ys = 2;

ffc eye1 = screen-> load ffc(1); //load ffc(1) isn't right. you want :
ffc eye1 = Screen->LoadFFC(1); //look in z.script.text and std.zh for these

while (true){

Maybe start off writing some simple little scripts to get the hang of it, then tackle a scripted hookshot and boss. For example you could write the bits of info that those scripts would contain into their own mini scripts, then combine them when you get more proficient with them.

Like movement;
eye1->Vx = 123;
eye1->Vy = 123;
Boss movement;
this->Vx.
other stuff;
if(Link->X>0){//do things
if(Link->HP<32){//other things
etc...

Gleeok already said it, but I'm going to re-stress that you cannot just make up functions.

There is a definitive list of ZScript functions, and it can be found here:
http://www.shardstorm.com/ZCwiki/ZScript_Language_Reference

Any other functions will not work
The functions are case and exact punctuation sensitive, so you can't just write them however you like.

ffc eye1 = screen-> load ffc(1);

This is wrong, because you have not used the correct case for some of the letters, and you have left spaces when you should not have.

If you want to load an ffc, you must do it like this:

ffc eye1 = Screen->LoadFFC(1);

why did you move the screen->loadffc(1); to after the variables describing it?

Because those variables that ypu declared did not have anything to do with the ffc that you declared.
I can see why you thought that they did, due to you writing the ffc as a scope originally, but where you put 'int Vx = 6;', it did not have any relation to the ffc's speed.
What you did was declare a variable and set it to 6.
Nothing to do with ffc speed.

What you wanted was:

ffc eye1 = Screen->LoadFFC(1);
eye1->Vx = 6;

Once you have declared the ffc like so, it is then referenced via a pointer, like that.

oh ok... so basically the way i was doing it, it wasnt right because of my spaces and capitalization... ok i understand.

but what about the combo variables? i want them to be stated by the foo and bar intergers, which i have set to the D:0 and D:1 slots. is there no way to tell the script that "hey bar/foo is a combo ID"?

and thanks gleeok, but ive never been good at starting small.it seems easier for me to learn more complex things and ask lots of questions, instead of learning a little and asking nothing.

Foo and Bar are words used in C to signify dummy variables, so that's why I used them for the purpose of showing you how to do things.
When you actually script, it's usual to use words that actually signifiy what you're using the variables for.

And you don't tell the script that a variable is a combo ID, a variable is just a value and nothing else
How you tell it that you're using it to be a combo ID is like this:

this->Data = comboID;

'this' references the ffc you have the script attached to, '->' is a pointer, which is saying that you want to reference this ffc's data, and then you set that value with the assignment operator, '=', to the integer, 'comboID'.

Scary Binary's covered a lot of this stuff in the ZC wiki, go and have a read of that and see if it helps.

Master Maniac wrote:

but what about the combo variables? i want them to be stated by the foo and bar intergers, which i have set to the D:0 and D:1 slots. is there no way to tell the script that "hey bar/foo is a combo ID"?

But you already declared them!

void run( int foo,int bar){

foo is whatever you set D0 to, and the same with bar. If you want, say, combo ID 6700, then set D0 to 6700.

You can then access that by:

ffc eye1 = Screen->LoadFFC(1);
eye1->Data = foo;

That will set ffc 1 graphics to use combo 6700, or whatever you input for D[0].

Becha to it ^_^

Also I just noticed, in your title

bool reality = false;

Is unnecessay, because if you declare a boolean it's set to false by default.
Hehehe

but thats not what i want to happen. i want to say that setting the variables for foo and bar (which are covered in D: slots) would set the combo ID. meaning, defining the value for foo, defines the value for comboID.

and then later i would refrence the variables not foo, but combo in order to acknowledge that something has to happen to do with this combo. I dont want the ffc to recognize them just yet.

but anyway, i dont think there is an actual combo ID variable (or if so it doesent seem to be on the list) so im thinking something like this

[edit] int ComboD[]
The combo ID of the ith combo on the screen, where i is the index used to access this array. Combos are counted left to right, top to bottom.

but that would be a pain in the butt to do, since you would have to count up the combos on the screen to figure this out. and also im not sure if it counts toward all combos of the same ID or just that one that you select.

and also i have some slightly more complex questions. then you aet a coordinate for an ffc, are you setting the coordinate for the top left pixel of the combo? or does it recognize it as a whole?

and also, as i dont see this on the list either, how would i say "when the ffc comes within (# of pixels) of this combo"?

and also with the combo thing, im not making it the graphics for the enemy itself. those will be the combos it "bounces" off of.

sorry double post, computer is acting up.

If you have something that references combos by counting along, what you do is this:

Screen->ComboD[ComboAt(x,y)] = whatever;

ComboAt(x,y) converts a single reference to coordinates.

Ok, so get started then. 😉

Here's the basic archtype you can use:

ffc script makeit{

void run (){ // D[] vars go here

//===================================
// DECLARED STUFF GOES HERE
//===================================

while(true){

Waitframe();

//===================================
// SCRIPT STUFF GOES HERE
//===================================

} // end of true
}
} // end of script

ok i understand.

and im sorry for being so frustrating lol it takes me a little bit to fully grasp a concept.

so with the

if(Abs(x,y)<z){

i have to state the X and Y coordinates first, and what is using these coordinates. so to start.

if(Abs(eye1->Y)<18)

im only stating the Y coordinates because basically what i mean is "when the Y coordinate comes within 18 pixels of". so i could, theoretically remove X from this altogether.

the part about this that confuses me here is this. i have to have a dummy variable(foo) that identifies a number when set in the D: settings. this number is later identified as a combo ID later in the script. this should refrence that combo ID set by foo. however im not quite sure how to set it up.i dont want it to make the graphics become the combo or anything like that, i just need it to recognize that foo sets the combo ID for another variable. so would

combo1 = ComboD[int. foo];

work? and then i plug it in here :

if(Abs(eye1->Y)<18(combo1->Y))

which as i see it says "when eye1's Y coordinates come within 18 pixels of combo1's Y coordinates"

but this all depends on if i set up the combo1 = ComboD[int. foo]; stuff is set up correctly. and as i see it, that should work, saying that the ID of the combo is described by the number (foo) which is defined via D: slot.

my main question: is this right? lol

if(Abs(x,y)<z){

This is infact wrong, so don't get confused with that �_�

What Gleeok meant is this:

if(Abs(x - y) < z){

With a minus sign, not a comma.
Makes all the difference.

if(Abs(eye1->Y)<18)

This will function, but what it says is:
'If the absolute parameter of eye1's Y coordinate is less than 18, run this scope'.
So basically, that part is the same as:

if(eye1->Y < 18)

Which isn't what you want.

You're trying to work out whether the distance between two points is less than 18, but you're only put one point into the mix.
Which obviously isn't going to work.

What you mean is:

if(Abs(eye1->Y - combo1Y) < 18)

That should work better.

combo1 = ComboD[int. foo];

What is this?
Declare all your variables after the void run command, and don't declare them with a full stop after 'int'.

Right, on a side(ish) note, you need to understand independance of vertical and horizontal motion.
It's simple really, if you're referencing coordinates or speeds, X and Y components are always treated seperately.

What you want is to firstly just find the (x,y) coordinate that you want your ffc to bounce of in ZQuest, then this:
[code]if(Abs(eye1->Y - y) < 18) && Abs(eye1->X - x < 18)){//proceed}

you might be proud of me then XD i recognized this because the bouncing depends on the difference and independance of the X and Y motion. if both Vx and Vy are set to 2 then it moves diagonally to the lower right at 2 pixels per frame. or it appears to. in reality it moves down 2 pixels and right 2 pixels.

right so knowing that i dont have to re-state the int. part, this is what my script looks like thus far.

import "std.zh"

ffc script eyesore{

void run( int foo,int bar,int barieo){//ok declares D: setting variables

combo1 = comboD(foo);//made sure to remove the int's

combo2 = comboD(bar);

int x; int y;

int speed = 2;

npc ghosted_hp_enemy1 = screem->createNPC(barieo);

ffc eye1 = Screen->LoadFFC(1);

while (true){

eye1-> Vx = speed;//sets the velocity up as diagonal movement

eye1-> Vy = speed;

eye1-> X = // need to find the X coordinate for "the center of the screen"

eye1-> Y = 19;

ghosted_hp_enemy1->X = eye1-> X;//attaches my enemy

ghosted_hp_enemy1->Y = eye1-> Y;

ghosted_hp_enemy1->HP = 20

if(Abs(eye1->Y)<18(combo1->Y)){//this does the "bounce" effect

eye1-> Vy*-1;

}

if(Abs(eye1->X)<18(combo1->X)){

eye1-> Vx*-1:

}

if(Abs(eye1->Y)<18(combo2->Y)){

eye1-> Vy*-1;

}

if(Abs(eye1->X)<18(Combo2->X)){

eye1-> Vx*-1;

}

if(Abs(ghosted_hp_enemy1->HP)==0){

eye1-> X = -100;

eye1-> Y = -100;

ok, now.i fixed some of my wrong spots. sorry for the double post. im hating my computer right now and it seems to return the favor.

import "std.zh"

ffc script eyesore{

void run( int foo,int bar,int barieo){

combo1 = ComboD[foo];

combo2 = ComboD[bar];

int x; int y;

int speed = 2;

npc ghosted_hp_enemy1 = screem->createNPC(barieo);

ffc eye1 = Screen->LoadFFC(1);

while (true){

eye1-> Vx = speed;

eye1-> Vy = speed;

eye1-> X = // need to find the X coordinate for "the center of the screen"

eye1-> Y = 19;

ghosted_hp_enemy1->X = eye1-> X;

ghosted_hp_enemy1->Y = eye1-> Y;

ghosted_hp_enemy1->HP = 20

if(Abs(eye1->Y - combo1->Y)<18){

eye1-> Vy*-1;

}

if(Abs(eye1->X - combo1->X)<18){

eye1-> Vx*-1:

}

if(Abs(eye1->Y - combo2->Y)<18){

eye1-> Vy*-1;

}

if(Abs(eye1->X - combo2->X)<18){

eye1-> Vx*-1;

}

if(Abs(ghosted_hp_enemy1->HP)==0){

eye1->Data = 0

}

Waitframe()

}

this would be my script. now i just have ot repeat it 3 more times and link it tp a 5th ffc to make it my custom boss XD

Question: Do want the eyeballs to bounce off of any/all solid combos/walls? Because I already have that code...unless you want to make it yourself.

and..

eye1-> Vx = speed; //right

eye1-> Vy = speed; //down

	//eye1-> X = ..

//eye1-> Y = 19;


the last ones will overwrite the first ones. You cant have velocity if the ffc is fixed at a point every frame.

ahh yes i would love to make them bounce from solid combos if you dont mind XD

and also, i guess i took an extra step there. i was trying to create a "spawn point" per se. it will just have to be something edited in the ffc traits itself.

and gleeok, when this is completely finished, it should be your kind of enemy. im making it tackle link AND shoot fireballs [eventually] to cause mass destruction lol.

Alright well here's an old version. (works fine) 😉 I added it to yours for you. Now "eye1 will perpetually bounce off walls.

import "std.zh"

ffc script eyesore{

void run( int foo,int bar,int barieo){

combo1 = ComboD[foo];

combo2 = ComboD[bar];

int x; int y;

int speed = 2;

npc ghosted_hp_enemy1 = screem->createNPC(barieo);

ffc eye1 = Screen->LoadFFC(1);

while (true){

Waitframe();

eye1-> Vx = speed;

eye1-> Vy = speed;

ghosted_hp_enemy1->X = eye1-> X;

ghosted_hp_enemy1->Y = eye1-> Y;

ghosted_hp_enemy1->HP = 20

if(Abs(eye1->Y - combo1->Y)<18){

eye1-> Vy*-1;

}

if(Abs(eye1->X - combo1->X)<18){

eye1-> Vx*-1:

}

if(Abs(eye1->Y - combo2->Y)<18){

eye1-> Vy*-1;

}

if(Abs(eye1->X - combo2->X)<18){

eye1-> Vx*-1;

}

if(Abs(ghosted_hp_enemy1->HP)==0){

eye1->Data = 0

}
//-----------------------eye1 bounce code-----------

if ( (eye1->Vx > 0) && (!canMove(eye1->X+17,eye1->Y))){
eye1->Vx = -eye1->Vx; }
else{
if ( (eye1->Vx < 0) && (!canMove(eye1->X-1,eye1->Y))){
eye1->Vx = -eye1->Vx; }
else{
if ( (eye1->Vy > 0) && (!canMove(eye1->X,eye1->Y+17))){
eye1->Vy = -eye1->Vy; }
else{
if ( (eye1->Vy < 0) && (!canMove(eye1->X,eye1->Y-1))){
eye1->Vy = -eye1->Vy; }
}
}
}

if(eye1->X > 232) { eye1->Vx = -1; eye1->X--;}
if(eye1->X < 8) { eye1->Vx = 1; eye1->X++;}
if(eye1->Y > 152) { eye1->Vy = -1; eye1->Y--;}
if(eye1->Y < 8) { eye1->Vy = 1; eye1->Y++;}

}
}
bool canMove(int x, int y){

// x=23, y=130
// Obviously in range...
if(x<0 || x>255 || y<0 || y>175)
return false;
int mask=1111b;

// x % 16 = 7, so
// mask = 1111 & 0011 = 0011
if(x%16<8)
mask&=0011b;
else
mask&=1100b;

// y % 16 = 2, so
// mask = 0011 & 0101 = 0001
if(y%16<8)
mask&=0101b;
else
mask&=1010b;

// All but the top-right quarter of the combo is solid, so ComboS = 1011
// mask & ComboS = 0001 & 1011 = 0001
// The result wasn't 0, so return false
return ((Screen->ComboS[ComboAt(x, y)]&mask)==0);
}// end of canMove

} //

oh... wow... ok that was scary... lots of big numbers...

but so basically it bounces off of un-walkable combos now?

oh shit... you can hate me now...

the whole reason i didnt try this before, therefore the reason i wanted to set combos is because where i would use it, it would be staying over un-walkable combos. actually that was matthew's script with the lava swimmer thing. but my point being, this wouldnt work for me if its above those lava combos because they are all un-walkable.

I will however keep this together with the script, so that i when i post it in the showcase, other people could use it and have it bounce off walls and all unwalkable combos. maybe ill use it twice so your efforts werent completely in vain.

actually, ill probably turn this into 2 seperate scripts. (i know what im doing)

oh and speaking of, everyone who has helped me is gonna get the credit for it in my quest that im putting this in, since it wouldnt be possible without all your help.

Oh for pete's sake.

Just rewrite the script so that it bounces when it's adjacent to a particular flag (use one of the script flags). Then you can draw your own boundaries on the screen.

hey joe... i have a request now. im going to test this one soon, being my first one and all, and i havent really worked on it much, but i think its done with the basic movement for now. and im pretty sure ive set it up right too, lol wouldnt you be proud XD youre a good teacher lol. so here it is.

import "std.zh"

ffc script eyesore{

void run( int foo,int bar,int barieo){

combo1 = ComboD[foo];

combo2 = ComboD[bar];

int x; int y;

int speed = 2;

npc ghosted_hp_enemy1 = Screen->CreateNPC(barieo);

npc ghosted_hp_enemy2 = Screen->CreateNPC(barieo);

npc ghosted_hp_enemy3 = Screen->CreateNPC(barieo);

npc ghosted_hp_enemy4 = Screen->CreateNPC(barieo);

ffc eye1 = Screen->LoadFFC(1);

while (true){

eye1-> Vx = speed;

eye1-> Vy = speed;

ghosted_hp_enemy1->X = eye1-> X;

ghosted_hp_enemy1->Y = eye1-> Y;

ghosted_hp_enemy1->HP = 20

if(Abs(eye1->Y - combo1->Y)<18){

eye1-> Vy*-1;

}

if(Abs(eye1->X - combo1->X)<18){

eye1-> Vx*-1:

}

if(Abs(eye1->Y - combo2->Y)<18){

eye1-> Vy*-1;

}

if(Abs(eye1->X - combo2->X)<18){

eye1-> Vx*-1;

}

if(Abs(ghosted_hp_enemy1->HP)==0){

eye1->Data = 0

}

Waitframe()

}


ffc eye2 = Screen->LoadFFC(2);

while (true){

eye2-> Vx = speed;

eye2-> Vy = speed;

ghosted_hp_enemy2->X = eye2-> X;

ghosted_hp_enemy2->Y = eye2-> Y;

ghosted_hp_enemy2->HP = 20

if(Abs(eye2->Y - combo1->Y)<18){

eye2-> Vy*-1;

}

if(Abs(eye2->X - combo1->X)<18){

eye2-> Vx*-1:

}

if(Abs(eye2->Y - combo2->Y)<18){

eye2-> Vy*-1;

}

if(Abs(eye2->X - combo2->X)<18){

eye2-> Vx*-1;

}

if(Abs(ghosted_hp_enemy2->HP)==0){

eye2->Data = 0

}

Waitframe()

}

ffc eye3 = Screen->LoadFFC(3);

while (true){

eye3-> Vx = speed;

eye3-> Vy = speed;

ghosted_hp_enemy3->X = eye3-> X;

ghosted_hp_enemy3->Y = eye3-> Y;

ghosted_hp_enemy3->HP = 20

if(Abs(eye3->Y - combo1->Y)<18){

eye3-> Vy*-1;

}

if(Abs(eye3->X - combo1->X)<18){

eye3-> Vx*-1:

}

if(Abs(eye3->Y - combo2->Y)<18){

eye3-> Vy*-1;

}

if(Abs(eye3->X - combo2->X)<18){

eye3-> Vx*-1;

}

if(Abs(ghosted_hp_enemy3->HP)==0){

eye3->Data = 0

}

Waitframe()

}

ffc eye4 = Screen->LoadFFC(4);

eye4-> Vx = speed;

eye4-> Vy = speed;

ghosted_hp_enemy4->X = eye4-> X;

ghosted_hp_enemy4->Y = eye4-> Y;

ghosted_hp_enemy4->HP = 20

if(Abs(eye4->Y - combo1->Y)<18){

eye4-> Vy*-1;

}

if(Abs(eye4->X - combo1->X)<18){

eye4-> Vx*-1:

}

if(Abs(eye4->Y - combo2->Y)<18){

eye4-> Vy*-1;

}

if(Abs(eye4->X - combo2->X)<18){

eye4-> Vx*-1;

}

if(Abs(ghosted_hp_enemy4->HP)==0){

eye4->Data = 0

}

Waitframe()

}

ffc center = Screen->LoadFFC(5);

while (true){

if(eye1->Data = 0 && eye2->Data = 0 && eye3->Data = 0 && eye4->Data = 0){

center->Data = 0}

Waitframe()

}

}

could you make a patch for the "attacking" part like we talked about in the beginning of this thread? please? if you dont want to its fine. ill find a way lol.

and also, this is set up right isnt it?