Hacktendo:Advanced Sprite Movement

From Hack Wars Wiki

Jump to: navigation, search

This is code from a script controlling a sprite within the Final Fantasy remake that I had intended to make. It allows you to hold down a key and walk with the frames of the sprite changing while you are walking. It is outdated code and may not work exactly with the new scripting engine; however, I hope this code may be useful in figuring out how to deal with changing frames and movement of a sprite.

Code

setImage(0);
int x=getX();
int y=getY();
int z=getZ();
int frame=getFrame();
int movetime=10;
int moveamount=5;
int movebamount=-5;
 
int movex=0;
int movey=0;
int lefttime=0;
int righttime=0;
int uptime=0;
int downtime=0;
lefttime=checkTimeStamp("left");
righttime=checkTimeStamp("right");
downtime=checkTimeStamp("down");
uptime=checkTimeStamp("up");
 
if(getKeyDownCount()>0){
	int key=getNextKeyDown();
	if (key==37) { 
		if (x>0) setLocal("movex",movebamount);
		setFrame(1);
		setLocal("dir", "left");
		deleteTimeStamp("left");
		createTimeStamp("left");
 
	}
	if (key==39) { setLocal("movex", moveamount); setFrame(3); setLocal("dir", "right"); deleteTimeStamp("right"); createTimeStamp("right"); }
	if (key==40) { setLocal("movey",moveamount); setFrame(7); setLocal("dir", "down"); deleteTimeStamp("down"); createTimeStamp("down"); downtime=movetime; }
	if (key==38) {
		if (y>0) setLocal("movey",movebamount);
		setFrame(5);
		setLocal("dir", "up");
		deleteTimeStamp("up");
		createTimeStamp("up");
		uptime=movetime;
	}
}
movex=getLocal("movex");
movey=getLocal("movey");
string direction=getLocal("dir");
 
int bla=0;
 
if (movex!=0) { 
	bla=x+movex;
	if (bla>=0) {
		if (direction=="left") {
			if (lefttime>=movetime) {
				deleteTimeStamp("left");
				createTimeStamp("left"); 
				if (frame==1) { setFrame(0);  }
				if (frame==0) { setFrame(1); }
				setX(bla);
			}
		}
		if (direction=="right") {
			if (righttime>=movetime) {
				if (frame==3) { setFrame(2); }
				if (frame==2) { setFrame(3); }
				setX(bla);
				deleteTimeStamp("right");
				createTimeStamp("right");
			}
		}
	}
}
if (movey!=0) {
	bla=y+movey;
	if (bla>=0) { 
		if (direction=="down") {
			if (downtime>=movetime) {
				if (frame==7) { setFrame(6); }
				if (frame==6) { setFrame(7); }
				else setFrame(6);
				setY(bla);
				deleteTimeStamp("down");
				createTimeStamp("down");
			}
		}
		if (direction=="up") {
			if (uptime>=movetime) {			
				if (frame==5) { setFrame(4); }
				if (frame==4) { setFrame(5); }
				else setFrame(4);
				setY(bla);
				deleteTimeStamp("up");
				createTimeStamp("up");
			}
		}
	}
}
 
while(getKeyUpCount()>0) {
	int key=getNextKeyUp();
 
	if (key==37 || key==39) {
		setLocal("movex",0);
		if (direction=="left") setFrame(0);
		if (direction=="right") setFrame(2);
	}
	if (key==40 || key==38) {
		setLocal("movey",0);
		if (direction=="up") setFrame(4);
		if (direction=="down") setFrame(6);
	}
}
Personal tools