Feedback
Thursday, 28 March 2013
Free Stuff - Tin Cans (Object)
Free objects for LightWave : Various high quality sub-division modeled tin cans (10).
Compatible with Newtek LightWave 9.6 and above.
Download - zipped object (.zip)
Tuesday, 26 March 2013
LScript - Image_Alpha
LScript (Layout) to create compressed video artifact effect.
Compatible with Newtek LightWave 9.6 and above.

All scripts available at my Google Drive at
https://drive.google.com/open?id=1cR_q2GVUAJHumic1-A3eXV16acQnVTWs
Compatible with Newtek LightWave 9.6 and above.
// LScript Image Filter - www.StephenCulley.co.uk
//
// web address: http://www.stephenculley.co.uk
// email address: email@stephenculley.co.uk
/*
LScript Image Filter - Alpha
Image_Alpha.ls
*/
@version 2.5
@warnings
@script image
@name *Alpha
// Title
sTitle = "*Alpha";
// Version
sVersion = "v1.0";
aType = @"Solid","Luma","Luma (Invert)"@;
iType = 1;
create
{
setdesc(sTitle + " - " + aType[iType]);
}
process: ifo
{
if(iType == 1) // Solid
{
iProgress = ifo.height;
if(runningUnder() != SCREAMERNET) moninit(iProgress);
for(i = 1;i <= ifo.height;++i)
{
for(j = 1;j <= ifo.width;++j)
{
ifo.alpha[j,i] = 1.0;
}
if(runningUnder() != SCREAMERNET) if(monstep()) return;
}
}
if(iType == 2) // Luma
{
iProgress = ifo.height;
if(runningUnder() != SCREAMERNET) moninit(iProgress);
for(i = 1;i <= ifo.height;++i)
{
for(j = 1;j <= ifo.width;++j)
{
ifo.alpha[j,i] = clip(0.0,1.0,(ifo.red[j,i] + ifo.green[j,i] + ifo.blue[j,i]) * (1 / 3));
}
if(runningUnder() != SCREAMERNET) if(monstep()) return;
}
}
if(iType == 3) // Luma (Invert)
{
iProgress = ifo.height;
if(runningUnder() != SCREAMERNET) moninit(iProgress);
for(i = 1;i <= ifo.height;++i)
{
for(j = 1;j <= ifo.width;++j)
{
ifo.alpha[j,i] = clip(0.0,1.0,1.0 - ((ifo.red[j,i] + ifo.green[j,i] + ifo.blue[j,i]) * (1 / 3)));
}
if(runningUnder() != SCREAMERNET) if(monstep()) return;
}
}
}
// CLIP
clip: min,max,n
{
if(n < min) n = min;
if(n > max) n = max;
return(n);
}
load: what,io
{
if(what == SCENEMODE)
{
iType = io.read().asInt();
setdesc(sTitle + " - " + aType[iType]);
}
}
save: what,io
{
if(what == SCENEMODE)
{
io.writeln(iType);
}
}
options
{
reqbegin(sTitle + " " + sVersion);
// Control
ctrl_c0 = ctlchoice("Type",iType,@"Solid","Luma","Luma Invert"@); // Type
// Developer
ctrl_dev0 = ctltext("","developer: Stephen Culley","http://www.stephenculley.co.uk");
return if !reqpost();
iType = getvalue(ctrl_c0);
setdesc(sTitle + " - " + aType[iType]);
reqend();
}

All scripts available at my Google Drive at
https://drive.google.com/open?id=1cR_q2GVUAJHumic1-A3eXV16acQnVTWs
Friday, 15 March 2013
LScript - Image_Pixelate
LScript (Layout) to create a pixelated effect with envelope control.
Changes
Compatible with Newtek LightWave 9.6 and above.
All scripts available at my Google Drive at
https://drive.google.com/open?id=1cR_q2GVUAJHumic1-A3eXV16acQnVTWs
Changes
- Override alpha
Compatible with Newtek LightWave 9.6 and above.
// LScript Image Filter - www.StephenCulley.co.uk
//
// web address: http://www.stephenculley.co.uk
// email address: email@stephenculley.co.uk
/*
LScript Image Filter - Pixelate
Image_Pixelate.ls
*/
@version 2.5
@warnings
@script image
@name *Pixelate
// Title
sTitle = "*Pixelate";
// Version
sVersion = "v1.0";
// Envelope
envSize; // Size
// Control
ctrl_c0;
create
{
setdesc(sTitle);
// Envelope
envSize = Envelope("Size (" + sTitle + ")",CHAN_NUMBER,sTitle); // Size
envSize.persist(false);
envSize.createKey(0,20.0);
}
process: ifo
{
// Variable
iSize = ceil(envSize.value(Scene().currenttime));
// Error
if(iSize < 2){return;}
if(ifo.width < 1 || ifo.height < 1){return;}
iGridX = ceil(ifo.width / iSize);
iGridY = ceil(ifo.height / iSize);
iGridXOffset = abs((ifo.width - (iGridX * iSize)) * 0.5);
iGridYOffset = abs((ifo.height - (iGridY * iSize)) * 0.5);
iProgress = iGridX * iGridY;
if(runningUnder() != SCREAMERNET) moninit(iProgress);
for(y = 0;y <= iGridY - 1; ++y)
{
for(x = 0;x <= iGridX - 1; ++x)
{
v1 = ;
v2 = ;
// Draw
pixelateIFO(ifo,v1,v2);
if(runningUnder() != SCREAMERNET) if(monstep()) return;
}
}
}
pixelateIFO: ifo,v1,v2 // vector,red,green,blue
{
// Order
if(v1.x > v2.x){n = v2.x;v2.x = v1.x; v1.x = n;}
if(v1.y > v2.y){n = v2.y;v2.y = v1.y; v1.y = n;}
if(v1.x < 1 || v2.x > ifo.width ||
v1.y < 1 || v2.y > ifo.height)
{
// Offscreen
if(v2.x < 1){return;}
if(v1.x > ifo.width){return;}
if(v2.y < 1){return;}
if(v1.y > ifo.width){return;}
// Clip
if(v1.x < 1){v1.x = 1;}
if(v1.x > ifo.width){v1.x = ifo.width;}
if(v1.y < 1){v1.y = 1;}
if(v1.y > ifo.height){v1.y = ifo.height;}
if(v2.x < 1){v2.x = 1;}
if(v2.x > ifo.width){v2.x = ifo.width;}
if(v2.y < 1){v2.y = 1;}
if(v2.y > ifo.height){v2.y = ifo.height;}
}
r = 0;
g = 0;
b = 0;
c = 0;
// Average
for(y = v1.y; y <= v2.y; ++y)
{
for(x = v1.x; x <= v2.x; ++x)
{
r += ifo.red[x,y];
g += ifo.green[x,y];
b += ifo.blue[x,y];
++c;
}
}
if(c > 1)
{
r *= 1 / c;
g *= 1 / c;
b *= 1 / c;
}
// Draw
for(y = v1.y; y <= v2.y; ++y)
{
for(x = v1.x; x <= v2.x; ++x)
{
ifo.red[x,y] = r;
ifo.green[x,y] = g;
ifo.blue[x,y] = b;
ifo.alpha[x,y] = 1.0;
}
}
}
load: what,io
{
if(what == SCENEMODE) // processing an ASCII scene file
{
if(io.read().asStr() == sTitle + " " + sVersion)
{
// Envelope
envSize.load(); // Size
}
}
}
save: what,io
{
if(what == SCENEMODE)
{
// Header
io.writeln(sTitle + " " + sVersion);
// Envelope
envSize.save(); // Size
}
}
options
{
if(reqisopen())
{
reqend();
return;
}
reqbegin(sTitle + " " + sVersion);
ctrl_c0 = ctlpercent("Size",envSize.value(Scene().currenttime) * 0.01); // Size
ctrl_c1e = ctlbutton("E",20,"button_c1e"); // Button
// Developer
ctlsep();
ctrl_dev0 = ctltext("","developer: Stephen Culley","http://www.stephenculley.co.uk");
// Refresh
ctlrefresh(ctrl_c0,"refresh_c0"); // Size
reqopen();
}
button_c1e // Size
{
envSize.edit();
}
refresh_c0:value // Size
{
setvalue(ctrl_c0,max(0.0,value));
iKey = envSize.keyExists(Scene().currenttime);
if(iKey == nil)
{envSize.createKey(Scene().currenttime,max(0.0,value * 100));}
else
{envSize.setKeyValue(iKey,max(0.0,value * 100));}
}
All scripts available at my Google Drive at
https://drive.google.com/open?id=1cR_q2GVUAJHumic1-A3eXV16acQnVTWs
Monday, 11 March 2013
LScript - Image_DigitalArtifacts
LScript (Layout) to create compressed video artifact effect.
Compatible with Newtek LightWave 9.6 and above.
All scripts available at my Google Drive at
https://drive.google.com/open?id=1cR_q2GVUAJHumic1-A3eXV16acQnVTWs
Compatible with Newtek LightWave 9.6 and above.
// LScript Image Filter - www.StephenCulley.co.uk
//
// web address: http://www.stephenculley.co.uk
// email address: email@stephenculley.co.uk
/*
LScript Image Filter - Digital Artifacts
Image_DigitalArtifacts.ls
*/
@version 2.5
@warnings
@script image
@name *Digital Artifacts
// Title
sTitle = "*Digital Artifacts";
// Version
sVersion = "v1.0";
iBlockSize = 8;
iLifeRed = 2;
iLifeGreen = 2;
iLifeBlue = 2;
nErrorRed = 0.03;
nErrorGreen = 0.03;
nErrorBlue = 0.03;
bColorSync = false;
aBlock = nil; // Block
// Control
ctrl_pr0,ctrl_c0,ctrl_c1,ctrl_c2,ctrl_c3,ctrl_c4,ctrl_c5,ctrl_c6,ctrl_c7;
create
{
setdesc(sTitle);
}
process: ifo
{
// Error
if(ifo.width < 1 || ifo.height < 1){return;}
// Variable
iBlock = 1;
iBlockMultiplier = 1 / (iBlockSize * iBlockSize);
iGridX = floor(ifo.width / iBlockSize);
iGridY = floor(ifo.height / iBlockSize);
_nErrorRed = nErrorRed * (iBlockSize * iBlockSize);
_nErrorGreen = nErrorGreen * (iBlockSize * iBlockSize);
_nErrorBlue = nErrorBlue * (iBlockSize * iBlockSize);
// Init Block
if(aBlock.size() <> (iGridX * iGridY) || ifo.frame == 0)
{
for(b = 1; b <= (iGridX * iGridY); ++b)
{
aBlock[b,1] = 0; // Red Count
aBlock[b,2] = 0; // Green Count
aBlock[b,3] = 0; // Blue Count
aBlock[b,4] = 0.0; // Red
aBlock[b,5] = 0.0; // Green
aBlock[b,6] = 0.0; // Blue
}
}
iProgress = iGridX * iGridY;
if(runningUnder() != SCREAMERNET) moninit(iProgress);
for(gy = 0;gy <= iGridY - 1; ++gy)
{
for(gx = 0;gx <= iGridX - 1; ++gx)
{
_gx = gx * iBlockSize;
_gy = gy * iBlockSize;
r = 0;
g = 0;
b = 0;
// Average
for(i = 1;i <= iBlockSize; ++i)
{
for(j = 1;j <= iBlockSize; ++j)
{
r += ifo.red[j + _gx,i + _gy]; // Red
g += ifo.green[j + _gx,i + _gy]; // Green
b += ifo.blue[j + _gx,i + _gy]; // Blue
}
}
r *= iBlockMultiplier;
g *= iBlockMultiplier;
b *= iBlockMultiplier;
// Difference
rd = 0;
gd = 0;
bd = 0;
for(i = 1;i <= iBlockSize; ++i)
{
for(j = 1;j <= iBlockSize; ++j)
{
rd += abs(ifo.red[j + _gx,i + _gy] - r);
gd += abs(ifo.green[j + _gx,i + _gy] - g);
bd += abs(ifo.blue[j + _gx,i + _gy] - b);
}
}
// Update Block
if(bColorSync)
{
if((aBlock[iBlock,1] <= 0 && rd < _nErrorRed) ||
(aBlock[iBlock,2] <= 0 && gd < _nErrorGreen) ||
(aBlock[iBlock,3] <= 0 && bd < _nErrorBlue))
{
c = random(1,3);
aBlock[iBlock,1] = c;
aBlock[iBlock,2] = c;
aBlock[iBlock,3] = c;
}
aBlock[iBlock,4] = r;
aBlock[iBlock,5] = g;
aBlock[iBlock,6] = b;
}
else
{
if(aBlock[iBlock,1] <= 0 && rd < _nErrorRed) // Red
{
aBlock[iBlock,1] = random(1,iLifeRed);
aBlock[iBlock,4] = r;
}
if(aBlock[iBlock,2] <= 0 && gd < _nErrorGreen) // Green
{
aBlock[iBlock,2] = random(1,iLifeGreen);
aBlock[iBlock,5] = g;
}
if(aBlock[iBlock,3] <= 0 && bd < _nErrorBlue) // Blue
{
aBlock[iBlock,3] = random(1,iLifeBlue);
aBlock[iBlock,6] = b;
}
}
// Read Block
rd = aBlock[iBlock,1];
--aBlock[iBlock,1];
r = aBlock[iBlock,4];
gd = aBlock[iBlock,2];
--aBlock[iBlock,2];
g = aBlock[iBlock,5];
bd = aBlock[iBlock,3];
--aBlock[iBlock,3];
b = aBlock[iBlock,6];
// Draw Block
for(i = 1;i <= iBlockSize; ++i)
{
for(j = 1;j <= iBlockSize; ++j)
{
if(rd > 0){ifo.red[j + _gx,i + _gy] = r;}
if(gd > 0){ifo.green[j + _gx,i + _gy] = g;}
if(bd > 0){ifo.blue[j + _gx,i + _gy] = b;}
}
}
++iBlock;
if(runningUnder() != SCREAMERNET) if(monstep()) return;
}
}
}
// CLIP
clip: min,max,n
{
if(n < min) n = min;
if(n > max) n = max;
return(n);
}
load: what,io
{
if(what == SCENEMODE)
{
bColorSync = io.read().asInt();
iBlockSize = io.read().asInt();
iLifeRed = io.read().asInt();
iLifeGreen = io.read().asInt();
iLifeBlue = io.read().asInt();
nErrorRed = io.read().asNum();
nErrorGreen = io.read().asNum();
nErrorBlue = io.read().asNum();
}
}
save: what,io
{
if(what == SCENEMODE)
{
io.writeln(bColorSync);
io.writeln(iBlockSize);
io.writeln(iLifeRed);
io.writeln(iLifeGreen);
io.writeln(iLifeBlue);
io.writeln(nErrorRed);
io.writeln(nErrorGreen);
io.writeln(nErrorBlue);
}
}
options
{
reqbegin(sTitle + " " + sVersion);
// Control
ctrl_pr0 = ctlpopup("Preset",1, @"Low",
"Medium",
"High",
"Extreme"@);
ctlsep();
ctrl_c0 = ctlinteger("Block Size",iBlockSize);
ctrl_c1 = ctlcheckbox("Color Sync",bColorSync);
ctrl_c2 = ctlinteger("Life Red",iLifeRed);
ctrl_c3 = ctlinteger(" Green",iLifeGreen);
ctrl_c4 = ctlinteger(" Blue",iLifeBlue);
ctrl_c5 = ctlpercent("Error Red",nErrorRed);
ctrl_c6 = ctlpercent(" Green",nErrorGreen);
ctrl_c7 = ctlpercent(" Blue",nErrorBlue);
// Developer
ctlsep();
ctrl_dev0 = ctltext("","developer: Stephen Culley","http://www.stephenculley.co.uk");
// Refresh
ctlrefresh(ctrl_pr0,"refresh_preset"); // Preset
ctlrefresh(ctrl_c0,"refresh_c0"); // Block Size
ctlrefresh(ctrl_c2,"refresh_c2"); // Life Red
ctlrefresh(ctrl_c3,"refresh_c3"); // Life Green
ctlrefresh(ctrl_c4,"refresh_c4"); // Life Blue
ctlrefresh(ctrl_c5,"refresh_c5"); // Error Red
ctlrefresh(ctrl_c6,"refresh_c6"); // Error Green
ctlrefresh(ctrl_c7,"refresh_c7"); // Error Blue
return if !reqpost();
iBlockSize = max(1,getvalue(ctrl_c0));
bColorSync = getvalue(ctrl_c1);
iLifeRed = max(1,getvalue(ctrl_c2));
iLifeGreen = max(1,getvalue(ctrl_c3));
iLifeBlue = max(1,getvalue(ctrl_c4));
iErroRed = max(0.0,getvalue(ctrl_c5));
iErrorGreen = max(0.0,getvalue(ctrl_c6));
iErrorBlue = max(0.0,getvalue(ctrl_c7));
reqend();
}
refresh_preset:value
{
if(value == 1) // Low
{
setvalue(ctrl_c0,8); // Block Size
setvalue(ctrl_c1,0); // Sync Color
setvalue(ctrl_c2,1); // Life Red
setvalue(ctrl_c3,1); // Life Green
setvalue(ctrl_c4,1); // Life Blue
setvalue(ctrl_c5,0.02); // Error Red
setvalue(ctrl_c6,0.02); // Error Green
setvalue(ctrl_c7,0.02); // Error Blue
}
if(value == 2) // Medium
{
setvalue(ctrl_c0,8); // Block Size
setvalue(ctrl_c1,0); // Sync Color
setvalue(ctrl_c2,2); // Life Red
setvalue(ctrl_c3,2); // Life Green
setvalue(ctrl_c4,2); // Life Blue
setvalue(ctrl_c5,0.02); // Error Red
setvalue(ctrl_c6,0.03); // Error Green
setvalue(ctrl_c7,0.04); // Error Blue
}
if(value == 3) // High
{
setvalue(ctrl_c0,8); // Block Size
setvalue(ctrl_c1,0); // Sync Color
setvalue(ctrl_c2,3); // Life Red
setvalue(ctrl_c3,3); // Life Green
setvalue(ctrl_c4,3); // Life Blue
setvalue(ctrl_c5,0.02); // Error Red
setvalue(ctrl_c6,0.04); // Error Green
setvalue(ctrl_c7,0.06); // Error Blue
}
if(value == 4) // Extreme
{
setvalue(ctrl_c0,8); // Block Size
setvalue(ctrl_c1,0); // Sync Color
setvalue(ctrl_c2,9); // Life Red
setvalue(ctrl_c3,9); // Life Green
setvalue(ctrl_c4,9); // Life Blue
setvalue(ctrl_c5,0.1); // Error Red
setvalue(ctrl_c6,0.1); // Error Green
setvalue(ctrl_c7,0.1); // Error Blue
}
}
refresh_c0:value // Block Size
{
iBlockSize = max(1,value);
setvalue(ctrl_c0,iBlockSize);
}
refresh_c2:value // Life Red
{
iLifeRed = max(1,value);
setvalue(ctrl_c2,iLifeRed);
}
refresh_c3:value // Life Green
{
iLifeGreen = max(1,value);
setvalue(ctrl_c3,iLifeGreen);
}
refresh_c4:value // Life Blue
{
iLifeBlue = max(1,value);
setvalue(ctrl_c4,iLifeBlue);
}
refresh_c5:value // Error Red
{
nErrorRed = clip(0.0,1.0,value);
setvalue(ctrl_c5,nErrorRed);
}
refresh_c6:value // Error Green
{
nErrorGreen = clip(0.0,1.0,value);
setvalue(ctrl_c6,nErrorGreen);
}
refresh_c7:value // Error Blue
{
nErrorBlue = clip(0.0,1.0,value);
setvalue(ctrl_c7,nErrorBlue);
}
All scripts available at my Google Drive at
https://drive.google.com/open?id=1cR_q2GVUAJHumic1-A3eXV16acQnVTWs
Monday, 4 March 2013
LScript - Image_DepthDesaturation
LScript (Layout) desaturates the image based on depth buffer.
Compatible with Newtek LightWave 9.6 and above.
// LScript Image Filter - www.StephenCulley.co.uk
//
// web address: http://www.stephenculley.co.uk
// email address: email@stephenculley.co.uk
/*
LScript Image Filter - Depth Desaturate
Image_DepthDesaturate.ls
*/
@version 2.5
@warnings
@script image
@name *Depth Desaturate
// Title
sTitle = "*Depth Desaturate";
// Version
sVersion = "v1.0";
nAmount = 1.0;
nMin = 1.0;
nMax = 10.0;
// Control
ctrl_c0;
create
{
setdesc(sTitle);
}
process: ifo
{
iProgress = ifo.height;
if(runningUnder() != SCREAMERNET) moninit(iProgress);
for(i = 1;i <= ifo.height;++i)
{
for(j = 1;j <= ifo.width;++j)
{
nAverage = (ifo.red[j,i] + ifo.green[j,i] + ifo.blue[j,i]) * 0.3333333333;
nDepth = clip(0.0,1.0,maprange01(nMin,nMax,ifo.depth[j,i]));
ifo.red[j,i] = ifo.red[j,i] - (nAmount * nDepth) * (ifo.red[j,i] - nAverage);
ifo.green[j,i] = ifo.green[j,i] - (nAmount * nDepth) * (ifo.green[j,i] - nAverage);
ifo.blue[j,i] = ifo.blue[j,i] - (nAmount * nDepth) * (ifo.blue[j,i] - nAverage);
}
if(runningUnder() != SCREAMERNET) if(monstep()) return;
}
}
// CLIP
clip: min,max,n
{
if(n < min) n = min;
if(n > max) n = max;
return(n);
}
// MAP RANGE
maprange01: n1,n2,i
{
if(n2-n1 == 0.0){return(0.0);}
else
{return((1/(n2-n1)) * (i-n1));}
}
load: what,io
{
if(what == SCENEMODE)
{
nAmount = io.read().asNum();
nMin = io.read().asNum();
nMax = io.read().asNum();
}
}
save: what,io
{
if(what == SCENEMODE)
{
io.writeln(nAmount);
io.writeln(nMin);
io.writeln(nMax);
}
}
options
{
reqbegin(sTitle + " " + sVersion);
// Control
ctrl_c0 = ctlpercent("Amount",nAmount);
ctrl_c1 = ctlnumber("Min (m)",nMin);
ctrl_c2 = ctlnumber("Max (m)",nMax);
// Developer
ctlsep();
ctrl_dev0 = ctltext("","developer: Stephen Culley","http://www.stephenculley.co.uk");
// Refresh
ctlrefresh(ctrl_c0,"refresh_c0"); // Amount
return if !reqpost();
nAmount = clip(0.0,1.0,getvalue(ctrl_c0));
nMin = getvalue(ctrl_c1);
nMax = getvalue(ctrl_c2);
reqend();
}
refresh_c0:value // Amount
{
nAmount = clip(0.0,1.0,value);
setvalue(ctrl_c0,nAmount);
}
All scripts available at my Google Drive at
https://drive.google.com/open?id=1cR_q2GVUAJHumic1-A3eXV16acQnVTWs
LScript - Image_Depth
LScript (Layout) to create a grey scale representation of the depth buffer.
Compatible with Newtek LightWave 9.6 and above.
// LScript Image Filter - www.StephenCulley.co.uk
//
// web address: http://www.stephenculley.co.uk
// email address: email@stephenculley.co.uk
/*
LScript Image Filter - Depth
Image_Depth.ls
*/
@version 2.5
@warnings
@script image
@name *Depth
// Title
sTitle = "*Depth";
// Version
sVersion = "v1.0";
nMin = 0.0;
nMax = 10.0;
create
{
setdesc(sTitle);
}
process: ifo
{
iProgress = ifo.height;
if(runningUnder() != SCREAMERNET) moninit(iProgress);
for(i = 1;i <= ifo.height;++i)
{
for(j = 1;j <= ifo.width;++j)
{
nDepth = 1 - clip(0.0,1.0,maprange01(nMin,nMax,ifo.depth[j,i]));
ifo.red[j,i] = nDepth;
ifo.green[j,i] = nDepth;
ifo.blue[j,i] = nDepth;
}
if(runningUnder() != SCREAMERNET) if(monstep()) return;
}
}
// CLIP
clip: min,max,n
{
if(n < min) n = min;
if(n > max) n = max;
return(n);
}
// MAP RANGE
maprange01: n1,n2,i
{
if(n2-n1 == 0.0){return(0.0);}
else
{return((1/(n2-n1)) * (i-n1));}
}
load: what,io
{
if(what == SCENEMODE)
{
nMin = io.read().asNum();
nMax = io.read().asNum();
}
}
save: what,io
{
if(what == SCENEMODE)
{
io.writeln(nMin);
io.writeln(nMax);
}
}
options
{
reqbegin(sTitle + " " + sVersion);
// Control
ctrl_c0 = ctlnumber("Min (m)",nMin);
ctrl_c1 = ctlnumber("Max (m)",nMax);
// Developer
ctlsep();
ctrl_dev0 = ctltext("","developer: Stephen Culley","http://www.stephenculley.co.uk");
return if !reqpost();
nMin = getvalue(ctrl_c0);
nMax = getvalue(ctrl_c1);
reqend();
}
All scripts available at my Google Drive at
https://drive.google.com/open?id=1cR_q2GVUAJHumic1-A3eXV16acQnVTWs
Subscribe to:
Comments (Atom)


