The Wiki for Tale 6 is in read-only mode and is available for archival and reference purposes only. Please visit the current Tale 11 Wiki in the meantime.

If you have any issues with this Wiki, please post in #wiki-editing on Discord or contact Brad in-game.

Difference between revisions of "User:OneBanana/Gallery/Test Page 1"

From ATITD6
Jump to navigationJump to search
Line 125: Line 125:
 
| '''Tower'''            ||  '''TBA'''  || '''TBA'''
 
| '''Tower'''            ||  '''TBA'''  || '''TBA'''
 
|}
 
|}
 +
 +
 +
 +
-- And ==
 +
 +
 +
 +
 +
/**
 +
* Water ripple effect.
 +
* Original code (Java) by Neil Wallis
 +
* @link http://www.neilwallis.com/java/water.html
 +
*
 +
* @author Sergey Chikuyonok ([email protected])
 +
* @link http://chikuyonok.ru
 +
*/
 +
(function(){
 +
    var canvas = document.getElementById('c'),
 +
        /** @type {CanvasRenderingContext2D} */
 +
        ctx = canvas.getContext('2d'),
 +
        width = 400,
 +
        height = 400,
 +
        half_width = width >> 1,
 +
        half_height = height >> 1,
 +
        size = width * (height + 2) * 2,
 +
        delay = 30,
 +
        oldind = width,
 +
        newind = width * (height + 3),
 +
        riprad = 3,
 +
        ripplemap = [],
 +
        last_map = [],
 +
        ripple,
 +
        texture,
 +
        line_width = 20,
 +
        step = line_width * 2,
 +
        count = height / line_width;
 +
       
 +
    canvas.width = width;
 +
    canvas.height = height;
 +
   
 +
    /*
 +
    * Water ripple demo can work with any bitmap image
 +
    * (see example here: http://media.chikuyonok.ru/ripple/)
 +
    * But I need to draw simple artwork to bypass 1k limitation
 +
    */
 +
    with (ctx) {
 +
        fillStyle = '#a2ddf8';
 +
        fillRect(0, 0, width, height);
 +
       
 +
        fillStyle = '#07b';
 +
        save();
 +
        rotate(-0.785);
 +
        for (var i = 0; i < count; i++) {
 +
            fillRect(-width, i * step, width * 3, line_width);
 +
        }
 +
       
 +
        restore();
 +
    }
 +
   
 +
    texture = ctx.getImageData(0, 0, width, height);
 +
    ripple = ctx.getImageData(0, 0, width, height);
 +
   
 +
    for (var i = 0; i < size; i++) {
 +
        last_map[i] = ripplemap[i] = 0;
 +
    }
 +
   
 +
    /**
 +
    * Main loop
 +
    */
 +
    function run() {
 +
        newframe();
 +
        ctx.putImageData(ripple, 0, 0);
 +
    }
 +
   
 +
    /**
 +
    * Disturb water at specified point
 +
    */
 +
    function disturb(dx, dy) {
 +
        dx <<= 0;
 +
        dy <<= 0;
 +
       
 +
        for (var j = dy - riprad; j < dy + riprad; j++) {
 +
            for (var k = dx - riprad; k < dx + riprad; k++) {
 +
                ripplemap[oldind + (j * width) + k] += 128;
 +
            }
 +
        }
 +
    }
 +
   
 +
    /**
 +
    * Generates new ripples
 +
    */
 +
    function newframe() {
 +
        var a, b, data, cur_pixel, new_pixel, old_data;
 +
       
 +
        var t = oldind; oldind = newind; newind = t;
 +
        var i = 0;
 +
       
 +
        // create local copies of variables to decrease
 +
        // scope lookup time in Firefox
 +
        var _width = width,
 +
            _height = height,
 +
            _ripplemap = ripplemap,
 +
            _last_map = last_map,
 +
            _rd = ripple.data,
 +
            _td = texture.data,
 +
            _half_width = half_width,
 +
            _half_height = half_height;
 +
       
 +
        for (var y = 0; y < _height; y++) {
 +
            for (var x = 0; x < _width; x++) {
 +
                var _newind = newind + i, _mapind = oldind + i;
 +
                data = (
 +
                    _ripplemap[_mapind - _width] +
 +
                    _ripplemap[_mapind + _width] +
 +
                    _ripplemap[_mapind - 1] +
 +
                    _ripplemap[_mapind + 1]) >> 1;
 +
                   
 +
                data -= _ripplemap[_newind];
 +
                data -= data >> 5;
 +
               
 +
                _ripplemap[_newind] = data;
 +
 +
                //where data=0 then still, where data>0 then wave
 +
                data = 1024 - data;
 +
               
 +
                old_data = _last_map[i];
 +
                _last_map[i] = data;
 +
               
 +
                if (old_data != data) {
 +
                    //offsets
 +
                    a = (((x - _half_width) * data / 1024) << 0) + _half_width;
 +
                    b = (((y - _half_height) * data / 1024) << 0) + _half_height;
 +
   
 +
                    //bounds check
 +
                    if (a >= _width) a = _width - 1;
 +
                    if (a < 0) a = 0;
 +
                    if (b >= _height) b = _height - 1;
 +
                    if (b < 0) b = 0;
 +
   
 +
                    new_pixel = (a + (b * _width)) * 4;
 +
                    cur_pixel = i * 4;
 +
                   
 +
                    _rd[cur_pixel] = _td[new_pixel];
 +
                    _rd[cur_pixel + 1] = _td[new_pixel + 1];
 +
                    _rd[cur_pixel + 2] = _td[new_pixel + 2];
 +
                }
 +
               
 +
                ++i;
 +
            }
 +
        }
 +
    }
 +
   
 +
    canvas.onmousemove = function(/* Event */ evt) {
 +
        disturb(evt.offsetX || evt.layerX, evt.offsetY || evt.layerY);
 +
    };
 +
   
 +
    setInterval(run, delay);
 +
   
 +
    // generate random ripples
 +
    var rnd = Math.random;
 +
    setInterval(function() {
 +
        disturb(rnd() * width, rnd() * height);
 +
    }, 700);
 +
   
 +
})();

Revision as of 15:58, 1 March 2015

Hypno001.gif












Builders

Megalopolis Section Builder Built ?
Central Structure TBA TBA
Ramp TBA TBA
Ramp TBA TBA
Ramp TBA TBA
Ramp TBA TBA
Wall TBA TBA
Wall TBA TBA
Wall TBA TBA
Wall TBA TBA
Wall TBA TBA
Wall TBA TBA
Wall TBA TBA
Wall TBA TBA
Tower TBA TBA
Tower TBA TBA
Tower TBA TBA
Tower TBA TBA
Bridge TBA TBA
Bridge TBA TBA
Bridge TBA TBA
Bridge TBA TBA
Gate TBA TBA
Gate TBA TBA
Gate TBA TBA
Gate TBA TBA
Side TBA TBA
Side TBA TBA
Side TBA TBA
Side TBA TBA
Side TBA TBA
Side TBA TBA
Side TBA TBA
Side TBA TBA
Edge TBA TBA
Edge TBA TBA
Edge TBA TBA
Edge TBA TBA
Edge TBA TBA
Edge TBA TBA
Edge TBA TBA
Edge TBA TBA
Tower TBA TBA
Tower TBA TBA
Tower TBA TBA
Tower TBA TBA
Tower TBA TBA
Tower TBA TBA
Tower TBA TBA
Tower TBA TBA


-- And ==



/**

* Water ripple effect.
* Original code (Java) by Neil Wallis 
* @link http://www.neilwallis.com/java/water.html
* 
* @author Sergey Chikuyonok ([email protected])
* @link http://chikuyonok.ru
*/

(function(){

   var canvas = document.getElementById('c'),
       /** @type {CanvasRenderingContext2D} */
       ctx = canvas.getContext('2d'),
       width = 400,
       height = 400,
       half_width = width >> 1,
       half_height = height >> 1,
       size = width * (height + 2) * 2,
       delay = 30,
       oldind = width,
       newind = width * (height + 3),
       riprad = 3,
       ripplemap = [],
       last_map = [],
       ripple,
       texture,
       line_width = 20,
       step = line_width * 2, 
       count = height / line_width;
       
   canvas.width = width;
   canvas.height = height;
   
   /*
    * Water ripple demo can work with any bitmap image
    * (see example here: http://media.chikuyonok.ru/ripple/)
    * But I need to draw simple artwork to bypass 1k limitation
    */
   with (ctx) {
       fillStyle = '#a2ddf8';
       fillRect(0, 0, width, height);
       
       fillStyle = '#07b';
       save();
       rotate(-0.785);
       for (var i = 0; i < count; i++) {
           fillRect(-width, i * step, width * 3, line_width);
       }
       
       restore();
   }
   
   texture = ctx.getImageData(0, 0, width, height);
   ripple = ctx.getImageData(0, 0, width, height);
   
   for (var i = 0; i < size; i++) {
       last_map[i] = ripplemap[i] = 0;
   }
   
   /**
    * Main loop
    */
   function run() {
       newframe();
       ctx.putImageData(ripple, 0, 0);
   }
   
   /**
    * Disturb water at specified point
    */
   function disturb(dx, dy) {
       dx <<= 0;
       dy <<= 0;
       
       for (var j = dy - riprad; j < dy + riprad; j++) {
           for (var k = dx - riprad; k < dx + riprad; k++) {
               ripplemap[oldind + (j * width) + k] += 128;
           }
       }
   }
   
   /**
    * Generates new ripples
    */
   function newframe() {
       var a, b, data, cur_pixel, new_pixel, old_data;
       
       var t = oldind; oldind = newind; newind = t;
       var i = 0;
       
       // create local copies of variables to decrease
       // scope lookup time in Firefox
       var _width = width,
           _height = height,
           _ripplemap = ripplemap,
           _last_map = last_map,
           _rd = ripple.data,
           _td = texture.data,
           _half_width = half_width,
           _half_height = half_height;
       
       for (var y = 0; y < _height; y++) {
           for (var x = 0; x < _width; x++) {
               var _newind = newind + i, _mapind = oldind + i;
               data = (
                   _ripplemap[_mapind - _width] + 
                   _ripplemap[_mapind + _width] + 
                   _ripplemap[_mapind - 1] + 
                   _ripplemap[_mapind + 1]) >> 1;
                   
               data -= _ripplemap[_newind];
               data -= data >> 5;
               
               _ripplemap[_newind] = data;
               //where data=0 then still, where data>0 then wave
               data = 1024 - data;
               
               old_data = _last_map[i];
               _last_map[i] = data;
               
               if (old_data != data) {
                   //offsets
                   a = (((x - _half_width) * data / 1024) << 0) + _half_width;
                   b = (((y - _half_height) * data / 1024) << 0) + _half_height;
   
                   //bounds check
                   if (a >= _width) a = _width - 1;
                   if (a < 0) a = 0;
                   if (b >= _height) b = _height - 1;
                   if (b < 0) b = 0;
   
                   new_pixel = (a + (b * _width)) * 4;
                   cur_pixel = i * 4;
                   
                   _rd[cur_pixel] = _td[new_pixel];
                   _rd[cur_pixel + 1] = _td[new_pixel + 1];
                   _rd[cur_pixel + 2] = _td[new_pixel + 2];
               }
               
               ++i;
           }
       }
   }
   
   canvas.onmousemove = function(/* Event */ evt) {
       disturb(evt.offsetX || evt.layerX, evt.offsetY || evt.layerY);
   };
   
   setInterval(run, delay);
   
   // generate random ripples
   var rnd = Math.random;
   setInterval(function() {
       disturb(rnd() * width, rnd() * height);
   }, 700);
   

})();