Register a SA Forums Account here!
JOINING THE SA FORUMS WILL REMOVE THIS BIG AD, THE ANNOYING UNDERLINED ADS, AND STUPID INTERSTITIAL ADS!!!

You can: log in, read the tech support FAQ, or request your lost password. This dumb message (and those ads) will appear on every screen until you register! Get rid of this crap by registering your own SA Forums Account and joining roughly 150,000 Goons, for the one-time price of $9.95! We charge money because it costs us money per month for bills, and since we don't believe in showing ads to our users, we try to make the money back through forum registrations.
 
  • Post
  • Reply
DoubleNegative
Jan 27, 2010

The most virtuous child in the entire world.
Randomizers! You love them, I love them, we all love them. They're incredibly fun to play. But you know what's just as much fun as playing them yourself? Watching other people play them! That's what this thread is all about! So pull up a chair, sit back, relax, and swear like a sailor when the randomizer puts a progression item in a cursed location.

Wait, what's a randomizer?

How have you not learned about randomizers before this point? Well, whatever. A randomizer is a program that takes stuff from a game and shuffles around where you can find it. The perennial example is The Legend of Zelda: Link to the Past. The randomizer for that moves all the items in chests around. So when you start the game you could find the Fire Rod or you could find a single arrow. There are a million, billion, jillion randomizers in existence now. More crop up all the time!

Can I participate too?

drat straight you can! Just pick your favorite game, find out if there's a randomizer for it, and get to playing that favorite game in a whole new way. The fun of randomizers is that they're evergreen! Every run is new and some of the chains of logic the program comes up with are extremely cursed. So please, don't be shy! Share your suffering with the rest of us, so we can all commiserate and share in the joy equally.

Where can I find these randomizers?

A gentleman named Guillaume Fortin-Debigaré maintains an exhaustive list of drat near every randomizer in existence. There are links to where you can find and download them on his website.

Useful Trackers

EmoTracker - Has support for a lot of games, primarily Zelda and Metroid games, but supports others like La Mulana as well.
TrackOOT.net - Ocarina of Time map and item tracker. Supports uploading your spoiler log
FabioYK's LTTP Tracker - Link to the Past item and map tracker. Might be out of date.
LMRItemTracker - La Mulana Randomizer item tracker, developed by the lady who creates the randomizer.
VARIA Tracker - Super Metroid randomizer item and map tracker. Supports uploading your spoiler log

A Quick Run Down of Terminology

Seed - Every randomizer program uses an RNG seed to determine where items are placed. Each one is unique.
Check - Literally checking a randomized location.
Logic - The randomizer has a long list of conditionals that determine where it distributes items. In general you're supposed to follow the chain of logic from the start of the game to the end. Using Super Metroid for an example, you might find Missiles which leads you to the Morph Ball, which leads you to Bombs, which leads you to the Speed Booster, which lets you access Plasma Beam. Most randomizers have settings you can toggle to adjust the logic used.
Tracker - An external program or web page that helps you track what items you have collected. Map trackers also exist that show you which locations are in logic with what items you have.
Spoiler Log - Most randomizers will let you generate a spoiler log. This shows you where every item has been moved to. Checking it during a run is largely frowned upon, but it can be handy if you're well and truly stuck.
Progression Item - An item necessary for progression.
Go Mode - You're ready to beat the game! In Link to the Past Randomizer, for instance, Go Mode means you have enough items that you can speed through the rest of the crystal dungeons without having to stop for anything.

Want to play with friends?

Archipelago - This is a multi-world randomizer that can add items from one game into another. So you have to work together to find items for each other.

Rosalie_A discusses their experiences as a developer of Archipelago. Also just making a randomizer in general. Highly recommended reading!
Part 2 of Rosalie_A's story about working on randomizers!

DoubleNegative fucked around with this message at 19:30 on Apr 21, 2023

Adbot
ADBOT LOVES YOU

DoubleNegative
Jan 27, 2010

The most virtuous child in the entire world.
To kick off the thread, let's start with a little Metroid Fusion Open Randomizer!

Varia Dessgeega Central Restricted - Part 1



And here's the settings I used! The three checked ones mean - Any non-tank missile upgrade counts for having missiles, you can find power bombs before bombs in logic, and you can't see what items you're picking up!

MagusofStars
Mar 31, 2012



Awesome!

I’ve always thought about doing a randomizer LP megathread and glad someone put one together. I’m out of town right now but will probably contribute with a Final Fantasy 6 Worlds Collide once I get time to really write up a good description and record a new-player friendly seed.

Left 4 Bread
Oct 4, 2021

i sleep
Yo, I love randomizers! I was just thinking about playing one recently. Definitely wouldn't mind running a fog door item rando for Dark Souls or a Portrait of Ruin rando.

I might join in sometime with a video or two if you don't mind.

DoubleNegative
Jan 27, 2010

The most virtuous child in the entire world.

Odd Wilson posted:


I might join in sometime with a video or two if you don't mind.

By all means, please. The more the merrier!

Hirayuki
Mar 28, 2010


I play way too much Free Enterprise and have loved all the randomizer LPs I've watched. Here's to meeting more!

Rosalie_A
Oct 30, 2011
I can probably guess the answer to this, but would anyone want me to write up some stuff about my adventures developing my own randomizers?

theshim
May 1, 2012

You think you can defeat ME, Ephraimcopter?!?

You couldn't even beat Assassincopter!!!
I used to play a shitton of ALTTPR and I've done my time with Free Enterprise and some Fire Emblem randomizers. Randomizers are cool and good.

Phosphine
May 30, 2011

WHY, JUDY?! WHY?!
🤰🐰🆚🥪🦊

Rosalie_A posted:

I can probably guess the answer to this, but would anyone want me to write up some stuff about my adventures developing my own randomizers?

:bisonyes: :sickos:

PurpleXVI
Oct 30, 2011

Spewing insults, pissing off all your neighbors, betraying your allies, backing out of treaties and accords, and generally screwing over the global environment?
ALL PART OF MY BRILLIANT STRATEGY!
I got really into the FF6 Chaos randomizer for a while, though it does have that issue where it's too random, so for every interesting seed, there's also five seeds where half the characters are just useless.

Blaze Dragon
Aug 28, 2013
LOWTAX'S SPINE FUND

Oh boy, a randomizer megathread. This can only be fun, I'm looking forward to seeing what games become incomprehensible to those who know them.

Rosalie_A posted:

I can probably guess the answer to this, but would anyone want me to write up some stuff about my adventures developing my own randomizers?

Of course, it's always great to see what logic goes behind these things.

Left 4 Bread
Oct 4, 2021

i sleep
I started up a Dark Souls 1 rando (item, enemy, fog) last night and by Gwyn is it excruciating.

2 hours in, not a boss in sight, just more of the worst areas arranged in an almost entirely linear hallway gauntlet filled with the most annoying enemies alongside basically zero interesting loot. :rolldice:

Sometimes you get those, I guess. Definitely not the first seed that I've had that's a form of self-torture.


I've got some other stuff to try though, so we'll see what I eventually land on posting first.

Edit: Gonna see how Smash Melee randomizer goes tonight, otherwise I can easily lean back on a DSvania to deliver.

Left 4 Bread fucked around with this message at 15:57 on Apr 11, 2023

Simply Simon
Nov 6, 2010

📡scanning🛰️ for good game 🎮design🦔🦔🦔
Randos are cool, I've tried LttP, Dark Souls, OoT and DK64 so far. Probably forgetting some.

I might record the next try of one. Was eyeing a new-ish release for Aria of Sorrow that turns it into a Roguelike, for example!


Also, re: the Fusion vid, nice start with the screw attack. I'd heard that it gives you a single-wall jump, but haven't seen it before, really cool. Like your gameplay, keep it up!

DoubleNegative
Jan 27, 2010

The most virtuous child in the entire world.

Simply Simon posted:

Randos are cool, I've tried LttP, Dark Souls, OoT and DK64 so far. Probably forgetting some.

I might record the next try of one. Was eyeing a new-ish release for Aria of Sorrow that turns it into a Roguelike, for example!


Also, re: the Fusion vid, nice start with the screw attack. I'd heard that it gives you a single-wall jump, but haven't seen it before, really cool. Like your gameplay, keep it up!

Aria Roguelike is a lot of fun and is pretty approachable thanks to the difficulty modes. I'm looking forward to seeing if you post any videos on it!

That goes for everyone too. I can't wait to see y'all's runs in whatever you play.

Rosalie_A posted:

I can probably guess the answer to this, but would anyone want me to write up some stuff about my adventures developing my own randomizers?

:justpost: I'd love to hear about developing randomizers.

Phosphine
May 30, 2011

WHY, JUDY?! WHY?!
🤰🐰🆚🥪🦊
If you're into randomizers and metroidvania i highly recommend Yoku's Island Express. It's somewhat a puzzle platformer with exploration and getting new moves, but the main movement and puzzle-solving mechanic is pinball. You're also an adorable dung beetle.

The PC version has a built in randomizer, with some options and a seed of the day, so if there's interest in seeing what the games about and such i might be able to show it off a bit.

Geemer
Nov 4, 2010



If you want to play randomizers with friends, consider multiworld randomizers like Archipelago.

Player 1 might find the Screw Attack in their Lake Hylia island for player 3 while player 2 finds a Chaos Emerald in their Rogue Legacy Castle Hamson chest 1 for player 4, player 3 gets Equip Up for player 2 for beating Kraid and player 4 gets the Master Sword for player 1 for beating City Escape in SA2b.

All multiworld seeds are beatable, if the other players take the effort to pick up the items for others.

Another pretty good (auto)tracker is PopTracker, which is archipelago compatible as well.

Left 4 Bread
Oct 4, 2021

i sleep

Geemer posted:

If you want to play randomizers with friends, consider multiworld randomizers like Archipelago.

I've never had a chance to check out Archipelago. I wonder if there'd be some way to do a multi-world randomizer for the thread.

ArashiKurobara
Mar 22, 2013
Archipelago is soooooooo good, keeps adding new stuff too. Been taking a bit to replay some Kingdom Hearts 2 and try out some Wargroove to decide if I wanna put those in for the next huge-rear end multiworld on their Discord. (Also it got me to try out Timespinner, which is a real fun rando solo as well.)

Rosalie_A
Oct 30, 2011
Making a randomizer, part 1

Background

My randomizer development experience is primarily with the Archipelago multiworld project (and we can talk about multiworlds another time). At the moment I have three randomizers for it under my belt in various stages of completion. Two of those are integrating existing randomizers: Final Fantasy 6 Worlds Collide, and Super Mario RPG. The third, however, had to be built from the ground up, and is for this obscure little game known as The Legend of Zelda for the NES.

Why make a randomizer?

Why do anything? It's fun.

How make a randomizer?

First off, lots of research. You need to understand the game you're working with at a fairly deep level. Not just in a technical sense, but also from a design perspective. Not all game randomizers are made the same, and it's pretty easy to see if you've dived into a few of them. Some games lend themselves more or less to randomization, and bringing out the full potential of your randomized game requires an understanding of what makes that game enjoyable in the first place.

That's not to say the technical element isn't at play. For Zelda, I decided to go with a straightforward item randomizer. No mucking about with entrance randomization or enemy layouts or whatever. Just find items in different spots. Even this "simple" approach requires figuring out answers to lots of complicated questions. What happens when you get certain items out of order? Are there parts that assume a particular loadout and break if that's not the case? Are there certain locations that assume only particular kinds of items will be present?

Well, for those first two questions, the answer was easy. Zelda 1 is already an incredibly open game, with you generally being able to get anything at any time. Have the Magical Sword already but find a lower level sword? That's alright, the game already handles that. Finish using a potion but there's no item to switch to? Already accounted for. Zelda 1 is so open they included a second layout of items and locations and needed to make zero adjustments to the engine. (There's a reason the game is so well regarded!)

The third question I posed is a bit trickier. This is going to require diving into some technical bits, pun intended. See, every room in Zelda has two bytes associated with it known as room flags. This controls all sorts of stuff: enemies present, secrets present, whether the room is dark, and so forth. You know that roaring that occurs when you're next to a boss room? That's part of those flags. Specifically, two bits, leading to three types of roars on top of the default silence. Five bits, however, are reserved for if there's an item in the room. This means there can be up to thirty two different items in a room: thirty one and a "Nothing", in fact.

Three swords, two rings, two arrows, two potions and a letter, two boomerangs, a wand, a book, a ladder, a raft, a bracelet, a recorder...that's eighteen items. So far so good, right? Except bombs are a thing, and so is the magical key. Rupees, clocks, fairies, and keys are all items too. Oh, and heart containers. Shame if I were to forget the bow and candles. Maps and compasses are things as well. Combine that with a nothing and we get thirty two! Perfect!

Oh wait, the Triforce is a thing too. Combined with the fact that some of those thirty-two item slots are actually dummied out slots, but due to how the game's structured you can't just go and move other items into those slots...yeah. So, in short, a conundrum: how can I have every item be available everywhere if there's not enough room in the data for dungeons (you know, the majority of the item locations in the game!) to have all the items.

This is where I got a bit lucky. Zelda 1 is one of the rare games with a full disassembly, complete with comments. And I mean full: take the disassembly and an original rom to supply the graphics and such, and you can compile a usable rom. With no changes, it's byte for byte the original, but you could make changes to the code. Assembly code is, compared to modern friendly languages, very tough to parse. You're dealing with individual bits and bytes at a time. However, it's a world above that of trying to parse the machine code directly.

This meant I could directly edit the code for parsing room flags. Remember those boss roars? I stole a bit from them. In my randomizer, there's now only one type of boss roar alongside the normal silence. Everything that used the second bit now uses the first. In exchange, I get an extra bit for items. This doubles the number of slots I have to work with, from thirty-two to sixty-four -- easily enough to represent any item in Zelda 1.

Perfect, right? Well, we've solved the problem of not being able to fit all the items into dungeons, but what about the inciting question ("Are there certain locations that assume only particular kinds of items will be present?") from the other side? Are there items that assume they'll be in dungeons that break if not?

As it happens, there are. Maps and compasses use the ID of the dungeon they're found in to set their UI elements. Outside of the nine dungeons, they do nothing. Well, that's okay. That's maps and compasses. I just made them picked up from the start and used their locations for more spots to find items. Problem solved, and I can call it a quality of life feature to boot.

Oh wait, the Triforce is a thing too. Again. As it happens, this also uses the ID of the current dungeon to set whether it's been obtained or not. There's a separate bit for each of the eight fragments, corresponding to the first eight levels. This controls not just what pieces appear on the menu, but also representing what dungeons you've cleared for the purposes of the Recorder. In other words, if I'm on the overworld -- which is dungeon ID 0 -- then collecting a Triforce piece will do nothing. Additionally, it also limits me to one Triforce per dungeon. I can move it around that dungeon, but you'll always know there'll be one in every dungeon. This is why every Zelda 1 randomizer leaves Triforces in their vanilla positions, because there's no easy way around this limitation.

Next time: I don't let that stop me.

Rosalie_A
Oct 30, 2011

Geemer posted:

If you want to play randomizers with friends, consider multiworld randomizers like Archipelago.

funny you should say that

MagusofStars
Mar 31, 2012



Odd Wilson posted:

I've never had a chance to check out Archipelago. I wonder if there'd be some way to do a multi-world randomizer for the thread.
I think the way to do it would be to all jump in a Discord for a sync’d multi, then do a later video editing to put it as a split-screen so you can see everybody playing simultaneously.

Unless you meant everybody in the thread playing, in which case I think the way to go is a thread async.

ParTwo
Mar 5, 2013

I'm making it rain-Bo!
I'm an addict to several randomizers personally. Kingdom Hearts 2 and Paper Mario 64 especially. I'm definitely gonna be posting the former, maybe the latter as well. And I'd be down for a thread-wide archipelago.

Left 4 Bread
Oct 4, 2021

i sleep

MagusofStars posted:

I think the way to do it would be to all jump in a Discord for a sync’d multi, then do a later video editing to put it as a split-screen so you can see everybody playing simultaneously.

Unless you meant everybody in the thread playing, in which case I think the way to go is a thread async.

Either way would be cool, although the latter is probably better on time schedules.

e:

Rosalie_A posted:

Making a randomizer, part 1


This is fun to read about, please do keep posting about this! I've always admired the creation of randomizers as working out the game's structure and design is a thing I already like to do. I'm just not good at the lower level programming work required to actually make one.

Theorizing "I have this thing, where all can I now go with it" is one of my favorite parts of a randomizer run, which is why I like map randomizers so much. That sort of logic already has to be accounted for in mixing up the maps to guarantee a complete seed, and it's just fun to start looking at rooms individually rather than the whole region they're in.

Left 4 Bread fucked around with this message at 02:44 on Apr 12, 2023

FeyerbrandX
Oct 9, 2012

PurpleXVI posted:

I got really into the FF6 Chaos randomizer for a while, though it does have that issue where it's too random, so for every interesting seed, there's also five seeds where half the characters are just useless.

The problem with it I noticed was "you are playing the randomizer because you played and love the original, so here, have almost all endgame enemies have 65535 HP and reraise just for fun."

Carbon dioxide
Oct 9, 2012

How does one get started with a randomizer?

There are some games I like to think I know quite well but it's not like I know where every single useless item is in vanilla. I feel I'd be stuck for hours.

Simply Simon
Nov 6, 2010

📡scanning🛰️ for good game 🎮design🦔🦔🦔

Carbon dioxide posted:

How does one get started with a randomizer?

There are some games I like to think I know quite well but it's not like I know where every single useless item is in vanilla. I feel I'd be stuck for hours.
For LttP, I watched a few runs on GDQ first (which were what got me to try it), and noticed patterns in what they checked early, as well as remembering some stuff they said like "oh x is out of the way but it's technically in logic".

When I tried it myself, I did the same checks (lots of chests at once) first and got a lot of good items from them, that's just how it works; I did get stumped regardless, and just asked in their Discord about it. Turns out that going through a dark room early without a lantern IS in logic "because everybody can do it blind, or with a map" and yeah the item was there. Just unlucky because I thought "surely this means Lantern is in logic beforehand".

So observe, try, ask imo

Geemer
Nov 4, 2010



Carbon dioxide posted:

How does one get started with a randomizer?

There are some games I like to think I know quite well but it's not like I know where every single useless item is in vanilla. I feel I'd be stuck for hours.

Almost all games with randomizers worth their salt have some sort of tracker available. Be it a companion program that hooks into the game/emulator or just a website you manually tick off what you get/explored.

Those will tell you what is available in logic, available with glitches or just straight up not in logic yet.

Most randomizers have various skill options, like Super Metroid only requiring tricks the game actually teaches you, up to requiring you to be able to do a reverse boss order run. Or aLttP requiring the lamp before making you go through dark rooms.
Trackers can be told which settings you chose, so they shouldn't expect you to do things outside of your chosen skill/comfort level.

PurpleXVI
Oct 30, 2011

Spewing insults, pissing off all your neighbors, betraying your allies, backing out of treaties and accords, and generally screwing over the global environment?
ALL PART OF MY BRILLIANT STRATEGY!
Oh, yeah, also speaking of games with built-in randomizers. The one for Crystal Project isn't perfect(some of the shuffling it does to classes tends to leave at least a couple of them as duds), but I deeply love it.

AweStriker
Oct 6, 2014

Simply Simon posted:

For LttP, I watched a few runs on GDQ first (which were what got me to try it), and noticed patterns in what they checked early, as well as remembering some stuff they said like "oh x is out of the way but it's technically in logic".

When I tried it myself, I did the same checks (lots of chests at once) first and got a lot of good items from them, that's just how it works; I did get stumped regardless, and just asked in their Discord about it. Turns out that going through a dark room early without a lantern IS in logic "because everybody can do it blind, or with a map" and yeah the item was there. Just unlucky because I thought "surely this means Lantern is in logic beforehand".

So observe, try, ask imo

Dark rooms being in logic depends on your settings - there are settings where the lantern would indeed have been available some time before needing to go into one, and others where it might not and the logic expects you to do them blind. Or at least, unless they changed what settings are available.

CptWedgie
Jul 19, 2015

AweStriker posted:

Dark rooms being in logic depends on your settings - there are settings where the lantern would indeed have been available some time before needing to go into one, and others where it might not and the logic expects you to do them blind. Or at least, unless they changed what settings are available.
Might also depend on the version you're playing. I can't say about old LTTP randomizers, but I vaguely recall hearing that Super Metroid used to consider suitless Norfair to be logical even if you're otherwise playing on the easiest possible settings.

Geemer
Nov 4, 2010



CptWedgie posted:

Might also depend on the version you're playing. I can't say about old LTTP randomizers, but I vaguely recall hearing that Super Metroid used to consider suitless Norfair to be logical even if you're otherwise playing on the easiest possible settings.

The VARIA Super Metroid randomizer has extremely granular difficulty controls. You can even create your own profile for what tricks you consider easy/hard/annoying/difficult/nightmarish and generate a seed around those settings.

The default presets are pretty good, on the easiest settings it requires a fair bit of energy tanks before even considering Kraid in logic and definitely won't make you go into hot rooms without Varia Suit.

Simply Simon
Nov 6, 2010

📡scanning🛰️ for good game 🎮design🦔🦔🦔

AweStriker posted:

Dark rooms being in logic depends on your settings - there are settings where the lantern would indeed have been available some time before needing to go into one, and others where it might not and the logic expects you to do them blind. Or at least, unless they changed what settings are available.
I don't remember exactly, I do think I used some basic setting, and was told that this specific room is "easy enough" or sth like that. It was at least a year ago, so definitely not the newest version.

Regardless, won't hurt to ask. I did finish that seed, by the way!

DoubleNegative
Jan 27, 2010

The most virtuous child in the entire world.

CptWedgie posted:

Might also depend on the version you're playing. I can't say about old LTTP randomizers, but I vaguely recall hearing that Super Metroid used to consider suitless Norfair to be logical even if you're otherwise playing on the easiest possible settings.

The super earliest versions of the Super Metroid randomizer legitimately had a list of speed tricks on the website with the warning that if you can't do any of these, then you can't play the randomizer. It's come a long way since then and is much, much friendlier to newcomers now.

Crumps Brother
Sep 5, 2007

-G-
Get Equipped with
Ground Game
I'm a big fan of the Dragon Warrior Randomizer. The big draw for this one for me is the random maps. The over world map and monster zones gets procedurally generated as part of the randomization and exploration decisions become a big part of fast gameplay. And for some reason that really gels with me.

Right now they're just starting a new tournament designed completely around getting new players in to the game and familiar with the gameplay and various options. The details of that are in the discord channel. If anyone is interested it's worth seeing if it's not too late to get onboard. They also have a couple different standing weekly casual races that anyone can join. They'll pick up to four runners that stream their gameplay and put it all together and commentate it live on their Twitch Channel. On Sundays they race with the standard flagset which is basically pretty darn close to vanilla gameplay with all sorts of quality of life upgrades. So it's find the quest items, turn in the quest items, storm the final castle, and kill the Dragon Lord. There's lots of options to change things up though and on Wednesdays they run a standing casual race that anyone can join and they mess around with different flagsets for different gameplay options. That also gets streamed live pretty often.

I'm very much a mid-pack racer and not very notable by any means so I'm no ambassador or anything, but if there's questions or anything about DWR I'm happy to jump in and see what I can help with.

Left 4 Bread
Oct 4, 2021

i sleep
Tried a different set of seeds for Dark Souls 1 last night and I got a far more tolerable and interestingly chaotic result. I've actually even seen a boss and Firelink! I've got a real shield and not just a Dark Hand! I'll see how long it takes me to cut the hour and a half session into videos, DS1 Rando does have a lot of empty time in run backs and retreading old ground, but it's been a far less hollowing experience than the last hellseed.

Started up a DSvania seed too, but it proved to be really underwhelming.


Randomizers do get more crazy when you can pull off the speedrun tricks, but the only ones I can do are a few in Portrait of Ruin and some in Ocarina of Time.

I will check out that aforementioned roguelike Aria randomizer sometime though. Aria's not one I have a ton of experience with, but it should be fun.

DoubleNegative
Jan 27, 2010

The most virtuous child in the entire world.
Also here's some more content!

Part 2 (of 2) of my Metroid Fusion run!

Blaze Dragon
Aug 28, 2013
LOWTAX'S SPINE FUND

That was a fast run. You didn't even need all of those health tanks you got.

BisbyWorl
Jan 12, 2019

Knowledge is pain plus observation.


I've always wondered this, but how do you find the actual things to randomize? Items and such.

Jaxts
Apr 29, 2008
I love watching reminders, though I've only really seen ocarina of time and majora. Looking forward to whatever this thread comes out with.

I had never heard of archipelago before and now some friends and I are going to try some bullshit next weekend, so thanks for that.

Adbot
ADBOT LOVES YOU

KennyMan666
May 27, 2010

The Saga

Been a bit since I played an ALttPR seed. Maybe I should do one for the thread. Especially since I do see that it got updated last month, the first update in over a year!

  • 1
  • 2
  • 3
  • 4
  • 5
  • Post
  • Reply