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! 😁

Friday, March 12, 2021

Jon's Five-Monitor Work-From-Home Desk Configuration: 2021 Edition

Although many folks are working remotely these days due to the Coronavirus pandemic, I've had longer than most to accumulate a nice desk configuration!  For the past seven years now, I've worked remotely full-time from my home in Michigan.

Here's my current desk setup:

Five-monitor Mac desk configuration

My current primary computer, a 2019 16" MacBook Pro, is the screen on the far left.  Of the other four monitors, two are connected directly to the MacBook Pro via USB-C cables; the remaining two are connected to my OWC 13 Port Thunderbolt 3 Dock -- that's the component sitting on the desktop behind my keyboard.

Delta since 2018

I didn't purchase and assemble this setup overnight! Instead, I've been able to add a part every year or so, building it up over time. This current setup is a nice improvement over my 2018 desktop configuration:

My 2018 monitor configuration

The current setup replaces that smaller rightmost monitor with a new portrait orientation monitor; the remaining monitors are the same, just repositioned.

Application layout

One reason I've opted for this setup of multiple monitors, as opposed to a single ultra-large monitor -- in addition to having had the ability to slowly purchase and assemble the setup over a period of years  -- is that the multi-monitor setup lends itself really nicely to having a particular application always be placed at a particular location.

It is a really nice luxury to just be able to just look at a particular screen to get a view of a given application, instead of having to Cmd+Tab or otherwise search through multiple windows to find an application that I'm looking for. 

Here's how I typically have my applications arranged in this current setup:

5-monitor application arrangement

Leftmost monitor

As mentioned above, this is the MacBook itself. I have it up on a stand, both to better match the vertical positions of my other monitors, and to get a little bit of desk real estate back to store some small items under the stand.

I typically have my (multi-tab) iTerm2 terminal window running on this monitor, as well as a music player in "mini" mode. 

I've been using the Mac App Store free app MiniPlay for the latter recently, and it's been working really nicely. In addition to being very similar in size and UI layout to my own "Schneider's Eleven" minimal skin for Windows Media Player that I previously used on a daily basis when I primarily developed on a Windows machine, it seamlessly supports both music player apps that I typically use, Music (formerly iTunes) and Spotify.

Left portrait-orientation monitor

This is where I view and write code! As I've blogged previously, I find it really productive to be able to view a long swath of code at once on the tall monitor.

 (An exception is when I'm pairing with someone over screen-sharing software, since most of my peers don't have a portrait-orientation monitor. In that case, I typically drag the IDE over to my primary monitor.)

Bottom landscape-orientation monitor

This is my "primary monitor". I keep the Mac's Dock on this monitor. I typically have my main web browser window open on this monitor. 

I'm currently composing this blog post on this monitor. 😁

Top landscape-orientation monitor

As mentioned in my 2018 post (and more visible in my 2018 image above), this monitor is mounted on a pole anchored to my desk via a WALI Extra Tall Monitor Desk Mount. 

Sometimes I've got nothing happening on this monitor -- when I'm sitting, I have to crane my neck just slightly to look up at it -- but when I need a place to put some secondary window like a database/SQL query window, a code diff, or just another browser window, it's another place I can do so without obscuring any of my other open apps!

Right portrait-orientation monitor

This is where I keep my communications windows. The bottom portion is dedicated to Slack while I'm at work. I use the top portion for other communications apps like Messages and WhatsApp.

Phone stand

The small, portrait-orientation "screen" in front of my MacBook is an iPhone 12. I finally caved and bought myself a new phone, replacing my venerable iPhone 6S. Despite the lamentable lack of headphone jack technology, I have been otherwise been enjoying the improved battery life and memory on the new device.

The phone's "stand" is a magnetic wireless charger from Choetech, which takes advantage of the new MagSafe technology in the 12. (The phone's position while on the stand doesn't actually obscure any of the area of the MacBook monitor behind it when I'm sitting at my desk, as it appears to do in this photo.)

The app that you can see running on the phone is my own free App Store app, Desktop Journey.  I developed it because I wanted my phone to be doing something useful while sitting and charging in its stand on my desk. I figured an at-a-glance "dashboard" view of the time, my next calendar event, my current Reminders app reminders, the weather, and occasional prompts to stand up and stretch or do a few reps of an exercise would be ideal. 

After failing to find such an app anywhere on the App Store, I decided to build it myself, and created Desktop Journey! It's a completely free and ad-free app (except for the weather functionality, to help cover my costs for the non-free weather API that I'm using to query global weather data), and collects no personal data. Free Desktop Journey download on the App Store.

Small top-left screen

The last remaining little screen, at the top-left, is a Raspberry Pi running Pi-Hole, a new addition to my home network, a Christmas gift from my wife Melissa this past winter. With my local high-speed Internet monopoly having started imposing a bandwidth cap -- which my family regularly bumps up against, just through normal everyday usage -- I'm happy to take advantage of the opportunity to save some bandwidth by declining to send outgoing telemetry and requests for ads from my local network.


The image is of Peyto Lake at Banff National Park, which my family had the good fortune to be able to visit in 2019. Banff -- along with the other nearby national parks in Canada, Jasper and Yoho -- is the most beautiful place I've ever visited. I hope to be able to go back and visit again someday!

As MacOS still lacks built-in support for spanning an image across multiple monitors, I used the App Store paid app Multi Monitor Wallpaper to generate this wallpaper.