Thursday, October 07, 2021

Git tip: Visual indicator of the 50-character git commit summary message limit

Although it's somewhat too short for my taste, I generally comply with the conventional wisdom of having the summary line of git commit messages be no more than 50 characters.

Even using an editor that shows the current position of the insertion point (such as vim with set ruler enabled), it's not readily discernible how much of the available 50 characters remains, relative to text that has been keyed in so far.

My solution to this has been to set up a ".gitmessage" commit message template that includes a comment showing the 50-character limit:

#                                                  |<-- 50 char summary line limit

As long as my summary message ends before that vertical pipe character, I'm good!

Friday, September 03, 2021

New iOS app: Gong Sound

Would you like the ability to make your iPhone to emit a "gong" sound? Further, would you, ideally, like that gong sound to be accompanied by a low-fidelity, semi-realistic animation of an actual swinging gong? If so, then do I have the app for you!

Introducing Gong Sound, available for free on Apple's App Store!

Amazing features

  • On a tap, the app emits a "GONG!" sound! Wow!
  • The gong swings back and forth -- in a physics-approximating, 7-frame animation! -- for a few seconds after being tapped!
  • iPad support!
  • Supports landscape (device held sideways) mode!
  • High score counter! (With classic-arcade-like non-persistence!)
  • No ads! No in-app purchases! No data harvesting! No review nags! No network connectivity used or required! 
  • FREE!

Wait... so it's just a gong app?

Yep. 🙂 The Gong Sound app is just a "toy" project. I got the code written, and the art and sound assets adapted, for the initial 1.0 version in all of a couple of hours. (As compared to the dozens of hours that I spent on Desktop Journey, or the hundreds spent making Vigil RPG!)

At my company, teams strike a gong that we have in the office as (part of) a celebration of notable achievements.  In these days of remote work, I figured: Why not give folks an easy way to "gong" from home which sounds better than banging pots and pans together, and isn't likely to play an ad instead of the desired sound effect when the "Play" button is pressed. 

(And doesn't violate any of the items in that second-to-last bulleted list item above, in the fashion of most existing similar apps on the App Store.)

Gong Sound is a free download on iOS devices, so if you're reading this post on your iPhone: Share and Enjoy!

Thursday, August 05, 2021

Impressions: Final Fantasy 1 Pixel Remaster (iPhone)

Square Enix recently released "Pixel Remaster" versions of the first three games in the Final Fantasy series. Over the past four or so days, I purchased, played through, and completed the iPhone version of Final Fantasy 1 Pixel Remaster.

As a veteran of multiple playthroughs of the original NES version of Final Fantasy 1, I thought I'd share my impressions of this update to this classic game, focusing mostly on compare/contrast of the new pixel remaster version with the original.

With the original Final Fantasy 1 having a high frequency of standard enemy encounters plus a very limited number of spell slots, my favorite party composition is Fighter, Black Belt (Monk), Thief, and Red Mage. That’s also the party that I used for my playthrough of the remaster.

Final Fantasy 1 Pixel Remaster Battle: 6 ogres vs party of Fighter, Red Mage, Thief, and Monk

All-caps character names for old times' sake!

Spoiler statement: This article avoids spoilers about game plot / events, and for the most part, about specifics of particular dungeons and enemies. There are some mentions of particular character abilities and spells.

Quality-of-life improvements 💆

These are numerous! Some highlights that I noted during my playthrough:

Auto-battle. ⏩ The remaster has a button available on the combat screen which causes the party continuously repeat whatever actions they performed last round, and also increases the speed at which the battle plays out. Both a convenience (particularly on mobile, where performing precise button taps multiple times every round to select actions is more annoying) and a time-saver for when the party is moving through an area of easily-winnable battles.

Tap to move. 👆 The iPhone remaster takes nice advantage of the touch screen by providing an ability to tap a location on the screen to move there (as well as a traditional on-screen D-pad option). Movement speed when en-route to a tapped location is also significantly increased, which is a nice time-saver.

Save anywhere. 💾 One “quick save” slot is available which can be used in any location. Definitely a must-have feature in a mobile game like this — at least, for a game not featuring automatic continuous progress saving (like at least one other RPG native to the iOS platform I’m familiar with!).

Unlimited inventory space for weapons and armor. In the NES original, there was no shared inventory pool for weapons and armor. Instead, each of the four characters could hold four weapons and four pieces of armor — and once those 16 slots of each type were full, there was no picking up more until space was freed up. (This resulted in a sort of primitive encumbrance system!)

The remaster features a modern-style, unlimited-size shared inventory pool (similar to later Final Fantasy games). This ends up being a gameplay advantage as well as a quality-of-life improvement. There isn't, for example, a decision between keeping a helmet with the best armor rating, and a helmet with a lower armor rating but with a special ability usable in battle. Now you can equip the former, while using the latter as an item in battle out of the shared inventory pool.

Dungeon maps. While in dungeons, a scrollable map of the current dungeon level is available — even portions that haven’t been explored yet. Handy for avoiding the dead end corridors that are a part of a number of the dungeons.

World map. 🗺 It’s readily available now — no “TCELES B HUSP” required! Additionally the maps shows counts of the treasures and key items available in each visited location, and the number of each of those obtained. Handy for going for 100% completion! Speaking of which:

Achievements. 🏆 The remaster has them! I’m not sure they’re integrated with the iOS Game Center achievements system, though. (I can’t speak to the Steam or other versions of the game.)

No more invisible, fixed enemy encounters. In the NES original, there were a number of spots/squares in dungeons -- often immediately in front of important treasure chests -- where a fixed enemy encounter would take place when entered. (Repeatedly, if you left the square and then returned!) This has been replaced with (1) those encounters being triggered via the relevant treasure chest being opened, or (2) the enemy being visible on the map, with the encounter initiating when the enemy is character is interacted with. (The "Hall of Giants" is implemented in the latter fashion.)

Automatic use of key items. 🗝     There were a few spots in the original game where you needed to open the menu and use a particular key item at a particular location in order to progress. That's smoothed out in the remaster, with the appropriate key item being used automatically when you arrive at the appropriate location. I can definitely see this feature saving a few new players a trip to a FAQ to figure out what they need to do next.

Fast potion buying. Buying 99 healing potions is quick and easy now! No need to visit a shop with healing potion of at the top of the list, and zone out for several minutes while mashing the A button (or using a controller with a turbo function!).

Balance and Gameplay changes ⚖

(📉 Difficulty nerf) Better potions! 🍾 The original Final Fantasy featured only three types of potions: HEAL (restoring 50 HP), PURE (removing poison), and SOFT (curing petrification).  The remaster has those, and additionally makes available at stores Hi-Potions (restoring 150 HP), and more significantly, Phoenix Down (restoring a slain warrior to 1 HP). 

The availability of Phoenix Down in particular is a game-changer, as it makes reviving slain warriors possible before the Life spell is available at white magic level 5, and also removes the limit on the number of revives that can be performed in a given dungeon delve being tied to the number of level 5 white magic slots available.

Ether potions (restores 1 spell slot of each level) are also available at shops, making it possible to restore spell slots while in dungeons -- something that was not possible at all in the original game.

There are also a few additional status-restoring items in the game, although I found that I didn’t really use those in my playthrough. (The enemies in the game’s first large dungeon are as poisonous as ever, though! I burned through some 20 or 30 antidote potions while in there.)

Finally, there are a just a few X-Potions (fully restores HP) and Elixirs (fully restores HP and MP). These came in handy for me at one particular spot in the late game, when the warriors have much more HP than a Hi-Potion is able to recover.

(📉 Difficulty nerf) Lower gold costs / more gold rewards. 💰 Costs at shops are lower in the remaster. I was always able to afford everything I wanted at shops, with no need to grind for gold at all, or otherwise save up. I even bought the expensive “steel armor” / “knight armor” that’s available for sale at a high price (about a third of the way through the game), which I don’t believe I ever did in the original game.

(📉 Difficulty nerf) Faster leveling / easier foes? Most enemies and encounters seemed less deadly in the remaster. For example, in the original, having the entire party get stun-locked for multiple rounds by groups of undead with paralysis attacks was a big concern in some mid-game dungeons. I never came close to having this happen in the remaster. 

Further, in some spots in my playthrough of the remaster, my party felt over-leveled for the enemies I was facing. A particular undead mini-boss in the first half of the game went down especially easily (in the first combat round). Much of the second half of the game in general felt pretty easy difficulty-wise. The major dungeon after the “prove your courage” event in particular felt more like a victory lap than a challenge. (I do recall this to some extent being the case in the original game as well, however.)

(📈 Minor difficulty buff) Multiple large enemies. 👹 In the NES original game, fights were limited to a maximum of four large-size enemies (such as ogres) at a time, due to screen space constraints. In the remaster, although most fights stuck to the constraints of the NES original, I did have a handful of fights against 5 or 6 large enemies at one time, as pictured at the top of the article.

(📈 Difficulty buff) The final boss. 👿 Without getting into spoiler territory: With a well-prepared and properly-equipped party, the final boss in the NES original game could be fairly reliably defeated. In the remaster, although my party never had a wipe prior to the final boss, beating that last boss took me a good dozen or so attempts! (I do suspect that having a White Mage on the team might have made things significantly easier.) I was definitely glad for the ability to create a save immediately before the final boss fight in the remaster!

Bugs fixed 🐞🔨

This is almost certainly not a complete list, but here are a couple of fixes that I noticed that the remaster made over the original in my play through: 

The TMPR / Temper and SABR / Saber spells. Evidently in the original game, these spells were buggy, and had no effect on combat at all! I verified that they do indeed work now, and are effective melee buffs — along with the FAST / Haste spell, which is a very effective melee buff in both the original game and the remaster. (Pro tip: In the remaster, these spells can all be stacked onto the same character for a greater effect, too!)

Darkness status. 🕶 This is another one in the original game that didn’t seem to do anything at all. In the remaster, although I didn’t test exhaustively, it did appear to cause both warriors and enemies to deal fewer hits in melee. I actually did have my Red Mage use the black magic Darkness spell in a few combats against large groups of melee enemies.

New bugs 😱

Unfortunately, I did notice a couple of new bugs introduced by the remaster! (At least in the 1.0 launch version. Maybe these will get corrected in a post-launch update?) 

Elemental protection buff spells miss! 🔥 The NulShock / NulBlaze / NulFrost spells (formerly ALIT / AFIR / AICE) (reducing damage of the applicable element by half for the entire party) worked great and were effective when I first obtained them in the remaster. In particular, a battle with a fire-themed major boss was made much easier in my playthrough by the NulBlaze spell. 

Unfortunately, when I tried using these spells in the late game, about 90% of the time, they resulted in “miss!” on each of my own party members, instead of the buff being applied! I assume there’s some bug where the warriors’ evade chance is being applied to these spells, as they would be to incoming enemy status-affecting spells. 

Monk “optimal” equipment. 👊 When pressing the “Optimal” button on the equip screen for my Monk (formerly “Black Belt”) character in the early parts of the game, the game equipped the monk with one of my nunchaku items — even past the point where the monk would work better fighting unarmed (dealing a bit less damage per hit, but more hits). It’s easy to see this issue tripping up new players, making the monk class less effective than it should be for them.

Miscellaneous improvements ⚔

Music. 🎶 The music is not just remastered versions of the original chiptune NES tracks, but actually re-recorded as orchestral tracks. They really are great-sounding. They are very true to the original versions. Some of the original tracks that were very tight loops in the NES original, such as the shopping music and menu music, have gotten new extended versions, which are also great.

Dungeon backgrounds. 🌵 Each location has a new and nice-looking battle backdrop.

Spell animations. 💥 Each spell in the remaster has a unique and beautiful animation!

Dialog text. 💬 All of the dialog text in the game has been retranslated and improved. (The protagonists are still completely silent, however.) I did notice and appreciate that the classic line very early on in the game, "I, Garland, will knock you all down!" was preserved as-is, though!

Enemy names. The enemies have been assigned names that are more true to (what I assume are) the Japanese originals, are better translations, or can fit now that name length constraints are relaxed somewhat. A few such changes off the top of my head:

  • IMP ➡ Goblin
  • MadPONY ➡ Crazy Horse
  • BONE ➡ Skeleton
  • CREEP ➡ Gigas Worm
  • SAHAG ➡ Sahagin
  • KYZOKU ➡ Buccaneer

In-game hints. 💡 At least in the early portions of the game, if you talk to the dancer NPC in the starting town, she'll give you a hint as to what you should be doing next, a feature which is new to the remaster. (Another NPC in the castle near the starting town will clue you in that the dancer will do this.)

Things kept the same! 🛡

Character classes. No new ones, and they work the same as before!

Magic. 🪄 The system of a fixed count of available spell slots per level remains in place (instead of a more modern MP pool system). This keeps the system of needing to use potions instead of white magic for most healing outside of battle, and needing to use offensive black magic sparingly in general -- especially in the early game -- the same as it was originally.

The available spells, what they do, and which character classes can learn which spells, are also unchanged.

Items. The equippable items and key items available in the game, where they can be found, what they do, and which character classes can use which items, are almost entirely the same. 

(A single exception that I noticed: The "silver sword" / "mithril sword" is no longer available for sale in the elf town. Getting into why it was probably removed would touch on spoiler territory!)

World map, towns, and dungeon layouts. No changes that I spotted!

High random encounter rate. Random encounters occur quite often in both versions of this game! The above-mentioned auto-battle feature definitely makes this more palatable in this current day and age, particularly for a mobile game.

Deadly enemies! Some enemies that were particularly deadly in the original game remain so in the remaster! A particular type of enemy present in a mid-game ice-themed area with multiple abilities that can instant-kill individual warriors retains those abilities in the remaster. (The availability of Phoenix Down potions in the remaster does make the possibility of a warrior being taken down in that way a lot less scary!)

Overall recommendation: 👍

For anyone nostalgic for the NES original and looking for a solid premium RPG for their iPhone, I can easily recommend picking up this version of Final Fantasy!

Saturday, July 17, 2021

Hotels! Let me play stuff on my room's TV screen!

It has been my observation that successful hotel chains seem to always be on the lookout for new ways to positively differentiate themselves from their competition -- and thus, to attract more guests, and/or be able to charge higher rates. Such differentiating amenities range from the lavish -- such as building elaborate "pool complexes" on the hotel property -- to the simple -- a classic example being offering a warm cookie at check-in.

In this spirit: Hey, hotel chains! Here's a simple "amenity" suggestion that would get me to book with you over your competition, all else (e.g. location and price) being approximately equal: You know those nice big flat-screen TVs you've put in each of your guest rooms? It would be super great if you'd let me use that nice screen with my gaming console to play a game, or with my laptop to watch a video -- instead of, say, actively blocking my ability to do so!

Pictured: Not necessarily the optimal guest experience.

I was recently fortunate enough to be able to spend a couple of weeks traveling around Utah with my family, hiking in the national parks. Beautiful, and highly recommended! (Although if the forecast calls for 110°F+ temperatures, I recommend heading out as early in the morning as you can manage!)

Unfortunately, we had a lot better luck with the natural scenery than we did getting streaming video to work in our various hotel rooms' TVs.  I had come on the trip prepared -- or so I thought -- with a laptop and an HDMI cable, so we would be able to stream a show in the evenings after our daily adventures (or in the hot afternoons between them!).

In the trip's best-case hotel, we had a TV where I was able to reach around to the back of the TV to get at an HDMI port, then access a hidden function of the remote to change the input source on the TV, managing to get the show being streamed via my laptop to play on the TV.

In the worst-case hotels -- plural -- the TV's onboard HDMI ports had evidently been disabled entirely. Even though (peering behind the wall-mounted TVs) there were HDMI ports present on the TVs, there was no way to switch to them. The TVs were "hotel models" whose only physical control was an on/off button, and there was also no way to switch via the TV's remote controls.

This resulted in some silly situations like the one pictured above, with the family sitting around the hotel room's TV to watch some LEGO Masters -- with the TV uselessly powered off, while we huddled around the show on my laptop's small screen. 

While certainly a trivial problem in the grand scheme of things, it would nevertheless be quite a nice amenity to stay in a hotel which made it easy, instead of difficult or impossible, to play content on the room's TV screen from my laptop or gaming console, via an HDMI connection!  (And I have to imagine that this would be cheaper and easier for hotels to implement than adding more "pool complexes" to their properties!)

Sunday, April 18, 2021 Updated With New 2021 (Unicode 13.1) Emoji

My single-page website for quickly and easily getting a particular emoji character onto your clipboard for pasting into a document you're composing,, has been updated with the new 2021 set of emoji from the Unicode Consortium. New emoji include "face in clouds" and "heart on fire".

As of the time of this writing, these newest emoji likely aren't available on your preferred platform yet, but when they are, will be ready!

Incidentally, isn't strictly needed anymore. The latest versions of both Windows and MacOS now include built-in emoji pickers that can be accessed from any place where you're composing text. The keyboard shortcuts to access them are Win+Period (Windows) and Cmd+Ctrl+Space (Mac).

Still, I find myself still regularly using while composing text on desktop platforms. You're welcome to use it, too! Enjoy! 😁