Py Master

@PYer (2042)
answered
39
How Did YOU Find Repl.it
Repl.it is one of many online coding platforms. How did you find this one? Did you do a google search? A friend? Why did you choose Repl.it over the many others that exist out there. Currently repl.it is one of the most popular. I will say that if i google's filtering and searching system were different, i wouldn't have found it. I found Repl.it with `online python3`. Comment below your own story! ### Reasons so far: + Coding on multiple computers + Learning at school + Looking for better online compilers/interpreters + Searching on google for online <coding language> + Friends + Coding in school without downloading interpreters/compilers + Making games that wouldn't work on normal compilers/interpreters + Entering competitions that require repl.it + Storing code online. To show other people, or other uses It's really cool to see how other people found repl.it. If I had been told to list as many reasons as I could, I would have gone with Bullet 1, Bullet 2, Bullet 3, and maybe Bullet 5.
219
posted to Ask by PYer (2042) 3 months ago
11
BOOKMARKLETS!
# What is a bookmarklet? A bookmarklet is similar to an extension, but is used by clicking a bookmark. According to wikipedia: > A bookmarklet is a bookmark stored in a web browser that contains JavaScript commands that add new features to the browser. Bookmarklets are unobtrusive JavaScripts stored as the URL of a bookmark in a web browser or as a hyperlink on a web page. Bookmarklets are usually JavaScript programs. Regardless of whether bookmarklet utilities are stored as bookmarks or hyperlinks, they add one-click functions to a browser or web page. When clicked, a bookmarklet performs one of a wide variety of operations, such as running a search query or extracting data from a table. For example, clicking on a bookmarklet after selecting text on a webpage could run an Internet search on the selected text and display a search engine results page. # Create a bookmarklet Creating a bookmarklet is easy. (If you do know how to create a bookmark. If not read [Creating A Bookmark](https://www.computerhope.com/issues/ch000858.htm) ) Let's create a simple example: First, create a bookmark. As for the title of the bookmark, name it “Hello World”. Instead of keeping the url of the page as the bookmark type `javascript:alert(‘Hello World!’)`. There! Click save or whatever it is in your search engine. And click the bookmark. You should have an alert message saying “Hello World!” appear! To run js in a bookmark, you need to have the `javascript:` prefix before it. You can only type one line so make sure to use your semicolons! In addition, you **can not use double quotes**. The search engine saves the bookmark in code that looks something like this: ```html <a href="javascript:alert(‘Hello World!’)">Hello World</a> ``` If you use double quotes it looks like: ```html <a href="javascript:alert(“Hello World!”)”>Hello World</a> ``` And causes an error. If you have multiple lines, create an anonymous function: `javascript:(function(){ var x=prompt(‘Hi say something:’); alert(‘You said: ’ + x); })()` Notice there are NO double quotes. Let's go over some examples: Google Search: `javascript:(function(){window.open('https://www.google.com/search?q='+prompt('Google Search:', '').split(' ').join('+'), '', 'width=800,height=500,left=10,top=10,scrollbar=yes');})();` The above example opens up a new window with a search query of your input! Feel free to copy any of these or the ones listed below. Calculator: `javascript:(function(){var evl,expr=prompt('Formula...','');with(Math)try{evl=parseFloat(eval(expr));if(isNaN(evl)){throw Error('Not a number!');}prompt('Result of '+expr+':',evl)}catch(evl){alert(evl);}})();` @JSer ‘s Rolling Sky: (Thanks for creating such an awesome game!) `javascript:window.open('https://Rolling-Sky--jser.repl.co', '', 'top=15,left=15,scrollbar=yes,width=500,height=600')` # Community Creations @Zavexeon **Faces Generator** > uhm... it works.... and is also useless... ```js javascript: const faces = ['OwO ', 'UwU', 'TwT', '>w<', '^w^']; let face = faces[Math.floor(Math.random()*faces.length)]; document.write('<body style=\'background-color: black;\'></body><title>' + face + '</title><p style=\'text-align: center; font-size: 500px; font-family: Arial; color: white;\'>' + face + '</p>'); ``` ** Thank you for reading! Please upvote and comment your own bookmarklets, to be added to the community creations section! I hope I get a content creator tag for this 😀 **
27
posted to Learn by PYer (2042) 2 months ago
Python
Python
29
Buddy
This is something I have been periodically working on for a long time. If I get upvotes I will add a cmds.txt with all recognizable input, and make it better. Thanks!
19
posted to Share by PYer (2042) 5 months ago
Python
Python
34
Timer!
Open in full screen: [Timer](https://timer.pyer.repl.run/) I coded this timer. You can type in the amount of minutes, and the amount of seconds you want it to last. It prints the numbers in ASCII art, and the color is randomly generated to make it more appealing. "TIMES UP!!!" is displayed when it is over. amasad told me about bell codes and now it makes a beeping sound! Thank you, and please upvote if you like this! Thanks again! ![image](https://storage.googleapis.com/replit/images/1545184996593_5f9bb50bc710d9853e813bf4b8cb1ea6.pn)
28
posted to Share by PYer (2042) 6 months ago
Python
Python
17
Aliens Adventure Game
I created this adventure game. I read a book a few years ago with an example like this. I haven't found the game example since, so this is totally based off of memory. It is pretty simple, and uses a dictionary and classes to run. I may create a tutorial for creating a game like this. Thank you and please upvote! > I hope you like it! > Comment below if you win!
8
posted to Share by PYer (2042) 4 months ago
5
Creating A Text Based Adventure Game
# Creating A Text Based Adventure Game This is based on a game I created ( [Aliens Adventure Game](https://repl.it/talk/share/Aliens-Adventure-Game/10813) ). # Knowledge Required Before starting this tutorial, make sure you have a basic understanding of the following. + Basic classes + Basic inheritance + Input and Printing (Obviously) + Dictionaries + While loops # Introduction This game's code is mainly based on classes. Each room is a simple class, with a `play` function that plays that room. Each `play` function returns a string, such as `"corridor"` or `"bomb hold"`. The rooms will all be stored in a dict titled `engine`, and with each room held and accesed from there. # Creating The Game Now it is time to actually create the game. The file for the code, if you want to copy and paste it or play around with it can be found at @Pyer [Aliens Adventure Game Repl](https://repl.it/@PYer/Aliens-Adventure-Game) Create a python repl and open `main.py` ###### Creating the `Room` class In the file `main.py` type in this: ```py class Room(): def __init__(self): pass def play(self): print('This room hasnt been created yet.') ``` There we go. If you meet the knowledge requirments of above, you should understand this. Basically a class called `Room()` is being created, and does nothing when it is created (initialized). The `play` function does nothing yet. ##### Creating rooms In the file `main.py` again create a room This example here is from my aliens adventure game: ```py from replit import clear as c import sys # Code before here class Intro(Room): def play(self): c() print('Welcome To Aliens Adventure Game!\nObjective: \n\tFind the bomb to be planted on Earth, \n\tPlace it on the bridge, and escape\n\tbefore the spaceship blows up.') if not input('Ready? [y/n]: ') == 'y': sys.exit() c() print('You are onboard an alien spaceship. You have managed to reach the main room, without spotting any aliens. Hopefully, this streak of good luck continues until you escape the ship. But as any good space invader knows, that is never the case. You look around the room deciding what to do when an alien pops out of a corridor. You put a hand on your blaster.\nYour options are:\n\t1. Shoot\n\t2. Tell A Joke\n\t3. Run') o = input('Move? [1, 2, 3]: ') c() if o == '1': print('You pull out your blaster and shoot the alien. Apparently the alien has enabled a force field as the bullet rebounds off of him. He is angered at your threating gesture,pulls out his own blaster, and shoots you in the head. You have determined the fate of thousands of inoccent people on earth.') return 'game over' elif o == '2': print('You remeber your old school training on the alien language. You say the first joke that pops in your mind:\n\tAyay anmay andyay ishay orsehay alkedway \n\tintoyay ayay arbay. Ouyay ouldway \n\tavehay oughtthay eythay ouldway avehay \n\tuckedday.\nThe alien doubles over laughing and you quickly rush past him and through the door into the corridor.') return 'corridor' elif o == '3': print('You quickly scan your surroundings, for an exit. You turn around and attempt to exit the way you came in, but the aline quickly pulss out his blaster and shoots your moving shape. You have determined the fate of thousands of inoccent people on earth.') return 'game over' ``` There we go! Continue creating rooms. The basic template is like this: ```py class AnotherRoom(Room): def play(): # Text return 'next room' ``` ##### Creating the engine This is based on a `while True` loop. First, define a dict called engine. In my game this looks like: ```py engine = { 'game over': Game_Over(), 'intro': Intro(), 'corridor': Corridor(), 'bomb hold': Bomb_Hold(), 'bridge': Bridge(), 'escape room': EscapeRoom(), 'win': Win() } ``` The basic template is this: ```py engine = {'mainroom': AnotherRoom() } ``` Now we have to define the first room like this: ```py room = engine['intro'].play() ``` Then add this `while True`: ```py while True: room = engine[room] room = room.play() ``` There we go! Now you can add other rooms. A recommendation would be to add a Win() and Lose() class, so that the user goes to those rooms when they die or win. Here is an example repl. https://repl.it/@PYer/Aliens-Adventure-Game
20
posted to Learn by PYer (2042) 3 months ago
HTML, CSS, JS
HTML, CSS, JS
22
Fullern Tutorials: Webscraping
View the website at https://webscraping-tutorial--fullern000.repl.co/. Thank you and please upvote!
16
posted to Share by PYer (2042) 8 months ago
Python
Python
11
Chatbot
This is a chatbot I am working on for the AI competition. I would gladly accept any feedback. Thank you, and have fun! `PYer`
7
posted to Share by PYer (2042) 5 months ago
Python
Python
13
Stick Man Animation
Full Screen: [Stick Man Animation](https://stick-man.pyer.repl.run/) Hope you like this stick man animation. Feel free to fork this repl and create your own animations. Share them below if you want. Thanks, and please upvote!
8
posted to Share by PYer (2042) 6 months ago
Python
Python
22
Learn To Code In Python
Teaches you how to code in python. By `PYer` ![image](https://storage.googleapis.com/replit/images/1539906614890_d3ab3e7d0acf7cc1d56b6c218bd6d344.pn) ![image](https://storage.googleapis.com/replit/images/1539906646554_941ec29791cd36653b2612f8368ab99e.pn) # What is python? Python is a very popular coding language. Little people use it for serious projects, but it is still useful to learn. It was created in 1991 by `Guido van Rossum`. Look at a few uses of python: + Desktop Applications + Web Applications + Complex Scientific Equations Let's look at a few reasons why it is useful: + Readable/Understandable Code + Compatible with other systems/platforms + Millions of useful modules These are just a few, you can find a bunch more by researching it. # Know This Before We Start What we will be teaching you is specifically `python 3`. This is the most updated version, but the version 2 is still widely used. Here we will be using replit, but there are multiple text editors you can find. + Emacs + Komodo Edit + Vim + Sublime Text + More at [Python Text Editors](https://realpython.com/python-ides-code-editors-guide/) # Python Syntax Python syntax was made for readability, and easy editing. For example, the python language uses a `:` and indented code, while javascript and others generally use `{}` and indented code. # First Program Lets create a [python 3](https://repl.it/languages/python3) repl, and call it *Hello World*. Now you have a blank file called *main.py*. Now let us write our first line of code: *helloworld.py* ```python print('Hello world!') ``` > Brian Kernighan actually wrote the first "Hello, World!" program as part of the documentation for the BCPL programming language developed by Martin Richards. Now, press the run button, which ~~obviously~~ runs the code. If you are not using replit, this will not work. You should research how to run a file with your text editor. # Command Line If you look to your left at the console where hello world was just printed, you can see a `>`, `>>>`, or `$` depending on what you are using. After the prompt, try typing a line of code. ``` Python 3.6.1 (default, Jun 21 2017, 18:48:35) [GCC 4.9.2] on linux Type "help", "copyright", "credits" or "license" for more information. > print('Testing command line') Testing command line > print('Are you sure this works?') Are you sure this works? > ``` The command line allows you to execute single lines of code at a time. It is often used when trying out a new function or method in the language. # New: Comments! Another cool thing that you can generally do with all languages, are comments. In python, a comment starts with a `#`. The computer ignores all text starting after the `#`. *shortcom.py* ```py # Write some comments! ``` If you have a huge comment, do **not** comment all the 350 lines, just put `'''` before it, and `'''` at the end. Technically, this is not a comment but a string, but the computer still ignores it, so we will use it. *longcom.py* ```py ''' Dear PYer, I am confused about how you said you could use triple quotes to make SUPER LONG COMMENTS ! I am wondering if this is true, and if so, I am wondering if this is correct. Could you help me with this? Thanks, Random guy who used your tutorial. ''' print('Testing') ``` # New: Variables! Unlike many other languages, there is no `var`, `let`, or `const` to declare a variable in python. You simply go `name = 'value'`. *vars1.py* ```py x = 5 y = 7 z = x*y # 35 print(z) # => 35 ``` Remember, there is a difference between integers and strings. *Remember: String = `""`.* To convert between these two, you can put an int in a `str()` function, and a string in a `int()` function. There is also a less used one, called a float. Mainly, these are integers with decimals. Change them using the `float()` command. *vars2.py* ```py x = 5 x = str(x) b = '5' b = int(b) print('x = ', x, '; b = ', str(b), ';') # => x = 5; b = 5; ``` Instead of using the `,` in the print function, you can put a `+` to combine the variables and string. # Operators There are many operators in python: + `+` + `-` + `/` + `*` Now, we can look at a few more complicated ones: + `%` + `//` + `**` + `+=` + `-=` + `/=` + `*=` *simpleops.py* ```py x = 4 a = x + 1 a = x - 1 a = x * 2 a = x / 2 ``` You should already know everything shown above, as it is similar to other languages. If you continue down, you will see more complicated ones. *complexop.py* ```py a += 1 a -= 1 a *= 2 a /= 2 ``` The ones above are to edit the current value of the variable. Sorry to JS users, as there is no `i++;` or anything. > Fun Fact: > The python language was named after Monty Python. If you really want to know about the others, view [Py Operators](https://www.tutorialspoint.com/python/python_basic_operators.htm) # More Things With Strings Like the title? Anyways, a `'` and a `"` both indicate a string, but **do not combine them!** *quotes.py* ```py x = 'hello' # Good x = "hello" # Good x = "hello' # ERRORRR!!! ``` *slicing.py* ### String Slicing You can look at only certain parts of the string by slicing it, using `[num:num]`. The first number stands for how far in you go from the front, and the second stands for how far in you go from the back. ```py x = 'Hello everybody!' x[1] # 'H' x[-1] # '!' x[5] # ' ' x[1:] # 'ello everybody!' x[:-1] # 'Hello everybod' x[2:-3] # 'llo everyb' ``` ### Methods and Functions Here is a list of functions/methods we will go over: + `.strip()` + `len()` + `.lower()` + `.upper()` + `.replace()` + `.split()` I will make you try these out yourself. See if you can figure out how they work. *strings.py* ```py x = " Testing, testing, testing, testing " print(x.strip()) print(len(x)) print(x.lower()) print(x.upper()) print(x.replace('test', 'runn')) print(x.split(',')) ``` Good luck, see you when you come back! # New: Input() Input is a function that gathers input entered from the user in the command line. It takes one optional parameter, which is the users prompt. *inp.py* ```py print('Type something: ') x = input() print('Here is what you said: ', x) ``` If you wanted to make it smaller, and look neater to the user, you could do... *inp2.py* ```py print('Here is what you said: ', input('Type something: ')) ``` Running: *inp.py* ``` Type something: Hello World Here is what you said: Hello World ``` *inp2.py* ``` Type something: Hello World Here is what you said: Hello World ``` # New: Importing Modules Python has created a lot of functions that are located in other .py files. You need to import these **modules** to gain access to the,, You may wonder why python did this. The purpose of separate modules is to make python faster. Instead of storing millions and millions of functions, , it only needs a few basic ones. To import a module, you must write `input <modulename>`. Do not add the .py extension to the file name. In this example , we will be using a python created module named random. *module.py* ```python import random ``` Now, I have access to all functions in the random.py file. To access a specific function in the module, you would do `<module>.<function>`. For example: *module2.py* ```python import random print(random.randint(3,5)) # Prints a random number between 3 and 5 ``` > Pro Tip: > Do `from random import randint` to not have to do `random.randint()`, just `randint()` > To import all functions from a module, you could do `from random import *` # New: Loops! Loops allow you to repeat code over and over again. This is useful if you want to print Hi with a delay of one second 100 times. #### `for` Loop The for loop goes through a list of variables, making a seperate variable equal one of the list every time. Let's say we wanted to create the example above. *loop.py* ```python from time import sleep for i in range(100): print('Hello') sleep(.3) ``` This will print Hello with a .3 second delay 100 times. This is just one way to use it, but it is usually used like this: *loop2.py* ```python import time for number in range(100): print(number) time.sleep(.1) ``` ![image](https://storage.googleapis.com/replit/images/1539649280875_37d22e6d49e8e8fbc453631def345387.pn) #### `while` Loop The while loop runs the code while something stays true. You would put `while <expression>`. Every time the loop runs, it evaluates if the expression is True. It it is, it runs the code, if not it continues outside of the loop. For example: *while.py* ```python while True: # Runs forever print('Hello World!') ``` Or you could do: *while2.py* ```python import random position = '<placeholder>' while position != 1: # will run at least once position = random.randint(1, 10) print(position) ``` # New: `if` Statement The if statement allows you to check if something is True. If so, it runs the code, if not, it continues on. It is kind of like a while loop, but it executes __only once__. An if statement is written: *if.py* ```python import random num = random.randint(1, 10) if num == 3: print('num is 3. Hooray!!!') if num > 5: print('Num is greater than 5') if num == 12: print('Num is 12, which means that there is a problem with the python language, see if you can figure it out. Extra credit if you can figure it out!') ``` Now, you may think that it would be better if you could make it print only one message. Not as many that are True. You can do that with an `elif` statement: *elif.py* ```python import random num = random.randint(1, 10) if num == 3: print('Num is three, this is the only msg you will see.') elif num > 2: print('Num is not three, but is greater than 1') ``` Now, you may wonder how to run code if none work. Well, there is a simple statement called `else:` *else.py* ```python import random num = random.randint(1, 10) if num == 3: print('Num is three, this is the only msg you will see.') elif num > 2: print('Num is not three, but is greater than 1') else: print('No category') ``` # New: Functions (`def`) So far, you have only seen how to use functions other people have made. Let use the example that you want to print the a random number between 1 and 9, and print different text every time. It is quite tiring to type: Characters: 389 *nofunc.py* ```python import random print(random.randint(1, 9)) print('Wow that was interesting.') print(random.randint(1, 9)) print('Look at the number above ^') print(random.randint(1, 9)) print('All of these have been interesting numbers.') print(random.randint(1, 9)) print("these random.randint's are getting annoying to type") print(random.randint(1, 9)) print('Hi') print(random.randint(1, 9)) print('j') ``` Now with functions, you can seriously lower the amount of characters: Characters: 254 *functions.py* ```python import random def r(t): print(random.randint(1, 9)) print(t) r('Wow that was interesting.') r('Look at the number above ^') r('All of these have been interesting numbers.') r("these random.randint's are getting annoying to type") r('Hi') r('j') ``` ![image](https://storage.googleapis.com/replit/images/1539906570970_88961cdd6d7c76c15c92cd79307dbb06.pn) There you go! Try making your own functions! # The End Now you know all of the basics of python. Congratulations! Please upvote. Thanks!
3
posted to Share by PYer (2042) 8 months ago
Python
Python
17
No Pressing Enter!
Get input from the user without pressing the enter key! Good for moving a player or a game of tetris! Or use [@pyelias's example](https://repl.it/@fullern000/Pyelias-No-Enter)
8
posted to Share by PYer (2042) 7 months ago
Python
Python
15
Complex Calculator
A very complex calculator that took me 1 minute to code.
26
posted to Share by PYer (2042) 10 months ago
24
Buddy TheChat Bot!
https://repl.it/@fullern000/Buddy-TheChat-Bot-Vs-10 An amazing chat bot. Please vote and comment recommendations to make this bot better! ![image](https://canny.io/images/12766149cbe07be83d83b57970c70f88.png)
29
posted to Share by PYer (2042) 1 year ago
29
ZMAIL: A replica of gmail.
https://repl.it/@fullern000/ZMailpy This is a 90's replica of gmail. It is definitely a 90's website, where you cannot email yourself and it takes a long time to load. You must have a gmail account for this to work. Make sure you type the emails correctly!!! Thank you!
22
posted to Share by PYer (2042) 1 year ago
14
Can you make the notifications page work?
There is a page [Notifications](https://repl.it/notifications), that does nothing. I think that it could have good potential if it was actually used. I think that you should get notifications when someone up votes your post, comments on your post, or pings you. Also, you could make it so that it told you when you moved a position on the leaderboard. It could also tell you whenever a new competition started, or when one of your posts got pinned. If anybody else has some ideas they want the page to say, comment below please! Thank you!
4
posted to Ask by PYer (2042) 7 months ago
Python
Python
14
Pixel
![image](https://storage.googleapis.com/replit/images/1542553394658_804288128fd3995654fb9b57f7234071.pn) Pixel is back again! Prefix: `pix.` Help command: `pix.help`. Comment below with any suggestions or ideas! Thanks! [Click to view video.](https://pixel-video.fullern000.repl.co/pixel.mp4)
3
posted to Share by PYer (2042) 7 months ago
Python
Python
19
Tic-Tac-Toe
Very fun! Comment if you beat the computer and please upvote! https://repl.it/@fullern000/TIC-TAC-TOE
14
posted to Share by PYer (2042) 11 months ago
Python
Python
7
Live Bitcoin Value!!!
This a live bitcoin value tracker. At the start, it takes some time to load. It displays the value as it is now, and as it was **excatly** 24 hours ago. Have fun. And please upvote!
0
posted to Share by PYer (2042) 3 months ago
Python
Python
7
Fast Brute Force Password Cracker
A fast brute force password cracker I created. >I took some of @CyanCoding 's code to check if it includes symbols, >nums, exc. Please upvote and comment bugs!
2
posted to Share by PYer (2042) 3 months ago
HTML, CSS, JS
HTML, CSS, JS
25
DIGITAL BREAKOUT
https://digital-breakouthtml--fullern000.repl.co I worked on this project with sojs and gantr833. Idea from digitalbreakout.edu. Good Luck!
15
posted to Share by PYer (2042) 1 year ago
Python
Python
12
Leaderboard For This Competition
This leaderboard shows you the current stats for this competition.
7
posted to Share by PYer (2042) 8 months ago
22
BAGELS-Deduction!
A number guessing game. It gives you clues and you have to guess what the number is with a limited amount of digits and guesses! https://repl.it/@fullern000/bagelsDeductionpy Please Upvote!
12
posted to Share by PYer (2042) 1 year ago
8
Can Repl.it have a Stack overflow community?
Can Repl.it it have a stack overflow community. It would be cool if you could then transfer reputation over to repl.it. I think 1 cycle for 10 reputation would be cool.
9
posted to Ask by PYer (2042) 6 months ago
12
What should my avatar be?
I want it to be a question mark type of thing. I want to know if I should keep mine, or become one of these: ![image](https://storage.googleapis.com/replit/images/1532180896347_71e64db09b22344ce08f6e3d72b3896a.pn) ![image](https://storage.googleapis.com/replit/images/1532180957446_b0d9f7b6418e48c364466c975cbfc056.pn) Or can you give me a recommendation?
11
posted to Ask by PYer (2042) 11 months ago
17
Copy Cat
A simple chat bot: https://repl.it/@fullern000/Copy-Cat-Chat-Bot Not very fun to converse with. :\)
7
posted to Share by PYer (2042) 1 year ago
Python
Python
10
How are you doing on the leaderboard?
### Positions Positions allows you to challenge yourself with goals and it tells you what you need to do to get better. Try it out, and good luck advancing. You can enter anybodies username to see how they are doing. I am hoping this gives me the 54 cycles I need to get back on the leaderboard. AMASAD! ### Recent Updates It now shows you your recent posts and their comments/upvotes.
5
posted to Share by PYer (2042) 8 months ago
20
DIGITAL BREAKOUT!
https://digital-breakouthtml--fullern000.repl.co I worked on this project with @matti12 and @gantr833. Also can be found in the web apps competiton! Good Luck!
0
posted to Share by PYer (2042) 1 year ago
14
Can You Make A Languages section?
Can you make a languages section so that people can post languages that they have created?
3
posted to Ask by PYer (2042) 11 months ago
HTML, CSS, JS
HTML, CSS, JS
8
Fullern Tutorials
View the website at https://fullern-tutorials--fullern000.repl.co/. Thanks and please upvote!
10
posted to Share by PYer (2042) 8 months ago
HTML, CSS, JS
HTML, CSS, JS
10
Magic Tutorial
This is not mine, but it is made by my friend @gantr833. If this wins, the prize goes to him. Thanks!
3
posted to Share by PYer (2042) 8 months ago