void main() {
setOffscreenProcessing(false);
int check=indexOf(getGlobal("spriteIDs"), appendDigits(getID()+"", 4)+char(92), 0);
int ID=check/5; ID++;
int ZOffset=mapIntValue(getGlobal("data-ZOffset"), ID);
if (getGlobal("hero")==getID()) ZOffset=getGlobal("sprite-ZOffset");
int mouseWorldX=getMouseWorldX();
int mouseWorldY=getMouseWorldY();
int mouseWorldZ=getMouseWorldZ();
if (mouseWorldX>getX()-32 && mouseWorldX<getX()+32 && mouseWorldY>getY()-32 && mouseWorldY<getY()+32 && mouseWorldZ<ZOffset+32+32 && mouseWorldZ>ZOffset-32-32) {
drawText("Highlighting: "+getID(),"Lucida Console",12,10,10,255,0,0,255);
}
//if (getGlobal("scriptExecute")=="true") {
int myID=getID();
boolean imageFound=false;
int Z=getZ();
int X=getX();
int Y=getY();
int XRot=getXRotation();
int YRot=getYRotation();
int Height=32;
int Width=32;
int Frame=0;
int Image=1;
int spriteAmount=1;
boolean repeatTexture=false;
boolean create=false;
if (getGlobal(myID+" top")=="") create=true;
if (getImage()==12 && getFrame()==0) {
float angle=360;
angle=angle-getYRotation();
X=intValue((cos(angle)*3.0)*11)+X;
Y=intValue(((-1)*sin(angle)*3.0)*11)+Y;
int diffX=getX()-X;
int diffY=getY()-Y;
int diff=32;
while (abs(diffX)>diff || abs(diffY)>diff) {
if (abs(diffX)>diff) {
if (X>0) X--;
if (X<0) X++;
}
if (abs(diffY)>diff) {
if (Y>0) Y--;
if (Y<0) Y++;
}
int diffX=getX()-X;
int diffY=getY()-Y;
//debug("X:"+diffX+",Y:"+diffY);
}
imageFound=true;
spriteAmount++;
//second image
Image=12;
Frame=1; int frame1=2; int frame2=3;
generateSprite("-3", Image, Frame, X, Y, Z, Height, Width/2, ZOffset, true, XRot, YRot);
generateSprite("-1", Image, frame1,getX(), getY()+8, getZ(), Height/2, Width, ZOffset-32+(Height/4), true, XRot, YRot);
generateSprite("-2", Image, frame2,X, Y+8, Z, Height/2, Width/2, ZOffset-32+(Height/4), true, XRot, YRot);
}
if (getImage()==12 && getFrame()==4) { //Big Door
processFourPiece(12, 5, 6, 7);
imageFound=true;
spriteAmount++;
}
if (getImage()==13 && getFrame()==0) { //Big Door
processFourPiece(13, 1, 2, 3);
imageFound=true;
spriteAmount++;
}
if (getImage()==13 && getFrame()==4) { //Big Door
processFourPiece(13, 5, 6, 7);
imageFound=true;
spriteAmount++;
}
if (getImage()==6 && getFrame()==0) { //Skull thing
processFourPiece(6, 1, 2, 3);
imageFound=true;
spriteAmount++;
}
if (getImage()==5) { //blood fall
if (getGlobal("bloodFallTime")!="true") {
createTimeStamp("bloodFall");
setGlobal("bloodFallTime", "true");
}
int time=0;
if (getGlobal("bloodFallTime")=="true") time=checkTimeStamp("bloodFall");
if (time>100) {
int f=getFrame();
if (f==0) setFrame(2);
if (f==2) setFrame(4);
if (f==4) setFrame(6);
if (f==6) setFrame(0);
deleteTimeStamp("bloodFall");
createTimeStamp("bloodFall");
}
if (getFrame()==0) Frame=1;
if (getFrame()==2) Frame=3;
if (getFrame()==4) Frame=5;
if (getFrame()==6) Frame=7;
ZOffset-=32;
Image=5;
repeatTexture=true;
XRot=90;
setXRotation(90);
imageFound=true; spriteAmount++;
generateSprite("-1", 5, Frame, X, Y, Z, Height, Width, ZOffset, repeatTexture, XRot, YRot);
}
if (getImage()==4) { //body on the wall
if (getFrame()==0 || getFrame()==4) {
Image=4;
int frames[]={0};
if (getFrame()==0) { Frame=1; frames[0]=2; frames[1]=3; }
if (getFrame()==4) { Frame=5; frames[0]=6; frames[1]=7; }
processFourPiece(4, Frame, frames[0], frames[1]);
imageFound=true;
spriteAmount++;
}
}
if (getImage()==1 && getFrame()==4) { //Exit Door
Y+=14;
ZOffset-=18;
Image=1;
Frame=5;
Height=4;
imageFound=true;
repeatTexture=true;
Width=getWidth();
}
if (getImage()==1 && getFrame()==2) { //some thing..
Y+=14;
ZOffset-=18;
Image=1;
Frame=3;
Height=4;
imageFound=true;
repeatTexture=true;
Width=getWidth();
}
if (getImage()==1 && getFrame()==0) { //Entry Door
Image=1;
Frame=1;
Y+=14;
Height=4;
ZOffset-=18;
repeatTexture=true;
//debug("creating bottom of door");
imageFound=true;
Width=getWidth();
}
if (getImage()==2 && getFrame()==2) { //Wall-First Section
int relation=getHeight()-11;
float ratio=32/getHeight();
relation=relation*ratio;
Image=2;
Frame=0;
if (getHeight()==24) relation+=4;
Y+=relation;
ZOffset+=relation;
repeatTexture=true;
Height=-10;
Width=getWidth();
//if (getHeight()!=32) ZOffset=ZOffset-(32-getHeight());
imageFound=true;
}
if (imageFound && spriteAmount==1) {
if (create==true) {
debug("generating image");
int top=createSprite(Image,5,X,Y,Z);
setFrame(top, Frame);
setHeight(top, Height);
setWidth(top, Width);
setZOffset(top, ZOffset);
setRepeatTexture(top, repeatTexture);
setXRotation(top, getXRotation());
setYRotation(top, getYRotation());
setGlobal(myID+" top", top);
}
else {
int top=getGlobal(getID()+" top");
setX(top, X);
setY(top, Y);
setZ(top, Z);
setHeight(top, Height);
setWidth(top, Width);
setZOffset(top, ZOffset);
setRepeatTexture(top, repeatTexture);
setXRotation(top, getXRotation());
setYRotation(top, getYRotation());
}
}
if (imageFound==false && getGlobal(getID()+" top")!="") {
destroySprite(getGlobal(getID()+" top"));
setGlobal(getID()+" top", "");
}
for(int b=0;b<=10;b++) {
string bb="-"+b;
if (b==0) bb=" top";
int bla=getGlobal(getID()+bb);
if ((imageFound==false || getImage(bla)!=getImage(getID())) && getGlobal(getID()+bb)!="") {
destroySprite(bla);
debug("killed:"+bb);
setGlobal(getID()+bb, "");
}
}
setGlobal("image:"+getID(), getImage());
//}
}
int mapIntValue(string str, int n) {
int len=strlen(str);
int count=intValue(getGlobal("data-spriteCount"));
int size=0;
string bla="";
int ret=0;
if (count>0) {
size=intValue(len/count);
n--;
bla=substr(str, n*size, (n*size)+size);
if (indexOf(bla, "-", 0)>0) bla=substr(bla, indexOf(bla, "-", 0), strlen(bla));
if (bla!="") ret=parseInt(bla);
}
return ret;
}
string appendDigits(string str, int n) {
string nn="0";
int len=strlen(str);
while(len<n) { str=nn+str; len++; }
return str;
}
void processFourPiece(int Image, int frame1, int frame2, int frame3) {
float angle=360;
angle=angle-getYRotation();
X=intValue((cos(angle)*3.0)*11)+X;
Y=intValue(((-1)*sin(angle)*3.0)*11)+Y;
int diffX=getX()-X;
int diffY=getY()-Y;
int diff=32;
while (abs(diffX)>diff || abs(diffY)>diff) {
if (abs(diffX)>diff) {
if (X>0) X--;
if (X<0) X++;
}
if (abs(diffY)>diff) {
if (Y>0) Y--;
if (Y<0) Y++;
}
int diffX=getX()-X;
int diffY=getY()-Y;
//debug("X:"+diffX+",Y:"+diffY);
}
//imageFound=true;
Frame=frame1;
//second image
generateSprite("-3", Image, frame1, X, Y, Z, Height, Width, ZOffset, true, XRot, YRot);
generateSprite("-1", Image, frame2[0],getX(), getY(), getZ(), Height, Width, ZOffset-32, true, XRot, YRot);
generateSprite("-2", Image, frame3[1],X, Y, Z, Height, Width, ZOffset-32, true, XRot, YRot);
}
void generateSprite(string name, int Image, int Frame, int X, int Y, int Z, int Height, int Width, int ZOffset, boolean repeatTexture, int XRot, int YRot) {
if (getGlobal(getID()+name)=="") {
debug("generating image");
int top=createSprite(Image,5,X,Y,Z);
setFrame(top, Frame);
setHeight(top, Height);
setWidth(top, Width);
setZOffset(top, ZOffset);
setRepeatTexture(top, repeatTexture);
setXRotation(top, XRot);
setYRotation(top, YRot);
setGlobal(myID+name, top);
}
else {
int top=getGlobal(getID()+name);
setX(top, X);
setY(top, Y);
setZ(top, Z);
setHeight(top, Height);
setWidth(top, Width);
setFrame(top, Frame);
setZOffset(top, ZOffset);
setRepeatTexture(top, repeatTexture);
setXRotation(top, getXRotation());
setYRotation(top, getYRotation());
}
}