Reddit Place Kekistani Flag

Kekistani Flag

// ==UserScript==
// @name         Reddit Place Kekistani Flag
// @namespace    http://tampermonkey.net/
// @version      1.5
// @description  Kekistani Flag
// @author       Jim Russells
// @match        https://www.reddit.com/place?webview=true
// @match        http*://www.reddit.com/place?webview=true
// @match        https://www.reddit.com/r/place/*
// @match        http*://www.reddit.com/r/place*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    var images = [
        // ordered by priority
        // use the debug flag to test your images!
        {
            offsetX: 207,
            offsetY: 909,
            text: [
                "ccccccccccccccccccccccccc@.@....@@.@cccccccccccccccccccccccccccccccccccccccccccc",
                "ccccccccccccccccccccccccc@.@....@@.@cccccccccccccccccccccccccccccccccccccccccccc",
                "ccc...cccccc...cccccccccc@.@....@@.@cccccccccccccccccccccccccccccccccccccccccccc",
                "cc.@@@.cccc.@@@.ccccccccc@.@....@@.@cccccccccccccccccccccccccccccccccccccccccccc",
                "ccc.@@@.cc.@@@.cccccccccc@.@....@@.@cccccccccccccccccccccccccccccccccccccccccccc",
                "cc.@@@@.cc.@@@@.ccccccccc@.@....@@.@cccccccccccccccccccccccccccccccccccccccccccc",
                "ccc....cccc....cccccccccc@.@....@@.@cccccccccccccccccccccccccccccccccccccccccccc",
                "ccccccccccccccccccccccccc@.@....@@.@cccccccccccccccccccccccccccccccccccccccccccc",
                "ccccccccccccccccccccccccc@.@....@@.@cccccccccccccccccccccccccccccccccccccccccccc",
                "ccccc..cccc..cccccccccccc@@@@@@@@@@@cccccccccccccccccccccccccccccccccccccccccccc",
                "cccc.@@.cc.@@.ccccccccc@@...........@ccccccccccccccccccccccccccccccccccccccccccc",
                "ccc.@@@.cc.@@@.ccccccc@.....@@@@@....@@ccccccccccccccccccccccccccccccccccccccccc",
                "ccc.@@@.cc.@@@.ccccc@@...@@.......@@...@cccccccccccccccccccccccccccccccccccccccc",
                "ccc.@.@.cc.@.@.cccc@@..@@..@@@@@@@..@@..@ccccccccccccccccccccccccccccccccccccccc",
                "cccc.c.cccc.c.cccc@@..@..@@@@@@@@@@@..@..@cccccccccccccccccccccccccccccccccccccc",
                "cccccccccccccccccc@..@.@@@@@@@@@@@@@@@.@..@ccccccccccccccccccccccccccccccccccccc",
                "ccccccccccccccccc@..@.@@@@@@@@@@@@@@@@@.@..@cccccccccccccccccccccccccccccccccccc",
                "cccccccccccccccc@..@.@@@@@@.@@@@@.@@@@@@.@.@cccccccccccccccccccccccccccccccccccc",
                "cccccccccccccccc@..@.@@@@@@@..@..@@@@@@@.@..@ccccccccccccccccccccccccccccccccccc",
                "cccccccccccccccc..@.@@@@@@@@@...@@@@@@@@@.@.@ccccccccccccccccccccccccccccccccccc",
                "@@@@@@@@@@@@@@@@..@.@@@@@@@@@@.@@@@@@@@@@.@..@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
                "...............@...@@@@@@@@.......@@@@@@@@...@..................................",
                "@@@@@@@@@@@@@@@@...@@.@@@.@@@@@@@@@.@@@.@@...@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
                "@@@@@@@@@@@@@@@..@.@@@.@@.@.@@.@@.@.@@.@@@.@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
                "..............@..@.@@@..@.@.@@.@@.@.@..@@@.@....................................",
                "..............@..@.@@@@...@.@@.@@.@...@@@@.@....................................",
                "..............@..@.@@@@...@.@@.@@.@...@@@@.@....................................",
                "..............@..@.@@@..@.@.@@.@@.@.@..@@@.@....................................",
                "@@@@@@@@@@@@@@@..@.@@@.@@.@.@@.@@.@.@@.@@@.@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
                "@@@@@@@@@@@@@@@....@@.@@@.@@@@@@@@@.@@@.@@...@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
                "...............@...@@@@@@@@.......@@@@@@@@...@..................................",
                "@@@@@@@@@@@@@@@@..@.@@@@@@@@@@.@@@@@@@@@@.@..@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
                "cccccccccccccccc..@.@@@@@@@@@...@@@@@@@@@.@.@ccccccccccccccccccccccccccccccccccc",
                "cccccccccccccccc@..@.@@@@@@@..@..@@@@@@@.@..@ccccccccccccccccccccccccccccccccccc",
                "cccccccccccccccc@..@.@@@@@@.@@@@@.@@@@@@.@.@cccccccccccccccccccccccccccccccccccc",
                "ccccccccccccccccc@..@.@@@@@@@@@@@@@@@@@.@..@cccccccccccccccccccccccccccccccccccc",
                "cccccccccccccccccc@..@.@@@@@@@@@@@@@@@.@..@ccccccccccccccccccccccccccccccccccccc",
                "cccccccccccccccccc@@..@..@@@@@@@@@@@..@..@cccccccccccccccccccccccccccccccccccccc",
                "ccccccccccccccccccc@...@@..@@@@@@@..@@..@@cccccccccccccccccccccccccccccccccccccc",
                "cccccccccccccccccccc@@...@@.......@@...@cccccccccccccccccccccccccccccccccccccccc",
                "cccccccccccccccccccccc@.....@@@@@.....@ccccccccccccccccccccccccccccccccccccccccc",
                "ccccccccccccccccccccccc@@...........@@cccccccccccccccccccccccccccccccccccccccccc",
                "ccccccccccccccccccccccccc@@@@@@@@@@@cccccccccccccccccccccccccccccccccccccccccccc",
                "ccccccccccccccccccccccccc@.@....@@.@cccccccccccccccccccccccccccccccccccccccccccc",
                "ccccccccccccccccccccccccc@.@....@@.@cccccccccccccccccccccccccccccccccccccccccccc",
                "ccccccccccccccccccccccccc@.@....@@.@cccccccccccccccccccccccccccccccccccccccccccc",
                "ccccccccccccccccccccccccc@.@....@@.@cccccccccccccccccccccccccccccccccccccccccccc",
                "ccccccccccccccccccccccccc@.@....@@.@cccccccccccccccccccccccccccccccccccccccccccc",
                "ccccccccccccccccccccccccc@.@....@@.@cccccccccccccccccccccccccccccccccccccccccccc",
                "ccccccccccccccccccccccccc@.@....@@.@cccccccccccccccccccccccccccccccccccccccccccc",
                "ccccccccccccccccccccccccc@.@....@@.@cccccccccccccccccccccccccccccccccccccccccccc",
                "ccccccccccccccccccccccccc@.@....@@.@cccccccccccccccccccccccccccccccccccccccccccc"
            ],
        },
		{
            offsetX: 0,
            offsetY: 413,
            text: [
                "###########################################",
                "###########################################",
                "###########################################",
                "###################@@@@@###################",
                "################@@@@@.@@@@#################",
                "###############@@@@@...@@@@@###############",
                "##############@@@@@...@@@@@@@##############",
                "#############@@@@@...@@@@@@@@##############",
                "#############@@@@....@@@..@@@@#############",
                "############@@@@....@@@....@@@@############",
                "############@@@@@....@......@@@############",
                "############@@.@@@...........@@############",
                "############@...@@@.....@@....@############",
                "############@....@@.....@@@...@############",
                "############@@...........@@@.@@############",
                "############@@@......@....@@@@@############",
                "############@@@@....@@@....@@@#############",
                "#############@@@@..@@@....@@@@#############",
                "#############@@@@@@@@....@@@@##############",
                "##############@@@@@@....@@@@@##############",
                "###############@@@@@...@@@@@###############",
                "#################@@@@.@@@@#################",
                "###################@@@@@###################",
                "###########################################",
                "###########################################",
                "###########################################"
            ],
        },
    ];

    var colors = {
        "@": 0,  // white
        ".": 3,  // black
        "#": 5,  // red		
        "c": 10,  // green
        " ": -1, // ignore
    };

    for (var img_idx = 0; img_idx < images.length; img_idx++) {
        var image = images[img_idx];
        image.image_data = [];
        for (var relY = 0; relY < image.text.length; relY++) {
            var row = image.text[relY];
            for (var relX = 0; relX < row.length; relX++) {
                var color = colors[row[relX]] || -1;
                if (color < -1) {
                    continue;
                }
                var absX = image.offsetX + relX;
                var absY = image.offsetY + relY;
                image.image_data.push(absX);
                image.image_data.push(absY);
                image.image_data.push(color);
            }
        }
    }
    var default_panX = 100;
    var default_panY = -500;

    var p = r.place;
    p.panX = default_panX;
    p.panY = default_panY;

    r.placeModule("placePaintBot", function(loader) {
        var c = loader("canvasse");
        var r = loader("client");

        setInterval(function() {
            var tl = p.getCooldownTimeRemaining();

            if (2000 < tl && tl < 3000) {location.reload();}

            var debug = 0; //tl > 3000;
            if (!debug && tl > 200) {return;}
            for (var img_idx = 0; img_idx < images.length; img_idx++) {
                var image = images[img_idx];

                for (var i = 0; i < image.image_data.length; i += 3) {
                    var j = Math.floor((Math.random() * image.image_data.length) / 3) * 3;
                    var x = image.image_data[j + 0];
                    var y = image.image_data[j + 1];
                    var color = image.image_data[j + 2];
                    var currentColor = p.state[c.getIndexFromCoords(x, y)];

                    if (currentColor != color) {
                        if (debug) {
                            p.state[c.getIndexFromCoords(x, y)] = color;
                            c.setBufferState(c.getIndexFromCoords(x, y), r.getPaletteColorABGR(color));
                        } else {
                            console.log("set color for", x, y, "old", currentColor, "new", color);
                            p.setColor(color);
                            p.drawTile(x, y);
                        }
                        return;
                    }
                }
                console.log("noop");
            }
        }, 200);
    });
})();