Friday, March 10, 2017

Chrono Trigger DS: Cheated in the Mirrors

Yeah, I gave up trying to get them to drop legitimately, and cheated them in.  If you've been around this blog for a while, what's coming up next will be of no surprise to you.  Here's a how-to on hacking them into your own game!  It's a bit long-winded, but hey, you're hacking.  Get used to it.

Tools necessary:
  • A cartridge of Chrono Trigger DS
  • A 3DS with A9LH and Luma3DS installed
  • TWLSaveTool (install through the TitleDB menu in FBI)
  • DeSmuME
  • A ROM of Chrono Trigger DS (Since you already have a cartridge, you can just use Decrypt9/Hourglass9 to dump it.  Select Gamecart Dumper, then Dump Cart (trim).)
1. Getting the save off of your CTDS cartridge:
  1. If you're doing this with a fresh cartridge of CTDS that doesn't have save data, you'll need to start the game once so that it will initialize its save data.  Once it's going through logos and whatnot, you can exit back to your 3DS' home menu.
  2. With your CTDS cartridge in your 3DS, start TWLSaveTool.  Don't remove your CTDS cartridge until after you finish this process.
  3. Press B to back up the save file, keeping the default name (CHRONO_T.0.sav).  It will end up in /TWLSaveTool/ on your SD card.
  4. When TWLSaveTool says it's done, press Start to exit it.
  5. Transfer CHRONO_T.0.sav from your SD card to your computer however you're used to transferring stuff to and from your SD card (microSD Management, an FTP server, SD card reader, whatever).
2. Importing the save data into DeSmuME:
  1. If this is your first time using DeSmuME, create three folders inside the folder you extracted it to.  Name one Roms, name the second Lua, and name the other Battery.  Obviously, if this isn't your first time using DeSmuME, simply verify that you have those three folders and create any that you don't have.
  2. Put the ROM of Chrono Trigger DS into the Roms subfolder, and put CHRONO_T.0.sav in the Battery subfolder.
  3. Start DeSmuME and load the ROM of CTDS.  Let it initialize save data and start going through logos and whatnot before continuing.
  4. In DeSmuME's menu, go to FileImport Backup Memory...
  5. Select CHRONO_T.0.sav and click Open.
  6. On the next dialog that appears, select EEPROM 512kbit.  Even if you have to use the manual selection dropdown.
  7. DeSmuME will reset and pause emulation, unpause the emulation.  If the game still says "Initializing Save Data", you selected the wrong save size, and need to do it correctly this time.  If it just goes straight to the logos, you're good to continue.
3. Cheating in the items:
  1. Go to this pastebin link.
  2. Download ctmirrors.lua directly into the Lua subfolder you possibly created earlier.
  3. Get to Chrono Trigger's main menu and load your save.
  4. In DeSmuME's menu, go to ToolsLua ScriptingNew Lua Script Window...
  5. Click Browse and open ctmirrors.lua.
  6. The script will do its stuff, this is very fast.  If you get errors, let me know, because you shouldn't get errors.
  7. Close the Lua script window.
  8. Save your game.
4. Verifying you got the items:
  1. Go to your inventory and look at your accessories.
  2. You should see the Nu Arcana and the mirrors in the list.  If not, press Select to sort the list, they should now appear at the bottom of the list.
  3. You should have seven Nu Arcana, one Uranian Mirror, two Pontic Mirrors, one Promethean Mirror, one Hadean Mirror, and two Aresian Mirrors.
  4. Save (you know, again, because why not) and reset to the main menu of CTDS.
  5. Go into Extras, load your save, then go into Item Encyclopedia.
  6. Tap the Key Items icon, then scroll up.
  7. You should see that the Item Encyclopedia entries for the Nu Arcana and the mirrors have been filled in.
5. Getting the modified save back onto your cartridge:
  1. In DeSmuME's menu, go to FileExport Backup Memory....  Type CHRONO_T.1.sav for the file name, and save.  This way you still have a backup of the original (CHRONO_T.0.sav) should anything go wrong.
  2. Transfer your newly generated CHRONO_T.1.sav to /TWLSaveTool/ on your 3DS' SD card.
  3. On your 3DS, start up TWLSaveTool.  Use the d-pad to change the filename to CHRONO_T.1.sav, and press A to restore the save data.
  4. When TWLSaveTool says it's done, press Start to exit it.
  5. Start Chrono Trigger and inspect all the relevant menus to doubly confirm that you have the mirrors and the Item Encyclopedia entries for them.
  6. You're done!
By the way, don't get into writing Lua scripts, the language is horrendously bad.

Edit (2017-03-29): Acknowledgement of my awareness that the original process I posted was pretty bad and could be made better, plus a promise to make it better.

Edit (2017-04-13): After a bit of poking around, I've figured out how to use DeSmuME's tools more better.  Cheats will no longer be required, we can just edit the memory in-place and save as usual.  Also, I did some slight revisions to the steps in this update, including splitting up the steps into their overarching tasks to hopefully make the process easier to follow.

Edit: (2017-04-26): Steps revamped using a Lua script, which is an even easier thing for people to use than DeSmuME's memory viewer.  Also, I totally found the Item Encyclopedia in memory and documented the crap out of it, which is why this Lua script is able to give you the Item Encyclopedia entries for the items.

Wednesday, March 1, 2017

Wegmans

Today, I did my usual "assist my mom with the weekly shopping" thing, but this time we thought we'd try doing so at the new Wegmans that opened here recently.  I was going to tweet my thoughts about The Whole Wegmans Experience™ from within the store, but I quickly realized that Twitter's pitiful 140-character maximum message length is not adequate to explain my thoughts.  So instead, I wrote this blog post that will get far less exposure, because even though I tweet links to my posts, millennials don't click links.  I can see all the engagement data, none of my traffic comes from Twitter.  It all comes from Google searches.

For the record, today's shopping trip was actually the third time I've been to this specific Wegmans, or any Wegmans, period.  The first two times I was there with my parents for geocaching events (essentially meet and greets) that they care about far more than I do.  On the second visit I perused their buffet and had a pretty nice dinner.  For the curious, it consisted of roasted red potatoes with various spices, something that basically amounted to jalapeño cornbread and was thankfully sugar-free, what was labelled as "garlicky greens" which was basically just kale and garlic, and cilantro lime chicken with salsa verde.

Today, while actually browsing the store and looking for things we needed, one thing became readily apparent.  Wegmans very heavily pushes their store brand products.  Their store brand products take up roughly half of all their shelf space, which is far more than in any other store I've ever been to.  The remaining shelf space contains a very small and specific selection of name-brand products.  This name-brand selection looks decent at first, but omits some surprising things such as Puffs facial tissues and Tai Pei frozen meals.

This wouldn't be a problem if Wegmans had an equivalent product for everything name-brand that they don't have on their shelves.  Except they don't, as previously suggested.  Or at least, not that we were able to find.  Which brings me to my next issue.

The store layout is very confusing.  Now, of course, it was our first time shopping there, so it's reasonable to have some level of confusion since neither of us knew where everything was.  However, the decisions they make with how they distribute products around their store only serve to confuse and mislead customers about the products they carry.  For example, you can find slightly different selections of peanut butter in at least two different places.  The regular, non-organic, non-overpriced skim milk is down at foot level, while the organic overpriced skim milk is right in front of your face.  Also, the Kefir that my mom drinks was in two different places, but the specific variety she wanted was only in one of those places.  Their hummus selection is fairly limited and again exists in multiple places, and they apparently haven't heard of taboule, or nuts that aren't for snacking.

Their staff are friendly and will assist you with finding products, yes, but that step could be avoided entirely if the store wasn't intentionally laid out in the most confusing manner possible.  They also tout their smartphone application, which apparently can help you find things, but if I have to use my phone to find a product in your store instead of the signage you have posted within it, there's a problem.

Wegmans is certainly an interesting store, and will be handy to have around just by virtue of it being a different store with a different selection of products, but it will by no means replace Giant as our regular store of choice.  It also happens to be farther away from our house by a significant margin, which is also a factor to consider, even though the decision was made entirely in the product selection.  I did discover two more brands of unsalted chips while I was there (one was corn chips and the other was potato chips), but I'm still in the same unfortunate situation of "every store that carries unsalted chips would require me to drive specifically to that store to get unsalted chips, which means I won't be doing so very often".  Aggravatingly, both brands are stocked at Giant, but Giant just doesn't carry the product™.  Also aggravating: Garden Fresh Gourmet's salsa is available at basically every store in the area, but their chips are only available at Kroger.

If you do shop at Wegmans regularly, it appears as though you will be going there for the Wegmans store brand because it's the only brand in which you can find a decent selection of products.  I dunno about you, but personally I wouldn't want to look in my pantry or fridge and see forty or fifty of the exact same brand logo staring back at me.  I'm all for getting a store brand if it fills a need and the quality is there, but I don't want to be a paying shill for a company.