Graal Forums  

Go Back   Graal Forums > Development Forums > NPC Scripting
FAQ Members List Calendar Today's Posts

 
 
Thread Tools Search this Thread Display Modes
Prev Previous Post   Next Post Next
  #2  
Old 06-26-2002, 07:22 AM
Torankusu Torankusu is offline
Elite Member
Torankusu's Avatar
Join Date: Jun 2001
Posts: 10,065
Torankusu is a jewel in the roughTorankusu is a jewel in the rough
Here's the script for the sand one.

NPC Code:

if (playerenters) {
this.lastpx = -1000;
}
if (playerenters || timeout) {
if (mousebuttons%2>=1) {
if (this.lastpx>-1000) {
dx = (mousex-this.lastpx);
dy = (mousey-this.lastpy);
dist = (abs(dx)>abs(dy)? abs(dx) : abs(dy));
for (di=0; di<dist; di++) {
px = this.lastpx + (dx*di/dist);
py = this.lastpy + (dy*di/dist);
laypath();
}
}
px = mousex;
py = mousey;
laypath();
this.lastpx = px;
this.lastpy = py;
} else
this.lastpx = -1000;
timeout = 0.05;
}
function laypath() {
sandtiles = {0xaa,0xab,0x12d,0x8,0xf};
grasstiles = {0x0,0x1,0x10,0x1ff,0x3ff,0x7ff,0x835,0x836,0x837}
;
sandspot = {
0x176,0x166,0x177,
0x1a7, 0xaa,0x197,
0x188,0x178,0x169
};
grassspot = {
0x168,0x178,0x189,
0x197,0x7ff,0x1a7,
0x187,0x166,0x186
};
sandcornernwse = 0xfe9;
sandcornernesw = 0xff9;
allcornertiles = {0x176,0x166,0x167,0x177,0x1a7,0xaa,0x197,0x188,0x
178,0x179,0x169,
0x168,0x189,0x187,0x186,0xfe9,0xff9};

// Check if can lay a sand path here
if (tiles[px,py] in sandtiles) return;
for (tx=px-1; tx<=px+1; tx++) for (ty=py-1; ty<=py+1; ty++) {
if (tiles[tx,ty] in sandtiles) continue;
checkgrassorborder();
if (isok==false) return;
}

// Put sand on the mouse position
tiles[px,py] = sandtiles[int(random(0,5))];

// Calculate the tiles around the mouse position
for (tx=px-1; tx<=px+1; tx++) for (ty=py-1; ty<=py+1; ty++) {
if ((tx==px && ty==py) || tiles[tx,ty] in sandtiles) continue;

// Check which tiles around this tile are sand tiles
sandn = (tiles[tx ,ty-1] in sandtiles);
sandnw = (tiles[tx-1,ty-1] in sandtiles);
sandw = (tiles[tx-1,ty ] in sandtiles);
sandsw = (tiles[tx-1,ty+1] in sandtiles);
sands = (tiles[tx ,ty+1] in sandtiles);
sandse = (tiles[tx+1,ty+1] in sandtiles);
sande = (tiles[tx+1,ty ] in sandtiles);
sandne = (tiles[tx+1,ty-1] in sandtiles);
if (sandnw+sandne==2) sandn = true;
if (sandnw+sandsw==2) sandw = true;
if (sandsw+sandse==2) sands = true;
if (sandse+sandne==2) sande = true;

// Get the right sand corner tile depending on
// in which directions sand was found
if (sandn+sands==2 || sandw+sande==2 ||
sandn+sandw+sandse==3 || sandw+sands+sandne==3 || sands+sande+sandnw==3 || sande+sandn+sandsw==3)
newtile = sandtiles[0];
else if (sandn+sandw+sands+sande==2) {
if (sandn+sandw==2) newtile = grassspot[0+0*3];
else if (sandw+sands==2) newtile = grassspot[0+2*3];
else if (sands+sande==2) newtile = grassspot[2+2*3];
else newtile = grassspot[2+0*3];
} else if (sandn+sandw+sands+sande==1) {
if (sandn+sandse==2 || sande+sandnw==2) newtile = grassspot[2+0*3];
else if (sandn+sandsw==2 || sandw+sandne==2) newtile = grassspot[0+0*3];
else if (sands+sandnw==2 || sandw+sandse==2) newtile = grassspot[0+2*3];
else if (sands+sandne==2 || sande+sandsw==2) newtile = grassspot[2+2*3];
else if (sandn==1) newtile = grassspot[1+0*3] + (tx%2); // 2 tiles for north
else if (sandw==1) newtile = grassspot[0+1*3];
else if (sands==1) newtile = grassspot[1+2*3] + (tx%2); // 2 tiles for south
else newtile = grassspot[2+1*3];
} else if (sandnw+sandne+sandsw+sandse==2) {
if (sandnw+sandse==2) newtile = sandcornernwse;
else if (sandne+sandsw==2) newtile = sandcornernesw;
} else if (sandnw+sandne+sandsw+sandse==1) {
if (sandnw==1) newtile = sandspot[2+2*3];
else if (sandsw==1) newtile = sandspot[2+0*3];
else if (sandse==1) newtile = sandspot[0+0*3];
else newtile = sandspot[0+2*3];
}

// Write the tile
tiles[tx,ty] = newtile;
}

// Redraw the level on the mouse position
updateboard px-1,py-1,3,3;
}
function checkgrassorborder() {
isok = ((tiles[tx,ty] in grasstiles) || (tiles[tx,ty] in allcornertiles));
}



It's pretty much self-explanatory, I just haven't gotten around to trying it.
__________________
Quote:
Originally posted by Spark910
Think befreo you type.
Reply With Quote
 


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +2. The time now is 12:40 PM.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2025, vBulletin Solutions Inc.
Copyright (C) 1998-2019 Toonslab All Rights Reserved.