国産人気ADVゲームで「フランス語環境で起動しないバグ」が発生&修正、開発者が原因明かす。過去にも発動した“言語環境と数字の罠”

 

国内個人開発者せきやdn氏は8月10日、同氏が移植を手がけた『ファミレスを享受せよ』Unity版について、特定言語で発生した不具合とその原因を共有した。その背景には、かつてほかの開発者も困らせた「言語環境と数字にまつわる罠」があったそうだ。


『ファミレスを享受せよ』は、永遠のファミレスで先客たちと長い時間を過ごすアドベンチャーゲームだ。本作の舞台は、永遠の時間が流れるファミリーレストラン「ムーンパレス」。ある夜ムーンパレスに迷い込んだ主人公は、同じく迷い込んだ先客たちと、不思議な時間を過ごすことになる。

本作はおいし水氏によるゲーム制作サークル月間湿地帯が手がけ、今年1月にフリーゲームとして公開。PC/ブラウザ向けとしてitch.ioおよびふりーむ!にて配信され、人気を博していた。そして8月1日には追加コンテンツなどを収録したPC(Steam)版が発売開始され、Nintendo Switch版もリリース予定となっている。この展開にともない、本作のゲームエンジンはGodotからUnityへと移行。移植については、個人ゲーム制作スタジオStudio Dragonetを運営するせきやdn氏が手がけている。


そして本作PC(Steam)版において、「OSが特定の言語設定だとゲームが起動しない不具合」が発生していたという。同不具合は8月10日配信のアップデートで修正済みで、一例としては「Windows側の言語設定がフランス語」といった状況で発生していたそうだ。なぜそのような不具合が生じたのか、せきやdn氏が同日自身のX(旧:Twitter)アカウントにて投稿し、注目を集めている。どうやら、その背景には過去にも多数の開発者たちを“罠”にかけた、「数字区切りに用いる記号の国ごとでの違い」があったようだ。

せきやdn氏によれば、今回の不具合の原因は「カンマ(,)」と「ピリオド( .)」の、ゲームプログラム内での扱いの違いだったという。同氏は本作のUnityへの移植にあたり、プログラミング言語C#を扱っていた。同言語には「float.Parse」という関数があり、そこでの数字の扱いに問題が生じていたのだという。

まず、プログラミングではしばしば、各種データは「データ型」と呼ばれる種類に分類される。たとえば「3.5」という情報があったとしても、プログラム内のデータ型によっては「テキスト文字列」として扱われたり「計算用の数値」として扱われたりするのだ。上述の「float.Parse」は、「テキスト文字列」を「小数点以下を含む数値」として扱うように変換する機能をもっている。せきやdn氏はこの機能にて、例として「3.5」という文字列を小数点以下を含む数値に変換しようとしていたわけだ。

そして、日本や米国を含む多くの国で、小数点の区切りは「.(ピリオド)」だ。したがって、「3.5」というテキストは日本人が期待する通りの数値に変換される。しかしながら、ここに落とし穴がある。今回Steam版『ファミレスを享受せよ』が不具合を出したフランス語の環境では、小数点は「,(カンマ)」と表記するのである。フランスでのルールに従えば、「3.5」とのテキストは小数点など含んでいない“間違った”数値として解釈されてしまうわけだ。これにより、「float.Parse」関数にてエラーが発生。結果としてゲームが立ち上がらない不具合が発生してしまっていたという。


弊誌は今回の不具合についてせきやdn氏に話を訊いた。同氏がこの不具合に気づいた発端としては、Steamにおけるユーザーフィードバックがあったそうだ。「ゲームが起動しない」との報告が寄せられ、同ユーザーとのやりとりのなかで「OSがフランス語設定だと起動しない」と判明。せきやdn氏自身でも不具合を確認し、原因判明・修正の糸口となったという。同氏は一連の出来事を、ほかの開発者が同じ轍を踏まないよう共有したそうだ。

実をいえば、この“カンマとピリオドの罠”は以前よりしばしば開発者たちを悩ませてきた。ゲームプログラミングにおいても複数例があり、たとえば『ポケモンBDSP』では、不具合の原因自体は明かされていないものの、今回と原因を同一にすると見られる現象が発生。こちらではNintendo Switchの本体言語設定をフランス語やドイツ語などに合わせている場合などに、ゲーム内電卓で計算がおかしくなっていた。フランスもドイツも「,が小数点で.が3桁の区切り」となる、いわば日本やアメリカでの扱いと逆のルールとなっている(関連記事)。

ほかにも、モバイル向け音楽ゲーム『TAKUMI³』では、「ベトナム語環境でゲームが起動しない」との不具合が発生。ベトナムでも数値におけるカンマとピリオドの扱いが日本などと逆であるため、たとえば「1.234」との数値が「1234」と間違って解釈され、巨大な誤差がゲームの挙動に反映されてしまうといった不具合が起きていた。こちらについても修正がおこなわれ、開発者であるTHIQXIS氏が原因を報告していた(関連記事)。

こうしたロケール(言語環境)による不具合は、たびたび開発者たちを悩ませてきた。また、ローカライズの対象に入っていない言語環境については、デバッグが手薄になりがちな事情があるかもしれない。過去に同様の事例があっても、なかなか思い至らない落とし穴となっているのだろう。せきやdn氏の呼びかけが通じ、同様のケースに見舞われる開発者が今後減るよう祈るばかりである。

『ファミレスを享受せよ』PC(Steam)版は、現在発売中。OSの言語設定がフランス語などで動作しない不具合は修正済みだ。Nintendo Switch版については今夏発売予定。




※ The English version of this article is available here