Pixel art updated!

by sonone, May 4, 2021, 12:13 PM

I created a code that works to create pixel drawings with ease:
void drawPenArray(pen[][] pixel = {{red}}) {
    for (int i = 0; i < pixel.length; ++i) {
        for (int j = 0; j < pixel[i].length; ++j) {
            fill(shift(j,-i)*unitsquare,pixel[i][j]);
        }
    }
}
 
void draw_pixel_string(int height, int width, string px...pen[] colors) { // converts a string into a pixel drawing with specified demensions and color palette
    string letters = "abcdefghijklmnopqrstuvwxyz-";
    defaultpen(invisible);
 
    int h = 0;
    int w = 0;
 
    pen[][] layout = new pen[height][width];
    for (int i = 0; i < layout.length; ++i) {
        for (int j = 0; j < layout[i].length; ++j) {
            layout[i][j] = invisible;
        }
    }
 
    for (int i = 0; i < length(px); ++i) {
        int key = find(letters, substr(px,i,1));
        if (key >= 0 && key < 26) {
            layout[h][w] = colors[key];
            ++w;
        }
        else if (key == 26) {
            layout[h][w] = invisible;
            ++w;
        }
        else {
            ++h;
            w = 0;
        }
    }
 
    drawPenArray(layout);
}

How to use
Simply type
draw_pixel_string(<h>,<w>,<code>,<colors>);

after the source code. You must replace <h> and <w> with the height and width of you picture in mind. When you fill in <colors>, the first color will be assigned to a, the second b, and etc, until z. you cannot have more than 26 colors, The formatting for the string <code> is thus:When you type a letter, you will get the corresponding color
A dash (-) creates an invisible pixel
A any other character (preferably a space or new line) breaks the row you are in and takes you into the next


Examples

chess board
[asy]
void drawPenArray(pen[][] pixel = {{red}}) {
	for (int i = 0; i < pixel.length; ++i) {
		for (int j = 0; j < pixel[i].length; ++j) {
			fill(shift(j,-i)*unitsquare,pixel[i][j]);
		}
	}
}

void draw_pixel_string(int height, int width, string px...pen[] colors) { // converts a string into a pixel drawing with specified demensions and color palette
    string letters = "abcdefghijklmnopqrstuvwxyz-";
	defaultpen(invisible);
    
    int h = 0;
    int w = 0;
    
    pen[][] layout = new pen[height][width];
    for (int i = 0; i < layout.length; ++i) {
    	for (int j = 0; j < layout[i].length; ++j) {
        	layout[i][j] = invisible;
        }
    }
    
    for (int i = 0; i < length(px); ++i) {
    	int key = find(letters, substr(px,i,1));
    	if (key >= 0 && key < 26) {
            layout[h][w] = colors[key];
            ++w;
        }
        else if (key == 26) {
        	layout[h][w] = invisible;
            ++w;
        }
        else {
        	++h;
            w = 0;
        }
    }
    
    drawPenArray(layout);
}
draw_pixel_string(8,8,
"abababab
babababa
abababab
babababa
abababab
babababa
abababab
babababa
",black, white);[/asy]
house
[asy]
void drawPenArray(pen[][] pixel = {{red}}) {
	for (int i = 0; i < pixel.length; ++i) {
		for (int j = 0; j < pixel[i].length; ++j) {
			fill(shift(j,-i)*unitsquare,pixel[i][j]);
		}
	}
}

void draw_pixel_string(int height, int width, string px...pen[] colors) { // converts a string into a pixel drawing with specified demensions and color palette
    string letters = "abcdefghijklmnopqrstuvwxyz-";
	defaultpen(invisible);
    
    int h = 0;
    int w = 0;
    
    pen[][] layout = new pen[height][width];
    for (int i = 0; i < layout.length; ++i) {
    	for (int j = 0; j < layout[i].length; ++j) {
        	layout[i][j] = invisible;
        }
    }
    
    for (int i = 0; i < length(px); ++i) {
    	int key = find(letters, substr(px,i,1));
    	if (key >= 0 && key < 26) {
            layout[h][w] = colors[key];
            ++w;
        }
        else if (key == 26) {
        	layout[h][w] = invisible;
            ++w;
        }
        else {
        	++h;
            w = 0;
        }
    }
    
    drawPenArray(layout);
}
draw_pixel_string(10,10,
"----aa----
---aaaa---
--aaaaaa--
-aaaaaaaa-
aaaaaaaaaa
bbbbbbbbbb
bbaabbbbbb
bbaabbaabb
bbaabbaabb
bbaabbbbbb
",brown,red);[/asy]

dolphin[asy]
void drawPenArray(pen[][] pixel = {{red}}) {
	for (int i = 0; i < pixel.length; ++i) {
		for (int j = 0; j < pixel[i].length; ++j) {
			fill(shift(j,-i)*unitsquare,pixel[i][j]);
		}
	}
}

void draw_pixel_string(int height, int width, string px...pen[] colors) { // converts a string into a pixel drawing with specified demensions and color palette
    string letters = "abcdefghijklmnopqrstuvwxyz-";
	defaultpen(invisible);
    
    int h = 0;
    int w = 0;
    
    pen[][] layout = new pen[height][width];
    for (int i = 0; i < layout.length; ++i) {
    	for (int j = 0; j < layout[i].length; ++j) {
        	layout[i][j] = invisible;
        }
    }
    
    for (int i = 0; i < length(px); ++i) {
    	int key = find(letters, substr(px,i,1));
    	if (key >= 0 && key < 26) {
            layout[h][w] = colors[key];
            ++w;
        }
        else if (key == 26) {
        	layout[h][w] = invisible;
            ++w;
        }
        else {
        	++h;
            w = 0;
        }
    }
    
    drawPenArray(layout);
}
draw_pixel_string(15,15,
"--------aa-----
-------ada-----
----aaaddaa----
---addddccda---
--adbbcccccda--
-aadabccccccda-
addccccdbbccca-
-aaaaaaddabccda
----acaadaabcca
-----a--aa-acca
-----------aca-
----------aaca-
---------acca--
----------aca--
-----------a---
", black, white, deepcyan+royalblue+white, heavycyan+.1*white);
[/asy]
turtle
[asy]
//Made by sonone
void drawPenArray(pen[][] pixel = {{red}}) {
	for (int i = 0; i < pixel.length; ++i) {
		for (int j = 0; j < pixel[i].length; ++j) {
			fill(shift(j,-i)*unitsquare,pixel[i][j]);
		}
	}
}

void draw_pixel_string(int height, int width, string px...pen[] colors) { // converts a string into a pixel drawing with specified demensions and color palette
    string letters = "abcdefghijklmnopqrstuvwxyz-";
	defaultpen(invisible);
    
    int h = 0;
    int w = 0;
    
    pen[][] layout = new pen[height][width];
    for (int i = 0; i < layout.length; ++i) {
    	for (int j = 0; j < layout[i].length; ++j) {
        	layout[i][j] = invisible;
        }
    }
    
    for (int i = 0; i < length(px); ++i) {
    	int key = find(letters, substr(px,i,1));
    	if (key >= 0 && key < 26) {
            layout[h][w] = colors[key];
            ++w;
        }
        else if (key == 26) {
        	layout[h][w] = invisible;
            ++w;
        }
        else {
        	++h;
            w = 0;
        }
    }
    
    drawPenArray(layout);
}
draw_pixel_string(9,23,
"-------------aaaa-------
----------aaabbbbaaa----
---aaa--aabababbababaa--
-aaecdaabbabbbaabbbabba-
addddddabbabbabbabbabba-
-aaaaaaaaaaaabbbbaaaaaaa
-------addddaaaaaadddda-
--------adda------adda--
-------aaaaa-----aaaaa--
", black, deepgreen, white, brown, orange);
[/asy]
This post has been edited 4 times. Last edited by sonone, May 14, 2021, 11:15 PM
Reason: add rules box

Comment

11 Comments

The post below has been deleted. Click to close.
This post has been deleted. Click here to see post.
I really like the last one!

by TheFlamingoHacker, May 4, 2021, 8:25 PM

The post below has been deleted. Click to close.
This post has been deleted. Click here to see post.
That one is original (I think). It is my favorite too!

by sonone, May 4, 2021, 8:43 PM

The post below has been deleted. Click to close.
This post has been deleted. Click here to see post.
Updated code: maker friendly
I added a new parameter that lets you choose to show your current palette above the picture with corresponding letter. Updated code

Example
With palette:
[asy]
//Made by sonone
void drawPenArray(pen[][] pixel = {{red}}) {
	for (int i = 0; i < pixel.length; ++i) {
		for (int j = 0; j < pixel[i].length; ++j) {
			fill(shift(j,-i)*unitsquare,pixel[i][j]);
		}
	}
}

void draw_pixel_string(int height, int width, string px, bool palette = false...pen[] colors) { // converts a string into a pixel drawing with specified demensions and color palette
    string letters = "abcdefghijklmnopqrstuvwxyz-";
	defaultpen(black);
    
    int h = 0;
    int w = 0;
    
    pen[][] layout = new pen[height][width];
    for (int i = 0; i < layout.length; ++i) {
    	for (int j = 0; j < layout[i].length; ++j) {
        	layout[i][j] = invisible;
        }
    }
    
    for (int i = 0; i < length(px); ++i) {
    	int key = find(letters, substr(px,i,1));
    	if (key >= 0 && key < 26) {
            layout[h][w] = colors[key];
            ++w;
        }
        else if (key == 26) {
        	layout[h][w] = invisible;
            ++w;
        }
        else {
        	++h;
            w = 0;
        }
    }
    
    drawPenArray(layout);
    
    if (palette) {
    	for (int i = 0; i < colors.length; ++i) {
        	label(scale(.7)*substr(letters,i,1), (i,2),2*N+.4*E);
            filldraw(shift(i,2)*scale(.8)*unitsquare, colors[i],linewidth(.3));
        }
    }
}
draw_pixel_string(8,23,
"----aaa----------------
--aaebca---------------
-adddcca---------aa----
--aaacccaaaaaaaaacca---
-----accafffffaccca----
------acafffaaccca-----
------accaaacccca------
-------aaaaaaaaa-------
",true, black, white, yellow, orange,blue,paleyellow);
[/asy]
Without palette:[asy]
//Made by sonone
void drawPenArray(pen[][] pixel = {{red}}) {
	for (int i = 0; i < pixel.length; ++i) {
		for (int j = 0; j < pixel[i].length; ++j) {
			fill(shift(j,-i)*unitsquare,pixel[i][j]);
		}
	}
}

void draw_pixel_string(int height, int width, string px, bool palette = false...pen[] colors) { // converts a string into a pixel drawing with specified demensions and color palette
    string letters = "abcdefghijklmnopqrstuvwxyz-";
	defaultpen(black);
    
    int h = 0;
    int w = 0;
    
    pen[][] layout = new pen[height][width];
    for (int i = 0; i < layout.length; ++i) {
    	for (int j = 0; j < layout[i].length; ++j) {
        	layout[i][j] = invisible;
        }
    }
    
    for (int i = 0; i < length(px); ++i) {
    	int key = find(letters, substr(px,i,1));
    	if (key >= 0 && key < 26) {
            layout[h][w] = colors[key];
            ++w;
        }
        else if (key == 26) {
        	layout[h][w] = invisible;
            ++w;
        }
        else {
        	++h;
            w = 0;
        }
    }
    
    drawPenArray(layout);
    
    if (palette) { // optional, for making only
    	for (int i = 0; i < colors.length; ++i) {
        	label(scale(.7)*substr(letters,i,1), (i,2),2*N+.4*E);
            filldraw(shift(i,2)*scale(.8)*unitsquare, colors[i],linewidth(.3));
        }
    }
}
draw_pixel_string(8,23,
"----aaa----------------
--aaebca---------------
-adddcca---------aa----
--aaacccaaaaaaaaacca---
-----accafffffaccca----
------acafffaaccca-----
------accaaacccca------
-------aaaaaaaaa-------
",false, black, white, yellow, orange,blue,paleyellow);
[/asy]

by sonone, May 4, 2021, 11:25 PM

The post below has been deleted. Click to close.
This post has been deleted. Click here to see post.
Pretty cool! :)

by G.G.Otto, May 4, 2021, 11:32 PM

The post below has been deleted. Click to close.
This post has been deleted. Click here to see post.
Another example:[asy]
//Made by sonone
void drawPenArray(pen[][] pixel = {{red}}) {
	for (int i = 0; i < pixel.length; ++i) {
		for (int j = 0; j < pixel[i].length; ++j) {
			fill(shift(j,-i)*unitsquare,pixel[i][j]);
		}
	}
}

void draw_pixel_string(int height, int width, string px, bool palette = false...pen[] colors) { // converts a string into a pixel drawing with specified demensions and color palette
    string letters = "abcdefghijklmnopqrstuvwxyz-";
	defaultpen(black);
    
    int h = 0;
    int w = 0;
    
    pen[][] layout = new pen[height][width];
    for (int i = 0; i < layout.length; ++i) {
    	for (int j = 0; j < layout[i].length; ++j) {
        	layout[i][j] = invisible;
        }
    }
    
    for (int i = 0; i < length(px); ++i) {
    	int key = find(letters, substr(px,i,1));
    	if (key >= 0 && key < 26) {
            layout[h][w] = colors[key];
            ++w;
        }
        else if (key == 26) {
        	layout[h][w] = invisible;
            ++w;
        }
        else {
        	++h;
            w = 0;
        }
    }
    
    drawPenArray(layout);
    
    if (palette) { // optional, for making only
    	for (int i = 0; i < colors.length; ++i) {
        	label(scale(.7)*substr(letters,i,1), (i,2),2*N+.4*E);
            filldraw(shift(i,2)*scale(.8)*unitsquare, colors[i],linewidth(.3));
        }
    }
}

draw_pixel_string(7,27,
"-------a---------aaa---aaa-
------a-a--------a--a-a----
-----a---a-------a--a-a----
-----a---a---aa--aaa---aaa-
-----aaaaa--a--a-a--------a
-----a---a--a--a-a--------a
----a-----a--aa--a-----aaa-
",false, black);
[/asy]

by sonone, May 5, 2021, 12:12 PM

The post below has been deleted. Click to close.
This post has been deleted. Click here to see post.
Try making the AoPS Logo. That should be fun!

by G.G.Otto, May 5, 2021, 9:44 PM

The post below has been deleted. Click to close.
This post has been deleted. Click here to see post.
Here it is![asy]
//Made by sonone
void drawPenArray(pen[][] pixel = {{red}}) {
	for (int i = 0; i < pixel.length; ++i) {
		for (int j = 0; j < pixel[i].length; ++j) {
			fill(shift(j,-i)*unitsquare,pixel[i][j]);
		}
	}
}

void draw_pixel_string(int height, int width, string px, bool palette = false...pen[] colors) { // converts a string into a pixel drawing with specified demensions and color palette
    string letters = "abcdefghijklmnopqrstuvwxyz-";
	defaultpen(black);
    
    int h = 0;
    int w = 0;
    
    pen[][] layout = new pen[height][width];
    for (int i = 0; i < layout.length; ++i) {
    	for (int j = 0; j < layout[i].length; ++j) {
        	layout[i][j] = invisible;
        }
    }
    
    for (int i = 0; i < length(px); ++i) {
    	int key = find(letters, substr(px,i,1));
    	if (key >= 0 && key < 26) {
            layout[h][w] = colors[key];
            ++w;
        }
        else if (key == 26) {
        	layout[h][w] = invisible;
            ++w;
        }
        else {
        	++h;
            w = 0;
        }
    }
    
    drawPenArray(layout);
    
    if (palette) { // optional, for making only
    	for (int i = 0; i < colors.length; ++i) {
        	label(scale(.7)*substr(letters,i,1), (i,2),2*N+.4*E);
            filldraw(shift(i,2)*scale(.8)*unitsquare, colors[i],linewidth(.3));
        }
    }
}

pen edges = white;
pen AoPS_blue = heavycyan;
pen AoPS_black =  deepblue;
pen AoPS_grey = lightgray;

draw_pixel_string(31,31,
"--------------aaa--------------
------------aabbbaa------------
---------aaabbbbbbbaaa---------
-------aabbbaabbbaabbbaa-------
----aaabbbbbbbaaabbbbbbbaaa----
--aabbbaabbbaadacaabbbaabbbaa--
aabbbbbbbaaadddacccaaabbbbbbbaa
acaabbbaadaddddaccccacaabbbaada
acccaaadddaddddaccccacccaaaddda
accccaddddaddddaccccaccccadddda
accccaddddadddaaacccaccccadddda
accccaddddadaabbbaacaccccadddda
aacccadddaaabbbbbbbaaacccadddaa
acaacadaadacaabbbaadacaacadaada
acccaaadddacccaaadddacccaaaddda
accccaddddaccccaddddaccccadddda
accccaddddaccccaddddaccccadddda
accccaddddaccccaddddaccccadddda
aacccadddaaacccadddaaacccadddaa
acaacadaabbbaacadaabbbaacadaada
acccaaabbbbbbbaaabbbbbbbaaaddda
accccacaabbbaabbbaabbbaadadddda
accccacccaaabbbbbbbaaadddadddda
accccaccccacaabbbaadaddddadddda
aacccaccccacccaaadddaddddadddaa
--aacaccccaccccaddddaddddadaa--
----aaacccaccccaddddadddaaa----
-------aacaccccaddddadaa-------
---------aaacccadddaaa---------
------------aacadaa------------
--------------aaa--------------
",false, edges, AoPS_blue, AoPS_black, AoPS_grey);
[/asy]

by sonone, May 7, 2021, 8:14 PM

The post below has been deleted. Click to close.
This post has been deleted. Click here to see post.
Nice! :yup:

by G.G.Otto, May 7, 2021, 8:28 PM

The post below has been deleted. Click to close.
This post has been deleted. Click here to see post.
This is really awesome!!

I made a Gosper Glider Gun:
[asy]
//Made by sonone
void drawPenArray(pen[][] pixel = {{red}}) {
for (int i = 0; i < pixel.length; ++i) {
for (int j = 0; j < pixel[i].length; ++j) {
fill(shift(j,-i)*unitsquare,pixel[i][j]);
}
}
}

void draw_pixel_string(int height, int width, string px, bool palette = false...pen[] colors) { // converts a string into a pixel drawing with specified demensions and color palette
string letters = "abcdefghijklmnopqrstuvwxyz-";
defaultpen(black);

int h = 0;
int w = 0;

pen[][] layout = new pen[height][width];
for (int i = 0; i < layout.length; ++i) {
for (int j = 0; j < layout[i].length; ++j) {
layout[i][j] = invisible;
}
}

for (int i = 0; i < length(px); ++i) {
int key = find(letters, substr(px,i,1));
if (key >= 0 && key < 26) {
layout[h][w] = colors[key];
++w;
}
else if (key == 26) {
layout[h][w] = invisible;
++w;
}
else {
++h;
w = 0;
}
}

drawPenArray(layout);

if (palette) { // optional, for making only
for (int i = 0; i < colors.length; ++i) {
label(scale(.7)*substr(letters,i,1), (i,2),2*N+.4*E);
filldraw(shift(i,2)*scale(.8)*unitsquare, colors[i],linewidth(.3));
}
}
}

draw_pixel_string(11,37,
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaa
aaaaaaaaaaaaabbaaaaaabbaaaaaaaaaaabba
aaaaaaaaaaaabaaabaaaabbaaaaaaaaaaabba
abbaaaaaaaabaaaaabaaabbaaaaaaaaaaaaaa
abbaaaaaaaabaaababbaaaababaaaaaaaaaaa
aaaaaaaaaaabaaaaabaaaaaaabaaaaaaaaaaa
aaaaaaaaaaaabaaabaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaabbaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
",false, white, black);
[/asy]

by Glenstorm, May 7, 2021, 10:32 PM

The post below has been deleted. Click to close.
This post has been deleted. Click here to see post.
I edited the drawPenArray function![asy]
//Made by sonone
void drawPenArray(pen[][] pixel = {{red}}) {
	real t = 1/3;
	path a = (0,0){SE}..(t,0)..(t,-t)..(2*t,-t)..(2*t,0)..{NE}(1,0);
    path A = a--rotate(-90,(1,0))*reverse(a)--rotate(180,(.5,.5))*a--rotate(90,(0,0))*reverse(a)--cycle;
    for (int i = 0; i < pixel.length; ++i) {
        for (int j = 0; j < pixel[i].length; ++j) {
        	if ((j+i)%2 == 0) {
            	fill(shift(j,-i)*A,pixel[i][j]);
            }
            else {
            	fill(shift(j,-i)*rotate(90,(.5,.5))*A,pixel[i][j]);
            }
        }
    }
}
 
void draw_pixel_string(int height, int width, string px...pen[] colors) { // converts a string into a pixel drawing with specified demensions and color palette
    string letters = "abcdefghijklmnopqrstuvwxyz-";
    defaultpen(invisible);
 
    int h = 0;
    int w = 0;
 
    pen[][] layout = new pen[height][width];
    for (int i = 0; i < layout.length; ++i) {
        for (int j = 0; j < layout[i].length; ++j) {
            layout[i][j] = invisible;
        }
    }
 
    for (int i = 0; i < length(px); ++i) {
        int key = find(letters, substr(px,i,1));
        if (key >= 0 && key < 26) {
            layout[h][w] = colors[key];
            ++w;
        }
        else if (key == 26) {
            layout[h][w] = invisible;
            ++w;
        }
        else {
            ++h;
            w = 0;
        }
    }
 
    drawPenArray(layout);
}
draw_pixel_string(9,23,
"-------------aaaa-------
----------aaabbbbaaa----
---aaa--aabababbababaa--
-aaecdaabbabbbaabbbabba-
addddddabbabbabbabbabba-
-aaaaaaaaaaaabbbbaaaaaaa
-------addddaaaaaadddda-
--------adda------adda--
-------aaaaa-----aaaaa--
", black, deepgreen, white, brown, orange);
[/asy]
This post has been edited 3 times. Last edited by sonone, May 11, 2021, 9:50 PM

by sonone, May 11, 2021, 9:46 PM

The post below has been deleted. Click to close.
This post has been deleted. Click here to see post.
I really like the dolphin! :)

by ellayang2015, Oct 15, 2024, 5:02 AM

Old material is mostly Asymptote, new material is calculator programming

avatar

sonone
Archives
+ April 2023
+ August 2022
+ April 2021
+ August 2020
Shouts
Submit
  • I still exist as well.

    by G.G.Otto, Aug 11, 2023, 2:44 AM

  • hello I'm still here lol

    by player01, Aug 6, 2022, 6:24 PM

  • [REVIVAL] I will start posting more calculator relating posts very soon. Even though school has been busy, I have been programming my calculators a decent amount, so I have a lot to share...

    by sonone, Feb 18, 2022, 10:29 PM

  • wow its been like 2.5 years since geo class

    by pieMax2713, Feb 4, 2022, 8:38 PM

  • @violin21, I've been very busy with school lately and haven't been able to add another lesson. I will when i get a free moment

    by sonone, Aug 19, 2021, 12:45 AM

  • ORZ CODER

    by samrocksnature, Aug 9, 2021, 9:57 PM

  • Could you make more Asymptote lessons on your "How to do Asymptote" blog?

    by violin21, Aug 9, 2021, 7:26 PM

  • You can take it, just C&P the CSS into your CSS area

    by sonone, Apr 17, 2021, 10:08 PM

  • how can we take the CSS if we have permission to not take it?

    by GoogleNebula, Apr 17, 2021, 5:22 PM

  • That is awesome!

    by sonone, Apr 15, 2021, 10:09 PM

  • I modified your dodecahedron and got:
    [asy]
    import three;
    import solids;
    size(300);
    currentprojection=orthographic(0,1.3,1.2);
    light(0,5,10);

    real phi=(sqrt(6)+1)/3;
    real g=(phi-1)/2;
    real s=1/2;
    real a=sqrt(1-phi*phi/4-g*g)+phi/2;

    triple[] d;
    d[0]=(phi

    by Andrew2019, Mar 26, 2021, 12:15 AM

  • Not too many, just changing the color here and there. I really like your CSS!

    by sonone, Feb 2, 2021, 10:35 AM

  • Nice!

    I see you're making changes to the CSS. :)

    by G.G.Otto, Feb 1, 2021, 9:26 PM

  • I'm learning Java now!

    by sonone, Feb 1, 2021, 5:56 PM

  • And I took part of it from CaptainFlint and then added a ton of modifications. ;)

    by G.G.Otto, Dec 1, 2020, 8:56 AM

98 shouts
Tags
About Owner
  • Posts: 2106
  • Joined: Aug 20, 2016
Blog Stats
  • Blog created: Mar 28, 2020
  • Total entries: 61
  • Total visits: 4966
  • Total comments: 146
Search Blog
a