コンテンツにスキップ

Chill with You のタイムゾーン Bug

目次

Chill with You ~ Lofi Story というゲーム(実質ポモドーロタイマー)がある。結構気に入っている作品で、ヒロインが可愛くて、一緒にいてくれる感が強い(ポモドーロタイマーとしてはそこまで良くはないけど)。このゲームには「あなた」とヒロインが別のパラレルワールドにいるという設定がある。だからずっと、ゲーム内の時間と自分のローカル時間に時差があるのは設定の一部だと思って、具体的に何時間ズレてるかも計算せず、ずっと放置していた

それが 1.2 アップデート(1月27日)の後、Steam のコミュニティ掲示板でこんなコメントを見つけた:要するに「Linux 上で Proton を使ってこのゲームを起動すると、ゲーム内の時刻が常に UTC+0 で表示される」という内容。UTC(協定世界時)について簡単に説明すると、自分のところは UTC+8 なので、実際の時刻が 8:00 ならゲーム内は 0:00 と表示される。8 時間のズレ

ええっ?パラレルワールド設定とかじゃなくて、単にタイムゾーンが正しく読めてなかっただけ?!そりゃあちょうど 8 時間ズレるわけだ……


実はかなりシンプルな問題で、原因はすぐに判明した:Proton で変換実行されている Windows プログラムが、なぜか Linux システムのタイムゾーン情報を正しく読み取れていなかった。Linux ではタイムゾーン情報は通常 /usr/share/zoneinfo/ ディレクトリに格納されている。解決策は簡単で、起動オプションでタイムゾーンを明示的に指定すればいい。Steam の「ゲームのプロパティ」→「起動オプション」に以下を追加:

  • TZ=Asia/Shanghai:タイムゾーンを上海(北京時間)に指定
  • /usr/share/zoneinfo/:タイムゾーンファイルのディレクトリを指定

というわけで、こんな起動オプションが出来上がる:

Terminal window
TZDIR="/usr/share/zoneinfo" TZ="Asia/Shanghai" %command%

この起動パラメータを追加してからゲームを起動すると、時刻が正常に表示されるようになった

だいたいこんな感じ、本来は 1:31
だいたいこんな感じ、本来は 1:31

問題はこれでほぼ解決。自分もそのコメントに返信して解決策を共有しておいた。もし同じ問題に遭遇したら、この記事が役に立てば嬉しい。ちなみに自分は NixOS を使っている。本来なら /etc/zoneinfo を使うべきで、/usr/share/zoneinfo ではない(NixOS には /usr/share/zoneinfo ディレクトリが存在しない)。ただ、これでも動く。Steam の環境がうまく処理してくれるから

こんな感じで:

Terminal window
~ $ steam-run ls /usr/share/zoneinfo
Africa Egypt Hongkong Mexico ROK
America Eire HST MST Singapore
Antarctica EST Iceland MST7MDT Turkey
Arctic EST5EDT Indian Navajo tzdata.zi
Asia Etc Iran NZ UCT
Atlantic Europe iso3166.tab NZ-CHAT Universal
Australia Factory Israel Pacific US
Brazil GB Jamaica Poland UTC
Canada GB-Eire Japan Portugal WET
CET GMT Kwajalein posix W-SU
Chile GMT+0 leapseconds PRC zone1970.tab
CST6CDT GMT-0 leap-seconds.list PST8PDT zonenow.tab
Cuba GMT0 Libya right zone.tab
EET Greenwich MET ROC Zulu
Terminal window
~ $ ls /usr/share/zoneinfo
lsd: /usr/share/zoneinfo: No such file or directory (os error 2).