It looks like the body of the run function has been deleted. It looked something like:
CODE
void run() {
while (true) {
if(magna_gloves_active) MagnaGlovesWork();
Waitframe();
}
}
ie, your working script should look like this:
CODE
import "std.zh"
bool magna_gloves_active = false;
bool magna_gloves_positive = false;
const int magna_flag = 98;
const int magna_positive = 144;
global script onstart {
void run() {
while (true) {
if (magna_gloves_active) MagnaGlovesWork();
Waitframe();
}
}
bool isSolid(int x, int y) {
if(x<0 || x>255 || y<0 || y>175) return false;
int mask=1111b;
if(x % 16 < 8)
mask &= 0011b;
else
mask &= 1100b;
if(y % 16 < 8)
mask &= 0101b;
else
mask &= 1010b;
int ret = Screen->ComboS[ComboAt(x, y)] & mask;
return (ret!=0);
}
void MagnaGlovesWork() {
if(Link->InputB) {
//Link->Action = LA_FROZEN;
int lc = 0;
bool yes = false;
if(Link->Dir == DIR_LEFT) {
for(int i = Floor(Link->X / 16) - 1; i >= 0; i--) {
lc = ComboAt(i * 16, Link->Y + 8);
if(Screen->ComboF[lc] == magna_flag || Screen->ComboI[lc] == magna_flag) {
yes = true;
break;
}
}
if(yes) {
Link->Z = 5;
Link->Jump = 0;
Link->Y = Floor((Link->Y + 8) / 16) * 16;
KillLinkInput();
if(magna_gloves_positive) {
if(!isSolid(Link->X + 16, Link->Y)) {
Link->X += 1;
}
if(!isSolid(Link->X + 16, Link->Y)) {
Link->X += 1;
}
} else {
if(!isSolid(Link->X - 1, Link->Y)) {
Link->X -= 1;
}
if(!isSolid(Link->X - 1, Link->Y)) {
Link->X -= 1;
}
}
}
} else if(Link->Dir == DIR_RIGHT) {
for(int i = Floor(Link->X / 16) + 1; i <= 16; i++) {
lc = ComboAt(i * 16, Link->Y + 8);
if(Screen->ComboF[lc] == magna_flag || Screen->ComboI[lc] == magna_flag) {
yes = true;
break;
}
}
if(yes) {
Link->Z = 5;
Link->Jump = 0;
Link->Y = Floor((Link->Y + 8) / 16) * 16;
KillLinkInput();
if(magna_gloves_positive) {
if(!isSolid(Link->X - 1, Link->Y)) {
Link->X -= 1;
}
if(!isSolid(Link->X - 1, Link->Y)) {
Link->X -= 1;
}
} else {
if(!isSolid(Link->X + 16, Link->Y)) {
Link->X += 1;
}
if(!isSolid(Link->X + 16, Link->Y)) {
Link->X += 1;
}
}
}
} else if(Link->Dir == DIR_UP) {
for(int i = Floor((Link->Y + 9) / 16) - 1; i >= 0; i--) {
lc = ComboAt(Link->X + 8, i * 16);
if(Screen->ComboF[lc] == magna_flag || Screen->ComboI[lc] == magna_flag) {
yes = true;
break;
}
}
if(yes) {
Link->Z = 5;
Link->Jump = 0;
Link->X = Floor((Link->X + 8) / 16) * 16;
KillLinkInput();
if(!magna_gloves_positive) {
if(!isSolid(Link->X, Link->Y - 1)) {
Link->Y -= 1;
}
if(!isSolid(Link->X, Link->Y - 1)) {
Link->Y -= 1;
}
} else {
if(!isSolid(Link->X, Link->Y + 16)) {
Link->Y += 1;
}
if(!isSolid(Link->X, Link->Y + 16)) {
Link->Y += 1;
}
}
}
} else if(Link->Dir == DIR_DOWN) {
for(int i = Floor(Link->Y / 16) + 1; i <= 16; i++) {
lc = ComboAt(Link->X + 8, i * 16);
if(Screen->ComboF[lc] == magna_flag || Screen->ComboI[lc] == magna_flag) {
yes = true;
break;
}
}
if(yes) {
Link->Z = 5;
Link->Jump = 0;
Link->X = Floor((Link->X + 8) / 16) * 16;
KillLinkInput();
if(!magna_gloves_positive) {
if(!isSolid(Link->X, Link->Y + 16)) {
Link->Y += 1;
}
if(!isSolid(Link->X, Link->Y + 16)) {
Link->Y += 1;
}
} else {
if(!isSolid(Link->X, Link->Y - 1)) {
Link->Y -= 1;
}
if(!isSolid(Link->X, Link->Y - 1)) {
Link->Y -= 1;
}
}
}
}
if(!yes) {
int d = Link->Dir;
//well, we're not attached to anything.
//so, let's move around
if(Link->InputUp) {
Link->InputUp = false;
if(!isSolid(Link->X, Link->Y - 1)) Link->Y -= 1;
}
if(Link->InputDown) {
Link->InputDown = false;
if(!isSolid(Link->X, Link->Y + 16)) Link->Y += 1;
}
if(Link->InputLeft) {
Link->InputLeft = false;
if(!isSolid(Link->X - 1, Link->Y)) Link->X -= 1;
}
if(Link->InputRight) {
Link->InputRight = false;
if(!isSolid(Link->X + 16, Link->Y)) Link->X += 1;
}
//Link->Dir = d;
}
} else {
magna_gloves_active = false;
magna_gloves_positive = !magna_gloves_positive;
//Link->Action = LA_NONE;
Link->Item[magna_positive] = !Link->Item[magna_positive];
}
}
void KillLinkInput() {
Link->InputUp = false;
Link->InputDown = false;
Link->InputLeft = false;
Link->InputRight = false;
}
}
Edit: Source->formatted for sanity.
Another edit because something seems to keep happening to my changes.
Edited by MarioBrosCom, 11 January 2011 - 06:50 PM.