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.

Monday, August 14, 2017

Final Fantasy 4 Dropped

It's sickening how much of a free ride Final Fantasy games get these days, given how shit most of them are.

They all suffer from the same critical issues:
  • Random encounters
  • Physical attacks alone are not enough, you have to use magic
  • Spells cost too much
  • MP recovery items are ridiculously rare
  • MP recovery items don't recover enough MP
  • If they can be found in shops at all, MP recovery items are ridiculously expensive
  • Inns gradually cost more and more as you progress through the game
However, there are some other issues that I'm only 100% sure apply to Final Fantasy 4, so here's a separate bulleted list:
  • Can't tell what items do when looking at them in the items menu (I have all these things like UniHorn and HrGlass1, but what do they do?)
  • Can't tell what the stats are on a piece of equipment, whether it's in your inventory or if you're looking at it in a shop
  • Many menu sequences are cumbersome and unintuitive, such as when using a Potion, first there's the opportunity to move it around in your inventory, and then you use it, but if you want to use another one straight away you have to re-select it again
  • I've only ever gotten one Remedy, and I used it (I haven't seen it in any of the shops I have access to)
  • Potions and the Cure line of spells have different recovery values seemingly per-use, but also in-battle vs. out-of-battle
  • I reached a "Training Room" that gave me basic instructions on how to play the game only after having played the game for several hours, most of the things it told me about I'd already figured out on my own by feeling around in the dark
  • Said "feeling around in the dark" was the only way I was able to figure out how to "sheathe my sword" during a fight where it was apparently required to not fail horribly (by "sheathe", they mean "unequip", and there's a hidden menu where you can change your weapons during battle)
  • Randomly dropping money when running from a fight
  • Enemies can often take three or four actions each before you get a turn
  • Actions all have different activation times, but the game never explicitly tells you this
  • Edward is a pussy and runs away when you're trying to heal him
  • Items and MP are consumed even when their target becomes invalid during the activation time (i.e. I was trying to heal Edward but he hid like a coward during Cure2's activation time, Tellah still loses the MP for Cure2)
  • Cecil, for story reasons, gives up being a dark knight and becomes a paladin, only to deal far less damage even once you level him back up to where he was to begin with, and then he gets subpar white magic because "lol paladin"
  • The writing feels very stiff and robotic, even if the story is somewhat decent
  • Trying to make me care about certain completely obnoxious characters when they heroically sacrifice themselves to save the rest of the party
  • Constantly cycling who's in my party so I can't just go level up somewhere and reduce the game's crap-factor through grinding
  • A certain boss has a weakness to metallic weapons, so he casts a spell on the cave he takes up residence in to make anyone with metallic items equipped be unable to move, so basically I have to equip total shit equipment in order to do anything in the cave, except I can't do anything because I can't deal damage worth shit
  • The effect that gets put on a character with metal equipment is Paralysis, but unlike normal Paralysis, it can't be Esuna'd away (though oddly it goes away if the character dies and is revived)
  • Tellah says "don't worry, with my magic, we're invincible", yet the effect still persists
  • Said boss also deals 9999 damage per hit when I have maybe a tenth of that as max HP, and wipes my party before I can deal any damage whatsoever thanks to the activation times on everything
If you need a reason why I'm dropping Final Fantasy 4, just read all the bullet points.  It's a shit game, and if you like it, you have shit taste in video games.

Wednesday, August 9, 2017

Chrono Cross

Finally able to check this one off.  Despite having a fair number of flaws, most of which are regressions from Chrono Trigger, it's by no means a bad game.  Anyone who overlooks it is doing themselves a disservice.

I get the feeling that a lot of the hate this game gets is because it isn't exactly like Chrono Trigger, but with a new story.  The battle system is different, character progression is different, and the way equipment and skills are handled is also different.  The thing is, the battle system is actually pretty neat.

I like the Stamina system, it works a lot better than a traditional ATB system and works with the element grid to open up a lot of strategy that Chrono Trigger never had.  The move from the traditional experience point-based level-up system to a story-based level-up system reduces grind and keeps you moving forward in the story.  You can still grind money and drops, of course, but that's at your own discretion.

Equipment being mostly crafted rather than straight-up purchased is an interesting move, but it's not handled poorly.  There aren't extreme shortages of a critical material or anything.  The final tier of equipment requires you to put in some effort and use the summoning mechanic that you might otherwise ignore, which may very well get you to use summons on a more regular basis if you end up liking that sort of play style.  Skills being split into regular "Elements" and the more traditional techs is interesting, since you can allocate elements at will, regardless of color.

As for the final boss battle, well, there's two ways that it can play out.  This is even hinted at with the Cryosphinx fight.  You can do it the traditional way, by dealing enough damage that the final boss dies, or you can do it the right way.  Just prior to the fight, the game goes to great lengths to suggest that each of the elemental colors have an associated tone, and that producing these tones in the proper order results in an "elemental melody".  It also hints that you should follow up this sequence with the Chrono Cross.  Doing this will instantly defeat the final boss, regardless of HP, and net you the best ending.

If you're like me and want to see both the bad and good ending, then don't be like me.  I stupidly saved my clear save over my "just before the end" save, so if I want to see the bad ending, I have to go all the way through the game again.  Unfortunately, the game doesn't let you continue a clear save, it forces you to select New Game + or Continue +, neither of which will let you hop back in where you were.  If you save to a different slot on your memory card, you can just reload your save and do the fight again.

Despite logging a number of personal complaints about the game, I still largely enjoyed my play time and will definitely come back later for some New Game + action.

Everything after the break will be talking about final boss strategy, so... don't click "Read More" if you don't want to read more.  If you came directly to this post from a search result or something, you may wish to stop scrolling down.