Log In  

Hey, look at that, I've finally added a description of myself!

Was it worth it? No.

:: Unfold ::

Do not worry. It's going to be okay.

Cart #apathello-1 | 2023-08-19 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

Has today been rough? Are you feeling a distinct lack of emotion due to outside factors? Come sit down, relax, and distract yourself for a little. Play games of Othello against this sentient void, who will be here to support you. It will be okay.

Made for A Game By Its Cover 2023. Inspired by Lumbud84's cover art for Apathello from the Famicase Exhibition 2023. Developed for PICO-8. Also available on itch.io.


  • Arrow keys: Move cursor, change player difficulty
  • X, V, or M: Start game, place disk
  • Z, C, or N: Advance through dialog boxes

Version History

  • 0.9.5 (August 13, 2023) Initial release for AGBIC 2023
  • 0.9.6 (August 18, 2023) Added move highlight; skipped opening cutscene if last played <5 days ago
  • 0.9.7 (August 19, 2023) Changed color of move highlight; added AI level (or human icon) to results screen

Planned Features

  • My original vision was to have the sentient void talk to you while you play against it. Everything is in place in the cart for this to happen; I simply have to write enough lines of dialogue.
  • It would be nice to include a tutorial option on the cart. I don't know if I have the tokens for it, but this would be nice to have for those unfamiliar with Othello.
  • My brother keeps asking me to have the colors of the disks be changeable. This is a good idea, but I'd have to change a few things about the palette.
P#133216 2023-08-18 07:42 ( Edited 2023-08-19 14:01)

:: Unfold ::

Cart #hedisusafe-5 | 2021-03-26 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

A fun PICO-8 cover of the song "From the Gallows" by I DON'T KNOW HOW BUT THEY FOUND ME.

It also comes with a simple visualization modeled after the cover of their Razzmatazz album, courtesy of Tellexx.

The original song is here. (Content warning: reference to suicide in the lyrics.)

P#88632 2021-03-07 06:40 ( Edited 2021-03-26 23:52)

:: Unfold ::

Cart #ataxxmas-6 | 2020-12-20 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

Ataxxmas is a Christmas take on a board game no one remembers. Flip the chips to your own color in this exciting up-to-4-player experience! You can even play against AI players...but good luck winning against them. 😉


ARROW KEYS to navigate menus/the game board.
Z/C/N to select.
X/V/M to go back.

Made for PICO-8 Advent Calendar 2020.

P#85540 2020-12-18 13:59 ( Edited 2020-12-20 00:02)

:: Unfold ::

Have you ever wanted to use numbers that were bigger or smaller than the range you're given in PICO-8? Perhaps you want some more digits of precision for the fractional part of your numbers. Or maybe you're interested in doing math in a severely inefficient way...

Introducing, the Decimal Floating Point library for PICO-8!

(This example cart calculates the value of pi in all three "datatypes", using Viète's formula.)

Wait, what? Doesn't Lua have floating point already?

Not PICO-8's Lua. It actually uses 16.16 fixed point numbers. Because of this lack of floating-point numbers on PICO-8, I decided to make this library to fill that void (not that anyone asked it to be filled, but still).

What are floating point numbers?

Without getting too much into the nitty-gritty, floating point numbers are numbers that are represented in the following form:

sign * coefficient * (base ^ exponent)

where sign is either 1 or -1, and (in the case of this library) base is 10. Floating point numbers are meant to give a trade-off between range and precision.

How do I start using this library?

In order to declare a new float, you can use any one of df_single(), df_double(), or df_quad(). "Single" is the lowest precision available, with 7 significant digits; "double" is the next-lowest precision, with 16 significant digits; and "quad" is the highest precision available, with 34 significant digits.

By default, the way to declare floats is by giving the sign, coefficient, and exponent to the constructors in a table. The sign can either be "+" or "-", the coefficient is given as a string of decimal digits, and the exponent is a number representing the power of 10 to multiply the coefficient by.

For example, to create a single-precision float representing the number 256 (or equivalently, +256 * 10^0):


To create a double-precision float representing the number -3.14159 (or equivalently, -314159 * 10^-5):


To create a quad-precision float representing the number 116.9 billion (or equivalently, 1169 * 10^8):


Note: this means that a number with trailing zeros can have multiple representations (e.g. {"+","1169",8}, {"+","11690",7}, or {"+","1169000",5}), depending on how many digits of accuracy are given.

If you add a dash to the --[[ comment in tab 2 to uncomment the tab, you can also supply strings (or anything that can be turned into a string with tostr()), like these:


If you want to declare a value of Infinity, have the exponent be the string "inf" (the coefficient doesn't really matter). If string parsing is enabled, this can also be done by passing the single string "inf" or "infinity".
If you want to declare a value of NaN, have the exponent be the string "qnan" (if you provide a coefficient, it can be retrieved via the df_payload() function). If string parsing is enabled, this can also be done by passing the single string "nan", with optional "payload" digits at the end.
If you want to declare a value of sNaN ("signaling NaN", which will error out on most arithmetic operations), have the exponent be the string "snan" (if you provide a coefficient, it can be retrieved via the df_payload() function). If string parsing is enabled, this can also be done by passing the single string "snan", with optional "payload" digits at the end.

How do I display a float?

To convert a float to a string, use df_tostr(val), where val is your float.

How do I do mathematical operations to floats?

The following functions return a new float with the value of the result:

To add two floats, use df_add(val1, val2).
To subtract two floats, use df_subtract(val1, val2).
To multiply two floats, use df_multiply(val1, val2).
To divide two floats, use df_divide(val1, val2).
To integer-divide two floats, use df_div(val1, val2).
To get the remainder of division of two floats, use df_mod(val1, val2).
To get the integer-quotient and remainder simultaneously, use df_divmod(val1, val2). (Note: this returns two values - the integer-quotient, then the remainder.)
To get the integer part of a float, use df_ipart(val).
To get the fractional part of a float, use df_fpart(val).
To reverse a float's sign, use df_unm(val).

The following functions return a true or false value depending on the result of the comparison:

To check for equality between two floats, use df_eq(val1, val2).
To check if one float is less than another float, use df_lt(val1, val2).
To check if one float is less than or equal to another float, use df_le(val1, val2).

Note: floats are represented as tables; thus, in order to copy the value of a float into another variable, the table will need to be cloned by value. Luckily, you can use the included function clone(tbl), which returns a shallow copy of a table, to clone float values as well.

Is there anything else I can do with floats?

Yes, there is!

To get the sign of a float, use df_sign(val). (Note: to return 0 for a float representing 0, use df_sign(val, true) instead. And yes, this implies that a "negative zero" is a possible value.)
To check if a float is a finite number (i.e. not Infinity, NaN, or sNaN), use df_is_finite(val).
To check if a float is either NaN or sNaN, use df_is_nan(val).
To check if a float is sNaN, use df_is_snan(val).
To get the "payload" of a NaN or sNaN, use df_payload(val). (Note: returns nil if the number is not a NaN or sNaN; returns "0" if no payload has been provided.)
To round a float to p significant digits, use df_round(val, p). (Note: omit the p argument to round it to the given precision for the number.)
To convert a float to a string, use df_tostr(val).

If you add a dash to the --[[ comment in tab 1 to uncomment the tab, the following functions become available:

To convert a float to a table of byte values (4 for single-precision, 8 for double-precision, and 16 for quad-precision), use df_tobytes(val).
To convert a table of byte values to a float, use df_from(bytes). (Note: the table will be assumed to contain the proper amount of bytes for the desired float precision: 4 for single-precision, 8 for double-precision, and 16 for quad-precision.)

I have a question/comment that isn't addressed here!

Good! Reply to this post to tell me about it (or tell me in the Discord server, my tag is JWinslow23#6531).

How are you going to end this post?

...shoot...I didn't think of that...I'm terrible at ending forum posts...

Version History

v1.0.1 (August 25, 2020)

  • Token optimizations, fixed bug when dividing by infinity

v1.0 (August 23, 2020)

  • Initial release
P#81072 2020-08-23 06:04 ( Edited 2020-10-27 04:49)

:: Unfold ::

Cart #burntherope-2 | 2020-06-12 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

PICO-8 games are getting so hard these days...

This is a port of a Flash game from Kian Bashiri called "You Have To Burn The Rope". It's a really hard game. You have to burn the rope there.

Here's a pretty apt description of the game, according to its original programmer:

You Have To Burn The Rope is, by formal definitions, a game since it has all the things that make up a game - besides losing condition which I regret not adding - but I wouldn't call it a game since it is hardly interactive in any meaningful way. The point was to make fun of other games that limit the player's interaction by being easy, linear, or heavily controlled and jokingly ask at which point these games also cease to be games.

If at any point you are stuck, I suggest that you check out the enclosed instruction book.

Version History

  • v1.0.1 (June 12, 2020)
    Added timer (activated by pressing Z/C/N at the title screen)
  • v1.0 (June 11, 2020)
    Initial release
P#77892 2020-06-10 11:32 ( Edited 2020-06-12 09:58)

:: Unfold ::

Cart #hemegayezo-0 | 2020-06-07 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

PICO-8 games are getting so hard these days...

This is a demo of an upcoming port of a Flash game called You Have To Burn The Rope. (I say "demo", but it's only missing the ending cinematic.) The game, according to its original creator, was made "to make fun of other games that limit the player's interaction by being easy, linear, or heavily controlled and jokingly ask at which point these games also cease to be games."

It's a really hard game. You have to burn the rope there.

P#77753 2020-06-07 02:50 ( Edited 2020-06-07 02:51)

:: Unfold ::

Cart #snowplower-1 | 2019-12-10 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

It's Christmas Day, and you're the only one working the snowplow today. Can you clear out all the snow?


ARROW KEYS to move your snowplow.
Z/C/N to select things in menus.
X/V/M to go back.
Hold X/V/M on the title screen to erase your progress (don't worry, you probably won't do it by accident!).

There are 100 levels to complete. Can you clear them all before seasonal depression kicks in?

Made for PICO-8 Advent Calendar 2019.

P#70847 2019-12-10 16:26

:: Unfold ::

Cart #egypt-3 | 2020-03-31 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA


Welcome to the mystical land of Ancient Egypt! One day, you find yourself lost within a mysterious temple, when you come across a goddess incarnated as a jewel. Your job is to restore the goddess's power by breaking the seals found throughout the temple.

To break a seal, you must match together all of the idols within it. This is done by moving your jewel onto arrow tiles, which shift your row or column in the given direction (and the idols along with it). Once you match up all the idols in a level, the game is over.


  • D-PAD: Moves your jewel UP, DOWN, LEFT, or RIGHT.
  • Z/C/N: Lets you choose a magic spell to use. Use LEFT and RIGHT to choose between them, and X/V/M to confirm. Use Z/C/N to go back.
  • X/V/M: Lets you enter a level on the world map.
  • P/Enter: Pauses the game. On the world map, this tells you a password (just in case!). In a level, this gives you the options to restart the level or give up.

Version History

  • v1.02 (March 30th, 2020)
    Fixed password length restriction
  • v1.01 (August 25th, 2019)
    Fixed some debug code
  • v1.0 (August 25th, 2019)
    Initial release for GBJAM 7
P#66935 2019-08-25 09:01 ( Edited 2020-03-31 02:15)

:: Unfold ::

Cart #sudaduzafa-0 | 2019-08-14 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

I am undertaking a project to port Super Mario Bros to the PICO-8! (Yes, I know a few people have tried to do this before, but this one is mine, so I want to make it extra special, and extra accurate.)

So far, I've gotten the level renderer to work (almost! missing a few items and functionalities, but the general idea is here). It takes hex data just like you'd see in the original game, and renders it exactly like the game would. I give an example of World 1-1 here, but I've tested this with the entirety of the first two worlds and a few of the bonus areas. If anyone has any questions about this project, please let me know!

P#66661 2019-08-14 00:26

:: Unfold ::

Cart #cryptograms-3 | 2019-10-17 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA


Uh-oh! After browsing the quotes from your favorite book, you discover that all the letters have been jumbled up and replaced with random other letters! Your mission is to reconstruct the text of all 100 of your quotes using only your knowledge of the English language.


Use the arrow keys to navigate the letters on the board.
Hold X and use the arrow keys to fill in a guess for a letter. You are not penalized for wrong guesses.
Press Z to erase a guess for a letter.

Version History

  • v1.0.1.1 (October 16, 2019)
    Corrected a small typo in one of the quotes
  • v1.0.1 (June 29, 2019)
    Made the cryptogram text static, as opposed to bobbing up and down
  • v1.0 (June 27, 2019)
    Initial release
P#65421 2019-06-27 12:10 ( Edited 2019-10-17 07:22)

:: Unfold ::

Cart #menojumagu-1 | 2019-06-16 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

Scaled text without any lost cartridge/screen data? At last we have it, and to that I say:


Everything you need to start scaling your text is in tab 0 of this cart. If you don't feel like looking at the cart, just copy-paste these fully-commented, fully-optimized routines you see here:

function mcpy(dest,src)
 --because poke4() is so
 --relatively fast, it actually
 --outperforms memcpy(). the
 --print_big() function abuses
 --this very much.
 for i=0,319,4 do

function print_big(text,x,y,col,factor)
 --set aside the palette values
 --of black and "col" for later
 --somewhere in user ram
 --oh yeah, same with camera
 --and fillp
 --set "col" color to "col"
 --& "col" transparency to off
 --if "col" is black, then we
 --will instead draw black text
 --on a dark blue background.
 --so if "col" is black, then
 --dark blue is transparent and
 --black is not transparent.
 --but if "col" is not black,
 --vice versa.
 poke2(0x5f00,col==0 and 0x1100 or 0x0110)
 --copy the first 5 scanlines
 --of the spritesheet to yet
 --another place in user ram
 --copy the first 5 scanlines
 --of the screen to that part
 --of the spritesheet we just
 --backed up
 --print the text normally over
 --the background of the right
 --color (black or dark blue)
 --copy the first 5 scanlines
 --of this text to still
 --another place in user ram
 --copy the spritesheet screen
 --backup back to the screen
 --now the screen is intact.
 --copy the text to the first 5
 --scanlines of the spritesheet
 --display the text at the
 --desired scale
 --copy the userram spritesheet
 --backup back to the sheet
 --restore our backups of the
 --previous palette values
P#65232 2019-06-16 17:02 ( Edited 2019-06-16 23:35)

:: Unfold ::

Cart #zohakirobe-0 | 2019-05-17 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

"I'm sick of this guy always doing ports. Why can't he make his own game for once?" - snarky PICO-8 player who is somewhat familiar with my current library of games

First off, Wal-Rush! was original.

Second off, I'm beginning progress on an original game called DESCENT! It's based on a game of the same name that I made for the TI-84+ and TI-84+ CE back in 2017. Only, instead of delivering boxes, in this game you're slowly becoming insane.

I've implemented almost every mechanic I plan to use in the game, and I've made 4 stages with basic demonstrations of the first few of them. (There are ways to get stuck in these stages, and I don't have a restart-stage function yet. If you get stuck, you'll have to reset the cart. Sorry!)

P#64500 2019-05-17 08:43

:: Unfold ::

Cart #unlocked1-2 | 2019-05-17 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA


Who needs gameplay when you have ACHIEVEMENTS? Don't worry about beating levels, finding ways to kill enemies, or beating the final boss...there are none. Focus solely on your ultimate destiny...doing random tasks that have nothing to do with anything. Metagame yourself with ease! Self-satisfaction never felt so...artificial!


Use the arrow keys...if you dare.

Version History

  • v1.02 (May 17, 2019)
    Fixed a bug with the 0th achievement description, and with holding UP immediately upon starting
  • v1.01 (May 6, 2019)
    Made some important secrets even more secret
  • v1.0 (May 5, 2019)
    Initial release
P#64184 2019-05-05 11:25 ( Edited 2019-05-17 08:53)

:: Unfold ::

I haven't released a cart since I last released a cart. Let's change that, shall we?

Cart #fiporadozi-0 | 2019-04-27 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

This time, it's a curiosity. I wanted to make a custom font, and so I did. The routines for rendering it do not require the use of the spritesheet (though the glyphs are all in there, for my own benefit while creating this cart).

I've set this up as a demoscene-like or cracktro-like scroller, demonstrating the different glyphs of this font. It's based on the font on the cover of Panic! at the Disco's album "Pray for the Wicked". I hope to use this font (and this song!) in a P!ATD-related demo cart.

In the meantime, you should try out this font somewhere! Tab 2 in the code gives all the details on using it ;) .

P#63994 2019-04-27 04:09

:: Unfold ::

Cart #magic_bubble-5 | 2021-09-04 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

Based on one of the most controversial games for the NES (warning: NSFW), Jayson Lowis Harwin (i.e. me) brings you: Magic Bubble!


Playing "Magic Bubble" is easy. Bubbles of many colors come floating upward. You must fit the Bubble Clusters together so four or more Bubbles of the same color touch one another. When four or more of the same colored bubbles press together, the pressure inside the Bubbles increases causing them to pop.

Keep the bubbles bursting since in every space a Bubble gets stuck there is one less place to put the next Bubble Cluster, and they just keep coming. If you can't pop the Bubbles fast enough, the cave fulls up, and the game will end.

It sounds easy, right? Get read to enjoy all 24 mind-blowing stages of bubble popping excitement!


  • D-PAD: Moves the rising Bubble Cluster RIGHT or LEFT, and controls how fast the Bubble Cluster floats up. Pushing DOWN will release a Magic Bubble (see below).
  • Z/C/N: Turns the Bubble Cluster around horizontally (turns left to right).
  • X/V/M: Flips the Bubble Cluster vertically (rotates upside down).

Air Pockets

Air Pockets are formed in the empty spaces between Bubbles that don't fit perfectly. One misplaced bubble can cause many Air Pockets, and Air Pockets take up as much space as Bubbles. One way to get rid of Air Pockets is to remove all the Bubbles below it and expose the Air Pocket to open water. When this is done the Air Pocket will dissolve.

If you're not careful Air Pockets will fill the screen faster than Bubble Clusters. Luckily, you can slide Bubbles into Air Pockets. When you pop the Bubbles you will also get rid of the Air Pockets.

Mystic Pearl

Sometimes during game play a Mystic Pearl will be part of a Bubble Cluster. The glow of the Mystic Pearl has magical powers and will change the color of the Bubbles around it to a single color.

Try to maneuver the Bubble Cluster so when the energies of the Mystic Pearl are released it will affect as many Bubbles as possible.

Plan the position of the Mystic Pearl carefully. The number of Bubbles popped can increase or decrease depending on the color the surrounding Bubbles change to.

Magic Bubbles

Every time you pop a Letter Bubble the letter will be placed in the Magic Window at the top of the screen. After you have collected all the letters needed to spell the word MAGIC, you will receive 1 Magic Bubble. To release a Magic Bubble hold down on the D-Pad.

When a Magic Bubble is released it will float motionless at the bottom of the screen until the Bubble Cluster has settled.

The first thing a Magic Bubble does is remove all Air Pockets. This will cause all Bubbles to settle and should cause some Bubbles to pop. The remaining Bubbles will begin to pulsate with energy and change colors. If you're lucky this will cause even more Bubbles to pop.

There is no indication on screen for Magic Bubbles. It's up to you to remember how many you have collected.

Easter Egg

Only do this if you are 18 or older (I'm serious).

Pause on the title screen. You'll see a menu item labelled "CENSOR OFF". Choosing this item disables the censoring, and unlocks some very interesting cutscenes...

Version History

v1.2.1.1 | 2021/9/4

  • Removed the cutscene code, because somehow menuitem doesn't behave like it did anymore

v1.2.1 | 2019/3/27

  • Fixed a glitch where finishing the game can trap you at the high score screen

v1.2 | 2019/3/26

  • Added the Mystic Pearl

v1.1 | 2019/3/21

  • Added cutscenes, for those man enough to find them

v1.0 | 2019/3/20

  • Initial release
P#62908 2019-03-20 08:38 ( Edited 2021-09-04 22:13)

:: Unfold ::

Cart #ebook_blackcat-0 | 2019-03-08 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

Introducing the first ever fully-featured e-book reader for the PICO-8!

I decided to include Poe's "The Black Cat" as an example story, mostly because it almost perfectly fits within the length requirements of this e-book engine (this story happens to be 21747 characters long uncompressed).

The text of the story is not stored as strings within the program, but it is encoded with Huffman coding in the bytes of the spritesheet and map. This is a more complete version of this project, so look at the details of that to learn more.

One thing I added here is the ability to save your progress through resets, and also add one bookmark that you can set and jump to anytime, with the X and O buttons respectively.

Let me know what you think!

P#62685 2019-03-08 12:08

:: Unfold ::

Compression seems to be a thing I've been doing recently. Continuing this tradition, I am releasing an (only partially done) e-book reader for the PICO-8, with the first two chapters of Moby Dick! (It's also got some of the third one, too.)

Cart #wejinezono-1 | 2019-03-08 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

Some things to note:

  • Text is stored in the graphics, map, and sprite property data, as Huffman-coded bytes.

  • The text is divided up into sections that encode up to 6351 characters each (the length of user RAM minus one screen's worth of characters). These sections are byte-aligned.

  • With Huffman coding, each character of the source text is basically replaced with a variable-length bit sequence (one that is sure to never be a substring of any other), with the bit sequences getting shorter the more frequent a character is.

  • I tried to design this in a general way, such that anyone who knows how (i.e. me) can change the aesthetics, or the parameters for decoding the book, by changing a few values in the first few lines of the code.

  • Currently, the encoded data is only stored in the first 12544 bytes of RAM. In theory, filling the music and SFX with compressed data could add over 8000 characters to the book. I will leave this, however, as an exercise for another day.

If I can find some sort of book that fits within the ~22000 characters that this e-book reader can hold, I will release an official PICO-8 cartridge of that book (and possibly add some new features, like page-by-page scrolling and bookmark-saving!). Please alert me of any books that might fit this limit!

Thanks to @Scylus on the PICO-8 Discord for providing me with a way to generate and interpret the dictionaries.

P#62673 2019-03-08 05:58 ( Edited 2019-03-08 10:56)

:: Unfold ::

I've been experimenting with video compression lately, so here's a demo of a 4-color video.

Cart #fisazameso-0 | 2019-03-04 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

P#62498 2019-03-04 02:41

:: Unfold ::

Cart #badapple_sound-0 | 2019-03-02 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

This was originally supposed to be an engine for animating a splash screen with as little cartridge storage as possible. As it turns out, it's not too difficult to make a good-looking smooth animation, as long as it's not too long. However, the music video for "Bad Apple" is not not too long.

In order to fit the entire animation, I had to render it at 3.75 FPS, and make it 16*16 pixels...but hey, it fits on a PICO-8 cartridge, so why not?

If any of you are interested in the splash-screen engine, I can fine-tune and release that here.

P#62417 2019-03-02 18:10

:: Unfold ::

Cart #titol1-0 | 2019-03-01 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

(Note: this cart uses devkit mode, so be sure you can attach a mouse to your PICO-8!)


The elephant forgot the rest of the levels, but luckily he still has one left! Help him beat it in all his metagaming glory. Use your keen knowledge of gaming and dexterity to manhandle your way through a variety of challenges. Get your mind out of the box for once! Take it outside for a walk, or maybe grab a bite to eat with it.

Oh, and beat the level. There's only one.


Arrow keys, but I am told not to tell you any more than that. The elephant says so.

Response from jmtb02 (who made the original)

"holy shit"
"Thanks for doing these, each time you share one of these with me it brings me so much joy"

P#62346 2019-03-01 08:39 ( Edited 2019-03-02 20:15)

View Older Posts
Follow Lexaloffle:          
Generated 2023-09-25 23:05:44 | 0.121s | Q:86