Jump to content
Jet Set Willy & Manic Miner Community

DigitalDuck

Member
  • Posts

    50
  • Joined

  • Last visited

Everything posted by DigitalDuck

  1. So speedrunning and score attacking Manic Miner and Jet Set Willy have been around for as long as the games have, in various forms, and I'd argue make the game much more fun than merely playing "for completion". However, I wanted to make a post to highlight some things that go on outside the circles here that CPL, crem, and RuffledBricks have kinda introduced but maybe weren't fully understood due to differences in terminology. So let's cover the terminology, as used by the competitive gaming scene in general: Score attack: only applicable to games which have a score counter, the object is to get the highest score possible. If two players earn the same score, the winner is typically the one who achieved that score more quickly. Manic Miner is the only game in the series to have an explicit score counter, but you could argue the item count in JSW2 is also a score of sorts. In both cases, there is otherwise optional content that must be done to maximise score: defeating the Kong Beasts in Manic Miner, and collecting all items in JSW2. Speedrun: in a speedrun, the object is to complete the game as quickly as possible. Sometimes there will be additional optional restraints placed, for example "no deaths allowed", "no glitches allowed", "must collect all items"; these are typically known as "categories", and competitions usually occur within individual categories. Any of the Miner Willy games can be speedrun; JSW2 even includes an in-game timer which can be used. Both of these can be split further into three types, depending on how the run is performed: Real-time: this refers to completing the run from start to finish in one go, without the use of any additional tools like rollback or snapshots. "Score attack" or "speedrun" by themselves usually imply real-time, but not necessarily depending on context. Segmented: this is also without the use of any additional tools like rollback or snapshots, but rather than require the entire run be completed in one go, it is split into "segments", usually through the use of in-game saves. You could split Manic Miner per-level, using the in-game cheat to select a level and then try to complete that level with the best time or highest score possible. You take as many attempts as you like to optimise that one level, and then move onto the next. These scores and times are usually kept by themselves, in the form of Individual Levels (ILs); but once you've completed all segments to your satisfaction, you could combine the segments and get a total score or time that way, although this is rarely done in the case of score attacks. Tool-assisted: this refers to completing the run using additional tools not intended for use with the game. This includes rollback, snapshots, savestates, and frame advance. You can essentially micro-segment this way, and then recombine everything to get a total score or time at the end of it. Most tools store the inputs along the way so it can be replayed as though it was done in real-time; this is how .rzx works, for example, and the majority of .rzx recordings are tool-assisted as they use rollback. ============ So with that out of the way, there are four major sites for competitive gaming; Twin Galaxies primarily deals with real-time score attacks; Speedrun.com primarily deals with both real-time and segmented speedruns; Speed Demos Archive primarily deals with segmented speedruns; and TASVideos primarily deals with both tool-assisted score attacks and tool-assisted speedruns. For real-time speedruns, I've set up and run boards on Speedrun.com. Video evidence is required, but you don't need to have a timer on-screen - we're capable of verifying the time ourselves. Manic Miner has two major categories: 1 loop requires reaching the swordfish as quickly as possible; the Spectrum record is held by CPL with a time of 13:24. Kong Beast requires defeating the Kong Beast as quickly as possible; the Spectrum record is also held by CPL with a time of 4:35. These categories have sub-categories, meaning that there are separate leaderboards within these; these are effectively just major versions of the game, as it's not fair to compare versions with different level designs etc. In addition, the Game Boy Advance and SAM Coupe have their own categories as they have multiple level sets. Jet Set Willy has three major categories: any% (a common way in speedrunning to say "just beat the game by any means necessary") requires reaching the toilet as quickly as possible; the Spectrum record is held by myself with a time of 19:01, however this is more of a technicality as RuffledBricks' run was performed on the slower 128K; his run is better and you should definitely learn from that run instead. Warpless requires reaching the toilet as quickly as possible, without using unintended room exits (defined as the upwards exits in Rescue Esmerelda, On the Roof, Watch Tower, and The Beach); the Spectrum record is held by RuffledBricks with a time of 21:59. Max Lives requires reaching the toilet as quickly as possible, without any unnecessary loss of life; the Spectrum record is also held by RuffledBricks with a time of 22:19. These categories also have sub-categories for versions; the 2015 bugfix is one such sub-category as it's a notable mod that fixes issues in the game without adding content. There's also a WRITETYPER category, in which the WRITETYPER cheat is allowed to help you beat the game, but that one's more for fun. Jet Set Willy II: The Final Frontier has four major categories: any% requires reaching Central Cavern as quickly as possible; I'm the only one with a recorded Spectrum run with a time of 29:26 (or 55:04 using the in-game timer), and I completely understand why. 100% requires reaching Central Cavern as quickly as possible having completed every item and visited every possible room in the game; nobody has submitted a Spectrum run and I also completely understand why. Cartography Room requires reaching the Cartography Room as quickly as possible; the Spectrum record is held by myself with a time of 1:57 (IGT of 3:24). Cartography Room Item requires collecting the item in the Cartography Room as quickly as possible; the Spectrum record is held by myself with a time of 3:12 (IGT of 5:54). Once again there are sub-categories for versions; JSW2+e.22 is more popular than the original game, probably because it's actually playable. In addition, the C16 version has its own category as it has multiple levels. Finally, Multiple Miner Willy games is just beating all three games one after the other, also known as the "Willogy". I'm the only one with a recorded Spectrum run with a time of 1:03:32, which isn't a surprise as it's also the only run I actually managed to complete. For tool-assisted runs, I've submitted a few runs to TASVideos; the Miner Willy-related runs are Manic Miner (with a lot of help from crem), Jet Set Willy, and Jet Set Willy II: The Final Frontier. Runs on TASVideos are timed differently - rather than starting the timer when you begin playing, they are timed from the moment the computer is turned on until they very last key or button is released, but it's possible to get a real-time equivalent by simply timing the portion that's normally timed in a real-time speedrun. These are listed in the commentary for each run (found by clicking the "Author notes" button). With these, my tool-assisted Willogy time is 51:54.814, more than 11.5 minutes faster than my real-time run. I'm going to continue doing tool-assisted runs for the Miner Willy games, both alternative goal choices for the original games as well as notable mods for the series. So I guess the question is, what would you like to see?
  2. There are already a few cases where it doesn't behave identically to the original game - you can no longer clip into wall tiles by entering them from the corner; you can now jump into narrow hallways from the right as well as from the left; and Willy's head is solid while walking left. I don't plan on porting the original behaviours for these, even as options. I'm happy to implement an option to turn off the wall jump, but as you say it's low on the priority list - there's nowhere in the original game where the level design would even have that effect, and only a couple of levels in the whole of MMR so far.
  3. This is known and it's deliberate to allow climbing walls by alternating solid/non-solid blocks. Unfortunately it looks especially weird when it comes to collapsing ground and I'll probably tweak the behaviour to force a drop if you're not holding the jump key. It wasn't present in the original engine.
  4. The latter - I recognise it matching the sprite from the SAM version but I have no idea what it's supposed to be. Jelly (as it's called in the UK, not to be confused with US jelly which is UK jam, and US jam is also UK jam but a different type of jam... don't worry about it) certainly fits better in a freezer, that was my justification for using the sprite. In every other case of that sprite I replaced it with a fairly generic ball sprite, but in The Freezer the jelly just fit too good. The fix I'm thinking is this: It maintains the idea of "you can drop onto the key but no further", for all settings. Being easy to edit levels is a big benefit when I'm including so many levels! I'm planning on implementing a level editor at some point, and some of the format will need to change, but it'll be the same in spirit; the idea is to make it easy to do it both in the text editor and in-game. I'm glad the other levels are doable with original physics; I did play through the ones that I thought might be problematic to make sure and did fix a couple, but clearly this level escaped. There are still a few additional levels, of course. The levels included in MMR that don't appear in Redux Long are: The Meteor Storm - BBC Micro The Dragon Users Bonus - Dragon 32 The End - Dragon 32 Not Central Cavern - Oric Atmos The Bonus Round - SAM Coupe Tic-Tac-Toe - Special Maze - Special Movable Platform - Special Most of these are just because they didn't really "fit" the existing levels (of course, the special levels were never supposed to). In addition, there are three levels from the original versions that aren't included in MMR at all: In a Deep Dark Hole - Oric Atmos The Twilight Zone, Part I - SAM Coupe The Twilight Zone, Part II - SAM Coupe The reason for not including these three is that they intentionally obscure which tiles have which properties; while these could be included it would take a lot more effort to do so faithfully.
  5. The train is pretty good and also very useful as it's one of the more commonly used sprites. As it stands the game doesn't reasonably support the train because I was mainly focusing on supporting the original game's, so they'd have to be two cells wide at all times while moving horizontally; that said, next version will support these just fine and I'd love to use them basically as-is. I'm not overly fond of the other sprite, mainly the way they're filled, but I think it's fixable. I'm not sure what it was ever supposed to be, but that makes it a fairly normal Manic Miner sprite. For what it's worth, the best way to get a feel for the "point" of a level is to play the original level - the SAM Coupe version of Manic Miner has "lenient" nasty collisions so you're not intended to die when you land on the collapsing platform touching the spike, only once that platform has been spent. That's why I feel that lowering the spikes into the ground is the better solution - it keeps the movement through the level as intended without creating an option that wasn't there in the original game.
  6. Hmmmm. For that one I'll probably have to lower the spikes to keep the intended behaviour.
  7. Well there's definitely going to be another version, especially considering one of the things you've mentioned... I tried to get a good balance - when the delay is too long it becomes frustrating waiting for it to start again. Redux mode adds a short invincibility period at the start of every level to help. I can add both of these as options. Having checked myself, this appears to be true. I don't have any issue with tiny modifications to levels to make this happen (I've moved an item up a cell in one of the other levels for the same reason, as well as reversing a conveyor direction), so I'll probably just move the item up one cell to make it work. Unfortunately I can't reproduce this myself. I'll keep a lookout for it though. I'm still experimenting with the way the modes are laid out, it's likely to be very different next time. I wanted "original" to be the first impression because I know a lot of people interested in this are going to be coming from the original and want to make sure that it plays authentically. I personally think the Redux settings improve the feel of the game, but as you've said it doesn't feel as authentic. Thanks for playing!
  8. Good news, should be seamless in the future then. I explicitly wanted the ability to have different tiles use the same colour scheme - other ports of the game (plus JSW2/+) allow for this, and it means you can do monochrome levels, fake blocks, and other interesting things. Generally speaking for every choice like that I'm picking "the one that gives more options".
  9. I was literally just building for Linux myself - probably worth mentioning that I've done literally zero testing on this so it'll work if Godot "just works" and not otherwise. I guess you're my guinea pig for this... :D The Speccy feel was important for me - it's worth noting that I've deliberately not tried to keep 100% faithful to Spectrum capabilities (obviously it can handle more on screen at a higher refresh rate, there's no colour clash or limit on which colours or how many colours can be used, and the music and sound effects are all pure audio files that could be anything), but for me the key things that give it that feel is the low resolution (fixed at 256x128 for levels and 256x192 for the display in general), the limited colour count at any one time (even if it's not true Spectrum colours, it still feels right if you don't have too many and too similar colours on-screen at once), single-colour sprites, and of course the border. I feel like you can get away with some things being "wrong" if enough things are right, and at the end of the day I also want enough flexibility eventually for some crazier stuff, so the only things that are truly fixed are the resolution and single border colour - everything else is up for change depending on the level. Anyway, Linux build attached, as I said no idea if it works or not. It's just the August build re-exported (current version is not buildable, I'm making a few major changes). ManicMinerRedux11_Linux.zip
  10. Level editor is planned for the future but I wanted to release in stages for a similar reason - if I just tried to put everything I wanted in the game all in one go then it'd never be done. I do have an implementation of colour clash but I decided not to include it in the end as my version allows for guardians to overlap level cells and I couldn't make that behave in a way I was happy with; it wouldn't be sustainable with potential future goals anyway. I'll definitely get a Linux build sorted in the next week or so, I don't have access to the computer Redux is on at the moment.
  11. I think the fact that it says "We must perform a Quirkafleeg" confirms it's deliberate. I bet someone could build a map based on the label, there's a lot going on there.
  12. In some of crem's routes, there are a few times when extra unnecessary jumps are done (these don't cost score as they come before waiting on a guardian to move out of the way anyway); a good example of this is in The Vat, where there's an unnecessary jump while following the pink kangaroo (as there are more than a few frames of waiting in that cavern, I think I walked Willy further to the right first instead).
  13. Mostly, but not quite - for example, jumping slows the game down a bit, and it's faster to wait a game step if it means two fewer jumps; however, there were no cases where that tradeoff was actually needed. Some of the caverns were re-routed to minimise jumping, and in at least one cavern I collected an item earlier just to remove it from the game updates to save a frame. (Remembering which one is harder when it was the best part of a year ago.) In any case, in all cases apart from the three caverns listed (the first Kong Beast level is actually significantly more than one frame - the entire right side of the level has to be climbed and descended again) it doesn't conflict with the maximum score goal, so you're right in that there shouldn't be any issue there.
  14. That just makes it even more complicated! If you want to do it manually, you're welcome to. It's worth noting that the whole run is different in terms of inputs (mainly because the goal is slightly different - real-time speed vs. in-game score), but obviously there's a lot of overlap between these goals and therefore in the routes, so it shouldn't be too much to tweak.
  15. Yes, I have this program (it's a great way to be able to watch individual routes, and thanks to Norman Sword for making it). If you download the .bk2 file linked and extract it using any unzipper (it's actually a zip file), one of the packaged files is called Input Log.txt and has lines that look like this: |......................................................................|.....|.....|.....| |......................................................................|.....|.....|.....| |.......................O..............................................|.....|.....|.....| |.......................O..............................................|.....|.....|.....| |.......................O..............................................|.....|.....|.....| |.......................O..............................................|.....|.....|.....| |.......................O..............................................|.....|.....|.....| |......................................................................|.....|.....|.....| |......................................................................|.....|.....|.....| |........................P.............................................|.....|.....|.....| |........................P.............................................|.....|.....|.....| |........................P.............................................|.....|.....|.....| Each line represents one video frame (at ~50.02Hz), and each column represents an individual input (most of them are keyboard keys, shown by a . when not pressed and a different character when pressed; the three groups of five at the end are joystick inputs). This small section tells me that I pressed nothing for two frames (about 0.04 seconds), pressed and held O for five frames (about 0.1 seconds), pressed nothing for two more frames, and then pressed and held P for three frames (about 0.06 seconds). This could be converted into the same format as before fairly easily; just condense the relevant inputs in each line so this would become: . . O O O O O . . P P P The issue is that Manic Miner doesn't run at one step per video frame, or even at a fixed frame rate - in this snippet (taken partway through Central Cavern) the inputs were only processed on the third, seventh, and tenth frames, meaning it would actually be: O O P The idea would be to take the original file, remove any line where inputs aren't processed, and then condense it, which can all be automated fairly easily. There are two issues with this: 1. Left/right/jump inputs are not processed while Willy is airborne even though the game continues to step through, but the format used requires these to still be accounted for. 2. Music/pause inputs are processed at an entirely different point in the game cycle (usually about two frames later). Because of this, I can't just remove lines where inputs aren't processed. In order to convert the format I'd need to find a memory address that changes every game step in very close proximity to the left/right/jump input processing; I then record the current inputs to file whenever this memory address changes and convert it, and we have everything exactly as needed. 1. Is there a memory address that changes every game step in very close proximity to the left/right/jump input processing? I tried using the air counter but that's about as far as away as you can get. 2. Alternatively, are the current step's inputs stored in memory anywhere (i.e. if Willy is walking left/right or has started a jump)? If so, I could just read them whenever the air counter changes. If the answer is yes to either of these questions then I can convert it pretty easily. Unfortunately a modified version of the game that adds either of these in isn't going to be helpful as it's likely to run at a very slightly different speed than the original game and therefore cause the inputs to become out of sync.
  16. To be clear, it's not my video - the way TASVideos works is that you submit a "movie file" that basically encodes a list of button presses; because I'm using BizHawk, this is a .bk2 file, but a .rzx is also a movie file. Then it's verified by someone independently taking a copy of the game (obviously it has to be the same version) and playing the movie back to prove there's no funny business going on. I'll go further into depth on this, maybe in a new topic, when I have my JSW2 run published (I'm happy with the actual run but I need to provide a writeup for it). From what I understand, crem's algorithm is heuristic-driven, which means that rather than try every possible iteration for the entire length of the cavern, it only does so over a short period and then gives each state a score (which will likely be a function of items collected and some added checkpoints reached). If you were to try to brute force every set of inputs over the entire length of the cavern, it would take a very, very, very long time. A typical cavern takes about 500 in-game frames to complete optimally; each frame there are six different actions you can take (nothing, left, right, jump, jump left, jump right), so the total number of inputs to test is on the order of 6^500, which is a number with 390 digits. Granted, the actual number is smaller than this as inputs in the air are ignored, and deaths will cut a branch short, but it's still an unfathomably large number. By using a heuristic, you can periodically prune the tree, removing any branches that (seemingly) aren't making progress, or are progressing slower than other branches, to keep the number of possibilities to check much lower. The disadvantage of this is if you're keeping a history of (say) five seconds, you're going to miss if there's some secret in Central Cavern in which if you hold left for six seconds it automatically wins the cavern for you. So it's important to prune the right amount - too little and it never finishes, too much and you miss some optimal solutions. crem almost perfectly straddled this line - as it happens, the right side of the Endorian Forest required just a tiny bit more planning ahead than the algorithm was afforded. I would still say the algorithm won the battle though - there were a few caverns where I'd played through what I thought was optimal but scored lower than the algorithm, so had to go back and improve it. I wouldn't have known otherwise (and that's one of the reasons crem is listed as a co-author). If it helps, as I mentioned above the .bk2 file is already a list of inputs - it's just a case of working out when the game actually acts on them. I'm sure there's a way to automate that too but I'm not familiar enough with the actual internals of the game.
  17. I can certainly do Linux. Mac requires a lot of extra steps because reasons but building to Linux is trivial enough.
  18. That's not a bug - you get a temporary invincibility on starting the level in the Redux presets. It does allow you to cheese a few levels but I'm allowing them as pro strats. I don't have a Mastodon account so I don't know who you've been messaging but hopefully they're not too bothered by it. I'd have to have a think about how to do the same thing for Chuckie Egg - it's a lot more arcade-focused so I don't think infinite lives is the best solution. Perhaps having more of a focus on individual levels and having score/time/other targets to beat?
  19. Here's v1.1; saves are fully compatible so it's safe to just extract this over your old version, or copy your save file to the new version, if you want to keep your progress. I'm not expecting to make another smaller patch like this, next time will be a more substantial update. Added: Progress is saved as you play, so now you can close the game and continue where you left off another time Input handling revamped, now supports controllers There is now a progress counter showing how many levels have been completed so far Final score screen now shows the preset game name just above overall rank After completing or quitting a game it now returns to preset/custom game screen instead of main menu General optimisations Fixed: Smith jump was one step too short One of the sprite options wasn't being added to the available list when unlocked Level version menu option could sometimes be highlighted and changed when greyed out Music volume wasn't set correctly on game load Probably fixed (these are hard or impossible for me to reproduce for various reasons): Deaths sometimes caused the game to freeze for a few seconds Game ran too fast at 120/144Hz Balance tweaks: Small modifications to a couple of levels to allow them to be completable in all modes Score rank requirements raised As always, any comments, criticism, bug reports, suggestions for improvements, heckles, and sharing of high scores welcome. I'll leave you with CPL's playthrough of this version: ManicMinerRedux11.zip
  20. I've never actually used Gamemaker, I'd originally remade Manic Miner in MonoGame and then gave Godot a go and I think it's better for this. Having said that, Godot is only being used for rendering, sound, and inputs - the physics and collision detection is done entirely manually in code. If there's something in particular you need I can give some pointers but I think a large portion of it is either generic to every project, or too specific to Manic Miner to be applicable.
  21. Yes, I think there's been a confusion in my wording - by "die" I meant "lose all lives". I don't think it's required to collect all items, just to reach the ending itself.
  22. Glad you enjoyed it! I did think about having an option to turn on the GBA backgrounds for fun, but that seemed too cruel. I would've liked to bring the SAM version's enemies into the Spectrum style but that's far beyond what I'm capable of. Personally I find 30fps too fast - Manic Miner is all about precision and timing rather than pure "action", and I think the default 15fps works best for that; but everyone has their own preferences, which is why there are so many options. I did think about including a 60fps mode but that's obviously too fast. SAM levels on the Spectrum would still be a worthwhile project - this version obviously isn't running on the Spectrum, and not all levels are included (I didn't make an attempt to port the two Twilight Zone levels as they're... very non-standard). The extra notes are there because I felt some options needed explaining, but not having notes for all options felt empty so I figured it was an opportunity to have some fun. I do have a patched version imminent which fixes a few issues that have been brought to my attention and adds a few features that have been requested, but don't let that stop anyone from making more suggestions.
  23. I've been a fan of the Miner Willy games for a while; I played the games as a child and didn't especially like it then, but after learning to speedrun them I found a new appreciation for them. Manic Miner is designed around score attacking (which for 17 of the 20 levels is the same as speedrunning it), and is more fun when you play it that way. Since then I've played basically every version of Manic Miner going and enjoyed most of them, and I was especially enamoured by how most versions add their own mechanics and levels. For the 40th anniversary of the game I wanted to write a love letter to the game in all its forms, and after experimenting with a few different ideas and tools I ended up remaking the game from the ground up in Godot. So here's Manic Miner Redux. It contains: 83 levels from various official releases of the game, including Spectrum, BBC Micro, Dragon 32, Game Boy Advance, Oric Atmos and SAM Coupe; levels almost exclusively use graphics from the Spectrum versions of Manic Miner and Jet Set Willy, but in terms of gameplay they should be near-perfect. In addition, 56 levels have slight variations fixing minor issues or making them fit a more general mold; 2 levels have major variations that basically make them entirely new levels; and there are 3 "fun" experimental levels thrown in for good measure. 3 preset modes; Original (Spectrum Bug-Byte recreated as accurately as I can), Redux Short (my preferred physics options and the same levels reordered with a few fixes and tweaks), and Redux Long (80 levels... good luck). Choice of music from the Spectrum, GBA, and SAM versions (or turn it off) Choice of Willy sprite, colour, and outline colour; doing well in the preset modes unlocks more options Lots of gameplay customisation Game speed is adjustable from 12fps (roughly Manic Miner Spectrum speed) to 30fps (roughly JSW2+ speed) Jumping, conveyor behaviour, and item collection behaviour can be switched between how it works in Manic Miner Spectrum ("Smith"), Manic Miner PC/GBA ("Noble"), or JSW2 ("Rowson"). Note that I haven't emulated the different turning behaviour or sprites of JSW2. Nasty collisions and fall damage can both be made more lenient, allowing you to "stand" on nasties as long as there is also floor present, or fall a further distance before dying. They can also be made to drain air instead of killing Willy, as can guardian collisions. Items can be made to be retained after death; Willy's spawn position can be set to the last safe ground he stood on; and there is the option for a JSW2+-style temporary invulnerability on entering a cavern or after death. Gameplay mechanics from other versions implemented: Forcefields that toggle on/off (BBC Micro) Horizontal level wrapping (Dragon 32) Diagonally moving guardians (Oric Atmos) Trampolines (SAM Coupe) Vertical conveyors (SAM Coupe) Ice (Spectrum, not used and probably unintended) Stairs (JSW) Future plans: If you look at any of the level files, you might notice that they're fairly easy to read and edit. At some point I'd like to add a level editing and sharing tool, but I currently don't have an idea of what that would look like and I don't have much free time to work on it at the moment. And of course I'd like to give JSW the same treatment. Any comments, criticism, bug reports, suggestions for improvements, heckles, and sharing of high scores welcome. EDIT: v1.1 released, check this post:
  24. Sorry for the bump: Yes, I'm using the standard +e.22 version, as posted above. I believe you're only required to reach Central Cavern and die to get the WELL DONE screen, I don't think 100% is necessary. This marathon was one of the more fun ones and it's a shame we haven't been able to do another like it.
  25. About time I made an account here, I think... So crem initially made these to help with speedrunning the game, and they were very useful for us in either confirming that our routes were optimal or finding new routes. I took crem's inputs and used them (in a modified form) to help produce a fully optimised TAS (tool-assisted speedrun; essentially completing the game as quickly as possible using tools like slowdown, frame advance, rewind/rollback, savestates etc.) which you can find here: https://tasvideos.org/5052M Anyway, in the progress of doing so I managed to save a single frame (i.e. score an additional point) on Endorian Forest - scoring 1841 points. This was due to some forward planning on the collapsing ground - I spend as much time as possible on it while climbing up and it results in one less frame waiting for it to disappear on the way back. This means the highest obtainable score for the Bug-Byte version is 39531 and the highest obtainable score for the Software Projects version is 39532.
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.