LScript (Layout) applies a Game Boy style look.
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 - Game Boy Image_GameBoy.ls */ @version 2.5 @warnings @script image @name *Game Boy // Title sTitle = "*Game Boy"; // Version sVersion = "v1.0"; nCorrection = 7.5; iPixelSize = 4; nGridAmount = 0.5; iGridWidth = 1; aColor; // Control ctrl_c0; create { setdesc(sTitle); aColor[1] = <(1 / 255) * 23,(1 / 255) * 74,(1 / 255) * 3>; aColor[2] = <(1 / 255) * 39,(1 / 255) * 82,(1 / 255) * 3>; aColor[3] = <(1 / 255) * 88,(1 / 255) * 114,(1 / 255) * 3>; aColor[4] = <(1 / 255) * 111,(1 / 255) * 127,(1 / 255) * 3>; aColor[5] = <(1 / 255) * 131,(1 / 255) * 137,(1 / 255) * 3>; aColor[6] = <(1 / 255) * 150,(1 / 255) * 160,(1 / 255) * 3>; } process: ifo { // Error if(iPixelSize < 2){return;} if(ifo.width < 1 || ifo.height < 1){return;} iGridX = ceil(ifo.width / iPixelSize); iGridY = ceil(ifo.height / iPixelSize); iGridXOffset = abs((ifo.width - (iGridX * iPixelSize)) * 0.5); iGridYOffset = abs((ifo.height - (iGridY * iPixelSize)) * 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 gameboyIFO(ifo,v1,v2); if(runningUnder() != SCREAMERNET) if(monstep()) return; } } } gameboyIFO: 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.0; g = 0.0; b = 0.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; } a = (r + g + b) * (1 / 3); a = round(a * nCorrection,0); a = max(min(a,5),1); r = aColor[a].x; g = aColor[a].y; b = aColor[a].z; l1 = nGridAmount; l2 = 1.0 - nGridAmount; if(iGridWidth <= 0) { // 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; } } } else if(iGridWidth == 1) { // Draw for(y = v1.y; y <= v2.y; ++y) { for(x = v1.x; x <= v2.x; ++x) { if(x == v1.x || y == v1.y) { ifo.red[x,y] = (aColor[6].x * l1) + (r * l2); ifo.green[x,y] = (aColor[6].y * l1) + (g * l2); ifo.blue[x,y] = (aColor[6].z * l1) + (b * l2); ifo.alpha[x,y] = 1.0; } else { ifo.red[x,y] = r; ifo.green[x,y] = g; ifo.blue[x,y] = b; ifo.alpha[x,y] = 1.0; } } } } else if(iGridWidth > 1) { // Draw for(y = v1.y; y <= v2.y; ++y) { for(x = v1.x; x <= v2.x; ++x) { if(x <= (v1.x + (iGridWidth - 1)) || x >= (v2.x - iGridWidth) || y <= (v1.y + (iGridWidth - 1)) || y >= (v2.y - iGridWidth)) { ifo.red[x,y] = (aColor[6].x * l1) + (r * l2); ifo.green[x,y] = (aColor[6].y * l1) + (g * l2); ifo.blue[x,y] = (aColor[6].z * l1) + (b * l2); ifo.alpha[x,y] = 1.0; } else { 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) { nCorrection = io.read().asNum(); iPixelSize = io.read().asInt(); nGridAmount = io.read().asNum(); iGridWidth = io.read().asInt(); } } } save: what,io { if(what == SCENEMODE) { // Header io.writeln(sTitle + " " + sVersion); io.writeln(nCorrection); io.writeln(iPixelSize); io.writeln(nGridAmount); io.writeln(iGridWidth); } } options { reqbegin(sTitle + " " + sVersion); // Control ctrl_c0 = ctlnumber("Correction",nCorrection); // Correction ctrl_c1 = ctlinteger("Pixel Size",iPixelSize); // Pixel Size ctrl_c2 = ctlpercent("Grid Amount",nGridAmount); // Grid Amount ctrl_c3 = ctlinteger("Grid Width",iGridWidth); // Grid Width // Developer ctlsep(); ctrl_dev0 = ctltext("","developer: Stephen Culley","http://www.stephenculley.co.uk"); return if !reqpost(); nCorrection = getvalue(ctrl_c0); // Correction iPixelSize = getvalue(ctrl_c1); // Pixel Size nGridAmount = getvalue(ctrl_c2); // Grid Amount iGridWidth = getvalue(ctrl_c3); // Grid Width }
All scripts available at my Google Drive at
https://drive.google.com/open?id=1cR_q2GVUAJHumic1-A3eXV16acQnVTWs