Friday, January 19, 2018

All the stuff I bought at MAGFest

Of course I had to try out all the new stuff I got.

Everything that powers on reliably
  • Secret of Mana: It has all four saves in use with parties of varying levels, including one that's close to the end of the game.  I've searched around the internet and found that there's no official way to delete the data from a given slot, but the general trick to wiping any cartridge's SRAM is simply to repeatedly hit the reset switch.  The constant switchover from one power source to another for the SRAM chip will eventually cause it to be unpowered for just long enough for the data to disappear.  It's brute-force, but it'll work.
  • Donkey Kong Country: It had a save near the beginning of the game, I erased it and started over.  Fun game is fun, and according to my save I've already got 49% completion.
  • Street Fighter II Turbo: this game doesn't have an SRAM chip, but as long as the console is powered on, your options appear to be preserved.  Even if you hit the reset switch.  That's neat, I guess.  That being said, it's readily apparent that the game would massively benefit from having a controller with a button layout similar to the 6-button Sega Genesis controller.  Using the L/R buttons on a regular SNES controller for heavy punch/heavy kick is awkward, to say the least.  I know, I can rebind in the options, but something will end up on L/R and I don't really want to just not use some of my input options.  I've played a bit of it, but I'm not that great at fighting games.  I just like to dick around, so my play time testing out the cartridge consisted of Hadoken spam.  I wanted to have a non-Gundam fighting game on the SNES, though, and this was a pretty good option.
  • The Legend of Zelda: A Link to the Past: When I first tried it, it took a little careful nudging before it would boot, but I came up with a consistent way to nudge it into the right spot (press gently on the eject button and then power-cycle the console), and then more recently it's started right up without issue.  Either there was no save data on the cartridge, or my efforts to get it to boot resulted in the cartridge's SRAM getting wiped.  I started a new game and have been progressing nicely through the dark world.
I've mostly been going back and forth between Donkey Kong Country and A Link to the Past.

The ones that take a bit more effort
  • Super Mario RPG: Legend of the Seven Stars: For some reason, this cartridge puts the cartridge connector in a death grip, making it difficult to insert and remove.  Is this normal for games that use the SA-1 expansion chip?  It also makes nudging difficult, but the method I came up with for A Link to the Past provides a good starting point.  Since it uses the SA-1 expansion chip, it exposes the problem with the incorrect power being provided by the generic power supply I have: there's a red/green/blue horizontal color gradient moving down the screen.  Once nudged into the correct position, the game is playable (with the aforementioned color issue).  However, it's very sensitive to any kind of light shock or vibration, and I'm worried it'll fuck up my save data or something if I actually dig into the game.  There's one save on the cartridge that's near the end of the game, I hit New Game just to play a bit of the beginning but didn't actually save my progress.
  • Blaster Master: This one is incredibly temperamental.  I usually either get a solid blue screen or a blinking blue screen when I insert it and power it on.  After a bit of careful nudging with no real method to its madness that I've found so far, it does eventually boot up and I've played far enough to die horribly on the first boss.
I'm hoping that these two will just sort of magically work better after I clean their contacts, I honestly don't know what other options I have.  I know it's the cartridges and not my NES/SNES, because everything else I put in either of them boots up on the first try.

The multitap and controller
  • Multitap: It works perfectly, and Secret of Mana apparently requires it to be connected to the second controller port.  I don't have any games other than Secret of Mana that will use it, so I can't really test ports three or four on it.
  • Third-party turbo controller: It's a bit janky and needs some work to function properly.  It has a switch on the back that applies turbo to the Start button, I have no clue why that's desirable as a feature, but it was switched on when I plugged the controller in and it took me a while to figure out what was going on.  Now for the actual issues that prevent it from being useful right away: The right button on the d-pad also inputs up unless I hold it in a very specific manner.  Also, the Y button doesn't work at all until its turbo is turned on.  These sound like issues that could be fixed, but I don't know how easy they would be to fix.
Overall

Incredibly happy with my purchases.  Still kind of kicking myself for not also grabbing Super Metroid as soon as I saw it, but hey, I can't do anything about that now.  eBay seems to be the best choice for genuine SNS-002 power supplies, so I guess I'm going to have to bitchslap Virginia Credit Union so they'll actually let me spend money via PayPal...

Thursday, January 18, 2018

MAGFest 16

This year was all donut-themed, and unlike last year, I had zero nearly-crippling anxiety.

However, a winter storm that I've been referring to as the ColdSplosion™ made the trip up to National Harbor, MD a bit treacherous.  The normal route I take uses a bunch of state roads instead of interstates, and once I'd gone sufficiently north, things got kind of slippery rather quickly.  Getting there took four hours instead of the usual two or so because I was going 25 MPH or slower for a large portion of the journey.  Any faster just felt unsafe.

Anyway, I made it to the hotel safely, and MAGFest was a thing that could happen for me after all.

Thursday

In the early hours of the morning I arrived and made my way into the hotel.  Since I have friends who run the LAN room, I headed there after getting my badge.  Hanging out proceeded to happen until the staff suite opened, at which point I GTFOed for food.

Later the dealers' room and whatnot finally opened, and I made the mad dash for SNES games.  Yet again, nobody had a copy of F-Zero.  Well, there was one copy, but it was a sealed-in-box copy of the game and I want to actually be able to play the damn game instead of just staring at it.  Dejected, I picked up some other games that were also on my list: Super Mario RPG, The Legend of Zelda: A Link to the Past, Secret of Mana, and Blaster Master.

This would look professional if the top of the Zelda cartridge
wasn't cut off, and if I'd had proper side lighting so the
flash would be less noticeable and/or necessary.
At 4 PM I finally got access to my staff hotel room and brought my stuff in from the car.  The rest of the day was spent playing games and trying out the challenges.

The challenges which were really neat this time around.  There was something special about most of them, for instance, there was a Super Mario Bros. challenge where you had to beat world 1-1 without stopping.  Pressing left, hitting a vertical surface such as a block or pipe, trying to go down a pipe, or, you know, dying, would all end the challenge.  The hard part was the steps at the end.  I got them once and called it good.

There was a Super Mario World one where you had to beat Lemmy's Castle, but every time you jumped, gravity flipped.  It made routing the level interesting because certain jumps were possible that wouldn't have been possible otherwise.  This gravity flipping also applied to the boss fight.

Friday

12 AM marked the beginning of my first staff shift, and as usual I doubled up, so I was doing Inventory Staff in Consoles until 8 AM.  Once 8 AM rolled around, I finally went and got some sleep.  I'd been awake since noon on Wednesday, after all.

In another sweep of the dealers' room, I added two more games to my haul: Street Fighter II Turbo and Donkey Kong Country.  I looked around and no dealers who had any SNES stuff actually had official SNS-002 AC adapters, they all had the generic ones that don't provide the right power.  The one I have for my SNES is one such generic and it's causing some issues.

Some more video gaming awesomeness
(I tried to have the flash not reflect horribly off of SF2T, I really did...)
Just like on Thursday, most of the day was spent playing games and trying various challenges.  I ventured into the Arcade section for a bit, played some Ms. Pac Man, but left fairly soon thereafter because it was way too loud in there.

Saturday

Another day, another shift beginning at midnight.  This one was doubled up as well.  Afterwards, I tried challenges until noon and then went to sleep.

Did some looking around the dealers' room again, noticed a few things that I was thinking about acquiring (one dealer had the first three Etrian Odyssey games for DS, but the caveat is everything they sell is overpriced).  Found a copy of Super Mario Galaxy, but held off because I couldn't also find a copy of Super Mario Galaxy 2.  I want to get both of them so I can play them back to back, you see...

Bought a new MAGFest square wave hoodie, size Large, to replace my old one, size Extra Large.  The new one fits way better and has a bonus extra Atari joystick printed on the front.  Still going to keep the old one, it could come in handy if I need to layer up.  Also, The Yetee was there selling some custom shirt designs based on various games, and they had one based on Chrono Trigger, so I bought it.  It's a really neat depiction of Crono and Frog doing their dual tech X Strike.

I didn't take a picture of the hoodie because the design is really
difficult to frame up.  It goes up one sleeve, across the back, and
down the other sleeve.  Also there's an Atari 2600 joystick on the
front in the new version, that wasn't there on the old version.
Sunday

Last staff shift, but this one wasn't doubled up, so it ended at 4 AM.  I waited until the dealers began trickling back into the dealers' room.  Unfortunately, the one that had my planned Sunday purchases hadn't made it back before I really needed to leave, so I made alternate purchases instead: a SNES multitap and a SNES controller (since I bought Secret of Mana).  The SNES controller is a bit odd, it's an off-brand with turbo switches all over it.  I wanted a turbo controller, but the Select/Start layout is weird.

Multitap and janky third party turbo controller!
After that, I promptly left and drove home.  The roads were fine, made it back with no problems.

Overall

Mentally, this MAGFest was a way better experience for me than last year.  I had a lot of anxiety going in last year, thanks to insecurity about my weight.  I ended up working out way too goddamn much and didn't have any time to do anything other than eat, sleep, staff, or work out (or buy all the Mario Kart).  I guess this year's much better experience just goes to show that a year or so of maintaining weight loss will make you feel a lot better about where you stand.

I had a rather large wall of text in here about the stuff I bought, but I decided to cut that out and make it its own post.  You're welcome.

Also, I ran into a couple friends I hadn't seen in a while, so that was cool.  If you're one of them and you're reading this, then hi!  Otherwise, no "hi" for you.  Just kidding.  Hi, random person on the internet!

Wednesday, September 27, 2017

NTRBoot Cartridge Get

Recently I ordered a DSTT flash cartridge from nds-card.com, and it finally arrived on the 25th.  Of course, I ordered it for the express purpose of setting up NTRBoot on it.  DSTT cards are kind of a crapshoot, as there are many different chips that have been used to make them, and the NTRBoot flashing process has only been figured out for a certain subset of those chips.  Thankfully, though, the DSTT I received was compatible.

I decided to use my O2DS for the install and testing of said install since the O2DS doesn't actually need a magnet to trigger the lid switch.  It's got that nice handy switch just below the power button that puts the console into sleep mode, which replaces the lid switch from all the other 3DS-family consoles with clamshell designs.  I did eventually grab a magnet and try it out on my O3DS and N3DS, just to make sure I could do it on those, since the necessary button combination is a bit awkward depending on 3DS model.

Initially, though, I had a bit of a derp that caused me to think that my DSTT wasn't compatible.  I wanted to use a fork of boot9strap-ntr that looks for ntrboot.firm on the SD card instead of boot.firm, so I'd flashed it with that instead of the official boot9strap-ntr release.  With GodMode9 as my ntrboot.firm, my 2DS was powering on, and then off after about a second.

To troubleshoot, I decided to restore the backup of the DSTT's original contents that I'd made, and see if I could get the DSTT to be a normal flash cartridge.  I did that, obtained a copy of TWLoader, and booted freshly-dumped ROMs of Chrono Trigger DS and Mario Kart DS from it.  This told me that my card was actually compatible, since the NTRBoot flasher could actually write to it properly without bricking it.

Next, I actually flashed the official boot9strap-ntr to it, and was experiencing the same issue with GodMode9.  However, genius me then tried to boot into SafeB9SInstaller with it, which worked, and confirmed that my DSTT was indeed compatible.

I then realized a little fact I'd neglected: The version of GodMode9 I was using was old, and that there was a new version wherein one of the changes was "properly detect NTRBoot".  Updating to the new GodMode9 fixed the problem.  Re-flashed the fork of boot9strap-ntr, and all was well.

Why did I use a fork that just changes the name of the file that it looks for?  Well, The Guide™ has you remove the SD card and replace boot.firm with Luma partway through the process.  However, removing the SD card is a pain on New 3DSes, and if it boots from a different file, I can avoid having to swap out boot.firm partway through.  This one small change makes the process that much simpler.

Also, surprisingly, The Guide™ just has you boot straight into SafeB9SInstaller.  No NAND backup before installing B9S or anything.  Perhaps Plailect is unaware that GodMode9 can chainload other FIRM payloads...

I also took the opportunity to update my systems from B9S 1.2 to B9S 1.3.

While the primary use of NTRBoot is to install B9S on a stock system regardless of firmware version, I wanted to have this entry point accessible just in case I ever need it to restore a NAND backup.  It will come in handy, though, if I decide to buy one of those sexy New 2DS XLs, or if a friend wants their 3DS hacked.

I must say, though, the hacking process has gotten so simple these days that I question the necessity of The Guide™.  It stretches out every process into as many steps as possible, making every single mechanical action a step of its own.  It could say "put these files here, put those files there, boot 3DS, do the thing", but instead, it has steps entirely dedicated to telling you to press A.  Not only is this excessive, it makes the process look far more complicated than it really is.  Good technical writing doesn't misrepresent the complexity of a process.

I'd love to see the filename change incorporated into the official boot9strap-ntr, as well as the removal of boot9strap's boot9/boot11/OTP dumping feature.  Dumping the bootroms and the OTP can be done with GodMode9 quite easily, there's no reason to have a button combination to do it on boot. Especially one that causes said dump to happen every single time you use NTRBoot.

Overall, I'm quite happy with my purchase.

Monday, September 11, 2017

I don't get the point of smartphones

So, I've had a smartphone for over a year now.  I've gotten pretty darn used to it.  Thankfully, though, I haven't become one of those people that has their phone grafted to their hand.  You know the type; whenever they arrive somewhere and sit down, out comes the phone.  Whenever they get in the car and drive somewhere, out comes the phone.  Whenever they're in line to make a purchase at a store, out comes the phone.  While they're making the purchase, the phone stays out.  I could go on, but you get the point.

I've gotten a bunch of different applications installed for various purposes, whether they be games or things that do useful stuff like scanning QR codes and whatnot.  So, why don't I get the point of smartphones?

Well, the screens are tiny.  Yes, I know, they make larger smartphones.  Those screens are still tiny.  The small size of the screen combined with the large size of the pointing object (the human finger) means that the user interface design suffers as a result.

I feel like anything a smartphone can do, other than being a phone, a tablet or a laptop/desktop computer can do far better.  Tablets are basically just really big phones but without the ability to make calls, though with built-in microphones and VOIP applications one could communicate with others using their voice via a tablet anyway.  Having a bigger screen, there's more room for a user interface to exist.

I almost want to go back to a flip phone, but not quite.  Flip phones typically suck in terms of how customizable they are.  But man, are they ever built for purpose.  Smartphones, on the other hand, aren't really built for purpose.  The whole "phone" capability is just another application that gets lost in the sea of applications one typically installs shortly after obtaining a smartphone.

Case in point: in over a year of owning a smartphone, I have 17 minutes and 21 seconds of total call time.  My outgoing calls consume 13 minutes and 7 seconds of that, leaving the remaining 4 minutes and 14 seconds for incoming calls.  I have no clue why my outgoing calls last three times longer than my incoming calls, on average.

Moral of the story: I should just get a tablet and transfer 99% of the applications I use over to that.

Friday, September 8, 2017

Detecting Twitter's Night Mode

So the Night Mode option in the Twitter mobile application was added to the vastly superior website at some point recently, and I immediately switched over to using it as soon as I became aware of its availability.  However, I quickly noticed that it had a slight flaw I wanted to fix: the remaining character count that shows while you type your meaningless drivel doesn't contrast too well with the background at a certain point (between 20 and 11 characters remaining, inclusive).

Being a web site, this kind of thing should be relatively easy to fix with a user style, right?  Well, it turns out it's not quite that simple.  In their infinite wisdom, Twitter doesn't provide an easy way for CSS to detect that Night Mode is enabled.  Once I discovered that there was no easy way out, my focus shifted to investigating how they do the CSS change.  I arrived at a single line of JavaScript whose result would tell me whether or not Night Mode is enabled.
var isNightMode = ( document.querySelector( 'link[rel="stylesheet"][href*="nightmode"]' ) !== null );
All that remained was to write a user script containing this line of code, and wrap it up with some logic to add a CSS class to the page's body tag.  Along the way, I realized two things and took them into account:
  • The user can toggle Night Mode at any time after the page loads, and the toggle happens asynchronously.
  • The toggle actually happens in two steps behind the scenes, and the visual changes don't happen until the second step.
Basically, my code needed to detect when the user toggles Night Mode on or off, and add or remove the CSS class accordingly (and at the right time).  I've declared the resulting code to be release-worthy and chucked it up on my pastebin.  If you're making your own user style for Twitter, this script will add a CSS class (.night-mode) to the page's body tag, allowing you to easily detect Night Mode from your user style and apply whatever CSS suits your fancy.  If you distribute your user style, don't forget to tell people that they'll need this script for your Night Mode changes to be visible!

Thursday, September 7, 2017

Moving On

Since 2002 sometime, I've been going to the meetings of the comics and animation club at UVa (CAINE), despite not being a UVa student.  I've been fairly involved in one way or another pretty much every year since then.  But, as with all interest-based things such as this, there comes a time to say goodbye, and that's exactly what time it is.

There's a few reasons, but they're all pretty simple.

First: I turn 35 this fall.  I've already been feeling kind of creepy hanging out with people close to half my age, might as well stop now.  That age gap is only going to get bigger as time goes on.

Second: Despite what CAINE says in its promotional materials, Western comics and animation are rarely touched upon, in favor of anime and manga from glorious Nippon.  I've had significantly less interest in watching anime and reading manga over the past few years.  You may have noticed that the MyAnimeList signature image that's currently at the top of this blog hasn't been updated in forever, my lack of interest would be why.  For the record, I basically had no interest in Western comics and animation to begin with.  The only remaining interest I have that's aligned with CAINE is tangential, though related: video games.

Last but certainly not least: I need a job, and I need to move out of my parents' house for the second (and hopefully final) time.  While CAINE wasn't really holding me back in that regard, I feel like having my schedule clear of all obstructions is most conducive to getting a job, earning an income, and moving out For Real This Time™.

So to anyone in CAINE who's stumbled across this blog and was wondering why I've disappeared, the above reasons would be why.  If you wonder why I deleted my forum account, that's also related, and technically a fourth point.  Yay, post organization.

Point the fourth: I've had a hand in managing CAINE's website for a very long time, and my interest in doing that has also waned over the years.  People don't use it anyway, so really, what's the point?  Just to have yet another page on the internet for UVa to find, declare to be in their jurisdiction despite not being hosted on their servers, and forced to add text to every page saying UVa has no control over our actions, despite the fact that if we don't add said notice, they can get rid of our club status, thereby indicating that on some level, they have control over our actions?  Nope.  I wasn't the only admin, so since the other admin happens to own the domain, it's entirely under his control now.  I don't care anymore.

I might show up at a meeting if it's absolutely necessary for me to be there, but I can't fathom why my presence would be needed at this point.

Tuesday, August 15, 2017

Well, that was quick (and I expected it)

Some recent events around these parts have a lot of people up in arms.  A rally took place, expressing a rather disliked opinion, and people who disagree with that opinion held a protest in response.  In the USA, the First Amendment to our Constitution grants all citizens, among other things, something called Freedom of Speech.  This allows individuals and groups on all sides of any issue to express their opinion.

I don't generally voice my opinion on issues because I'd rather maintain fun and lighthearted relationships with friends and acquaintances, but I was getting swamped with tweets and retweets about it and expressed my opinion out of frustration.  I should also mention that I basically spent the past several months trying to phrase this opinion in a non-inflammatory manner, and that me expressing it was inevitable.

The following is a full explanation of what I've experienced, explained in the most generalized and least ambiguous way possible, complete with a glossary of terms for the one term it uses.  I like my technical writing principles.

Glossary:
SJW: (noun) Social Justice Warrior.  Typically younger people who are new to activism.  Their hearts are in the right place even though their minds aren't.

Now, here's the explanation.  Consider this scenario:

Person APerson BPerson C
SJW?YesNo???
Position on issueForForAgainst

In this scenario, even though Person A and Person B both disagree with Person C, Person A not only thinks Person C has no right to express their opinion, they also don't think Person B has the right to say that Person C has the right to express their opinion.  In fact, Person A will go as far as implying or even outright asserting that Person B wholly endorses Person C's opinion.

Who's who in this scenario?  Person A shall remain nameless, because I have the mental maturity to protect the identity of someone I no longer wish to associate with.  I find myself taking the role of Person B.  Person C represents the group conducting the rally.

Am I sad about the loss of acquaintance with Person A?  Not really.  Person A, as all SJWs do, lives a double life.  They just finally allowed their true self to show through the façade, that's all.  If anything, I'm relieved that I no longer have to deal with Person A.  In fact, in addition to blocking Person A (who has also blocked me), I blocked three other people who could have just as easily taken the place of Person A, and I'm just as relieved to no longer have to deal with them.

I did make a few more relevant tweets during and after the blocking process, which in retrospect may have been ill-advised, but I'm not going to delete them.  One was basically calling out Person A on their logical fallacy (I'm unsure of the specific type of logical fallacy, but I do believe their statements qualify as one), and the others were a series where I first bragged about having blocked people, then expressed a small amount of additional related frustration.  Person A may have already blocked me before I sent the tweet calling them out.

For other unrelated reasons, this situation closes a chapter of my life.  The timing just paired well.