[resource] ACS - universal horizontal crusher script
Posted: Wed Mar 22, 2017 12:08 pm
Hi, I mashed up universal script, that controlls moving walls. Something exactly like in Hexen Map 01, when you smash the stained glass window.
Use is pretty simple.
The only thing to notice is that you have to follow a simple rule during design - use polyobject mirroring, because this script controls only one line of polyobjects - the opposing line is mirrored.
So, polyobject numbering:
For the N-S script, follow this rule:
5 - 6 - 7 - 8 - mirrored line
1 - 2 - 3 - 4 - script controlled line
The same is for the E-W script
1 5
2 6
3 7
4 8
So, how the integers work?
"beginPoly" is the number of the first polyobject in the lower/left line. Only the first polyobject is required.
"nrSegments" is the amount of polyobjects in the lower/left line. Since the upper/right line is mirrored, nothing else is needed, the math does the rest.
Use is pretty simple.
The only thing to notice is that you have to follow a simple rule during design - use polyobject mirroring, because this script controls only one line of polyobjects - the opposing line is mirrored.
So, polyobject numbering:
For the N-S script, follow this rule:
5 - 6 - 7 - 8 - mirrored line
1 - 2 - 3 - 4 - script controlled line
The same is for the E-W script
1 5
2 6
3 7
4 8
So, how the integers work?
"beginPoly" is the number of the first polyobject in the lower/left line. Only the first polyobject is required.
"nrSegments" is the amount of polyobjects in the lower/left line. Since the upper/right line is mirrored, nothing else is needed, the math does the rest.
Code: Select all
//universal horizontal crusher scripts
//==------------------------------------------------
bool crusherOpen[999];
script "CrusherN-S" (int beginPoly, int nrSegments)
{
while(true)
{
while(crusheropen[beginPoly] == false)
{
for (int i = 0; i < nrSegments; i++)
{
Polyobj_OR_Move(beginPoly+i, 16, 192, 64);
Polywait(beginPoly+i);
}
crusherOpen[beginPoly] = true;
Delay(1);//Mandatory
}
while(crusherOpen[beginPoly] == true)
{
for (int y = 0; y < nrSegments; y++)
{
Polyobj_OR_Move(beginPoly+y, 16, 64, 64);
Polywait(beginPoly+y);
}
crusherOpen[beginPoly] = false;
delay(1);
}
delay(1);
}
}
script "crusherE-W" (int beginPoly, int nrSegments)
{
while(true)
{
while(crusheropen[beginPoly] == false)
{
for (int i = 0; i < nrSegments; i++)
{
Polyobj_OR_Move(beginPoly+i, 16, 128, 64);
Polywait(beginPoly+i);
}
crusherOpen[beginPoly] = true;
Delay(1);//Mandatory
}
while(crusherOpen[beginPoly] == true)
{
for (int y = 0; y < nrSegments; y++)
{
Polyobj_OR_Move(beginPoly+y, 16, 0, 64);
Polywait(beginPoly+y);
}
crusherOpen[beginPoly] = false;
delay(1);
}
delay(1);
}
}
//==------------------------------------------------