Decent NAT needed

If you can nat really well (make a custom baddy from scratch,etc…) and you would like to work on xialza I would be grateful, please note, if your some random from graalonline or an oldbie I probably wont know you and therefore wont trust you straight off and you therefore get a folder to submit your scripts.

Interested? Please reply to this thread if so

What Xialza actually needs is some direction. You get tossed into a world with no previous storyline, and aren’t told where to go next. When you’re trying to make an rpg game, you have to lead a player by the nose and entertain them, otherwise, it becomes dull.

Im kind of doing that now, Im trying to make the quests lead on from each other, I didnt previously plan to have a story but who knows, It might just turn out that way, One main story line and it branches off into smaller jobs while you can still free roam, revisit areas and all that. I was quite cut that I gotta lazy 4/10 though. It hurt :frowning: and im begining to suspect that no magical nat is gunna wanna help out on xialza

told u u needed a storyline even just a small one :stuck_out_tongue:

oh look, graal provides you with one . if one really can script altering that code to what you want should be simple .

// Graal2002 NPC by Stefan Knorr
if (created) {
  // Initialize the attributes
  showcharacter;
  setcharprop #3,head0.png;
  setcharprop #C0,orange;
  setcharprop #C1,darkred;
  setcharprop #C2,black;
  setcharprop #C3,darkred;
  setcharprop #C4,black;
  setcharprop #n,Default Baddy;
  setcharprop #2,shield1.gif;
  shieldpower = 1;
  dir = 2;
  swordpower = 1;
  hurtdx = 0;
  hurtdy = 0;
  hearts = 3;
}
if (playerenters || wasthrown) {
  // Initialize the this. variables
  message;
  this.huntspeed = 0.4;
  timeout = 0.05;
  this.walkmode = 1;
  if (wasthrown && this.walkmode>1) this.walkmode = 1;
  this.x1 = 0;
  this.x2 = 63;
  this.y1 = 0;
  this.y2 = 63;
  this.speed = 0.3;
  if (hearts<=0) {
    this.mode = 5; // RESPAWN
    this.runcounter = 0;
    timeout = 5;
  } else {
    this.mode = 0;
    setcharani idle,;
    this.runcounter = int(random(10,40));
  }
}

// Walking stuff
if (timeout && this.mode==0) { // WALKING
  setcharani walk,;
  newx = x + vecx(dir)*this.speed;
  newy = y + vecy(dir)*this.speed;
  this.runcounter--;
  if (this.walkmode==1) { // RANDOM
    if (this.runcounter>0) {
      testx = newx + 1.5 + vecx(dir);
      testy = newy + 2 + vecy(dir);
      if (onwall(testx,testy)) {
        dir = (dir+2)%4;
        this.runcounter = int(random(0,60));
      } else {
        x = newx;
        y = newy;
      }
    } else {
      this.runcounter = int(random(10,40));
      dir = (dir+1+int(random(0,2))*2)%4;
    }
  } else if (this.walkmode==2) { // LEFTRIGHT
    if (dir!=1 && dir!=3) dir = 3;
    else {
      x = newx;
      y = newy;
      if ((dir==1 && x<=this.x1) || (dir==3 && x>=this.x2))
        dir = (dir+2)%4;
    }
  } else if (this.walkmode==3) { // UPDOWN
    if (dir!=0 && dir!=2) dir = 2;
    else {
      x = newx;
      y = newy;
      if ((dir==0 && y<=this.y1) || (dir==2 && y>=this.y2))
        dir = (dir+2)%4;
    }
  } else if (this.walkmode==4) { // RECTANGLE
    x = newx;
    y = newy;
    if ((dir==0 && y<=this.y1) || (dir==1 && x<=this.x1) ||
        (dir==2 && y>=this.y2) || (dir==3 && x>=this.x2))
      dir = (dir+3)%4;
  }
  if (this.walkmode>1 && this.runcounter<=0)
    this.runcounter = 20;
  message;
  timeout = 0.05;
}

// Sword attacking stuff
if (timeout && (this.mode==0 || this.mode==2)) {
  // Look for players
  mindist = 1000;
  for (i=0; i<playerscount; i++)
      if (players[i].hearts>0 && players[i].id>=0) {
    dx = players[i].x - x;
    dy = players[i].y - y;
    if (abs(dx)>abs(dy)) {
      if (dx>0) pdir=3; else pdir=1;
    } else {
      if (dy>0) pdir=2; else pdir=0;
    }
    if (pdir==dir) {
      dist = (dx*dx+dy*dy)^0.5;
      if (dist<mindist) {
        cansee = 1;
        if (abs(dx)>abs(dy)) k = int(abs(dx));
        else k = int(abs(dy));
        for (j=0; j<=k-2; j++)
          if (onwall(x+1.5+dx*j/k,y+2+dy*j/k)) cansee = 0;
        if (cansee!=0) {
          mindist = dist;
          aimplayer = i;
          this.aimx = players[i].x;
          this.aimy = players[i].y;
        }
      }
    }
  }
  if (mindist<=3) {
    this.runcounter = -1;
    this.mode = 3; // SLAYING
    setcharani sword,;
    timeout = 0.05;
  } else if (mindist<20) {
    if (this.mode!=2) message Stop!;
    this.runcounter = 100;
    this.mode = 2; // HUNTING
  } else timeout = 0.05;
}
if (timeout && this.mode==3) { // SLAYING
  this.runcounter++;
  if (this.runcounter>4) {
    this.runcounter = 100;
    this.mode = 2; // HUNTING
    setcharani idle,;
  }
  message;
  timeout = 0.05;
}
if (timeout && this.mode==2) { // HUNTING
  setcharani walk,;
  this.runcounter--;
  if (this.runcounter>0 && aimplayer<playerscount && players[aimplayer].hearts>0) {
    // Get new direction
    dx = players[aimplayer].x-x;
    dy = players[aimplayer].y-y;
    if (abs(dx)>abs(dy)) {
      if (dx>0) dir=3; else dir=1;
    } else {
      if (dy>0) dir=2; else dir=0;
    }

    // Test if we can do a step
    dx = this.aimx-x;
    dy = this.aimy-y;
    if (abs(dx)<=1 && abs(dy)<=1) {
      this.aimx = players[aimplayer].x;;
      this.aimy = players[aimplayer].y;
      dx = this.aimx-x;
      dy = this.aimy-y;
    }
    if (abs(dx)>abs(dy)) {
      if (dx>0) testdir=3; else testdir=1;
    } else {
      if (dy>0) testdir=2; else testdir=0;
    }
    len = (dx*dx+dy*dy)^0.5;
    addx = (dx/len)*this.huntspeed;
    addy = (dy/len)*this.huntspeed;
    testx = x + 1.5;
    testy = y + 2;
    if (!onwall(testx+addx,testy+addy)) {
      // Do a step
      x += addx;
      y += addy;
   } else if (!onwall(testx+addx,testy)) x += addx;
   else if (!onwall(testx,testy+addy)) y += addy;
  } else {
    this.mode = 0; // WALKING
    this.walkmode = 1; // RANDOM
    this.runcounter = int(random(10,40));
    setcharani idle,;
    dir = (dir+2)%4;
    message;
  }
  timeout = 0.05;
}

// Hurting stuff
if (washit && this.mode!=1 && hearts>0) {
  dx = x-playerx;
  dy = y-playery;
  len = (dx*dx+dy*dy)^0.5;
  hurtdx = dx/len;
  hurtdy = dy/len;
  setcharani hurt,;
  hideimg 1;
  hearts -= playerswordpower/2;
}
if ((exploded || waspelt || wasshot) &&
    this.mode!=1 && hearts>0 && isleader) {
  hurtdx = -vecx(dir)*0.2;
  hurtdy = -vecy(dir)*0.2;
  setcharani hurt,;
  if (peltwithsign || peltwithvase || peltwithstone || peltwithnpc) hearts -= 1;
  else if (peltwithblackstone) hearts -= 1.5;
  else hearts -= 0.5;
}
if ((hurtdx!=0 || hurtdy!=0) && isleader && this.mode!=4) {
  this.hurtdx = hurtdx;
  this.hurtdy = hurtdy;
  hurtdx = 0;
  hurtdy = 0;
  if (hearts<=0) {
    this.mode = 4; // DYING
    message;
    setcharani dead,;
    timeout = 1.2;
  } else {
    this.mode = 1; // HURTED
    this.runcounter = 20;
    setcharani hurt,;
    timeout = 0.05;
  }
}
if (timeout && this.mode==1) { // HURTED
  this.runcounter--;
  if (this.runcounter>10) {
    testx = x + 1.5 + this.hurtdx*2;
    testy = y + 2 + this.hurtdy*2;
    if (!onwall(testx,testy)) {
      x += this.hurtdx;
      y += this.hurtdy;
    }
  }
  if (this.runcounter<=0) {
    if (swordpower>0) this.mode = 2; // HUNTING
    else this.mode = 0; // WALKING
    this.runcounter = 100;
    setcharani idle,;
  }
  timeout = 0.05;
}
if (timeout && this.mode==5) { // RESPAWN
  this.mode = 0;
  this.runcounter = int(random(10,40));
  timeout  = 0.05;
  hearts = 3;
  setcharani idle,;
  this.walkmode = 1;
}
if (timeout && this.mode==4) { // DYING
  i = random(0,100);
  if (i<10) lay greenrupee;
  else if (i<15) lay bluerupee;
  else if (i<30) lay heart;
  this.mode = 5; // RESPAWN
  timeout = 5;
}

:munch:

Nigga use a damn code tag next time! Also, that baddy script is a piece of shit.

:unixmad: