投稿記事

2024年 07月の記事 (2)

ruka(rikka) 2024/07/27 19:00

ブラウザウディタ:再始動1週間目の動き

進捗

こんにちは、rikkaです。

再起動宣言をしてから一週間が経ちましたので、進捗を報告します。

この一週間は、前回の挑戦分の記録をたどって思い出す日々でした。

先日の記事でも軽く触れたとおり、ブラウザの仕様や開発環境の進歩によって、前回の挑戦分のコードはそのままでは素直に動かなくなってしまっていました。

それを動くように弄りなおすというのが、ここ一週間の序盤の挑戦でした。

結論からいえば、その挑戦はうまくいきました!

つまり、これを以て前回の最新分まではリカバリーできたことになります。

まだまだ全体的に仮の実装な部分が多く、テストコードもロクに書けてないので今すぐ試して頂くというわけにはいきませんが、希望は絶えていません。

前回は報告をするにしても文面の体裁を気にして頻繁な更新を忘れてしまっていたのですが、今回は些細なことでも定期的な報告が出来ればと思っています。

以下、少し詳細な技術的なメモ等を含む感想になります。

今回の再挑戦にあたり、全体のビルド環境(Webで実行可能なアプリケーションの作成環境)を作り直しています。

基本的に、ウディタのGame.exe部分はDxLibとWindowsに依存したC++のコードで書かれており、これを極力弄らずそのままWeb向けにビルドしたいのです。

そのために前回は、CMakeをビルドツールとして使い、Emscripten(C++コードをWeb向けにビルドするためのコンパイラ/リンカ)を直接呼び出していました。

しかし今回は、これをzig言語という、ビルドツールとしても使えるプログラミング言語環境に置き換えています。

そしてzig言語は素晴しい環境なのですが、まだ発展途上なところがあり、破壊的な変更(仕様が大きく変わっていて事前に調べた関数が呼び出せなくなるなどの変更)が結構多くて、つまづきまくりました。

またEmscriptenもそれはそれでつまづきポイントがあります。

ここに書くのもどうかとは思うのですが、同じところでつまづいた人が検索して参考にでもできるように、少し詳細すぎるつまづきポイントを記録しておきます。

完全に読み飛ばして頂いて大丈夫です。

zig言語 x emscripten つまづきポイント

zig言語独自のヘッダ

zig言語は独自の、zig言語で再実装したlibcのヘッダを持っていて、標準で使うようになっています。

これがEmscripten標準のC言語実装と互換性がなく、そのまま使うと破滅します。

emscripten向けにビルドするときは、--nostdinc --nostdinc++ というコンパイラオプションをコンパイル時に指定してzig言語の標準ヘッダを抜く必要があります。

CとC++のヘッダの検索順序

↑の設定で標準ライブラリを抜くと、個別に指定しない限り標準ライブラリが使えなくなります。

そして、手動でbuild.zigにemscriptenのincludeパスを指定する必要があるのですが、この時普通にaddIncludePathすると、C++側で定義されているC言語向けヘッダが標準のC言語向けヘッダで隠蔽されてエラーが起きます。

C言語側のヘッダをaddAfterIncludePathで追加する必要があります(非優先的なincludeパスの指定)。

lib.addIncludePath(emsdkIncludeCppPath);
lib.addAfterIncludePath(emsdkIncludePath); 

そもそもzig言語からのemscriptenの利用方法が分からない

sokolというゲーム基盤的なライブラリのプロジェクトが参考になります。

sokol-zig

おわりに

以上です。

個人的なメモの要素が強くなってしまいましたが、今後もこんな感じで進めていけたらと思っています。

出来るだけ、前回のように途切れてしまわないように不要なことでも何か書いていくつもりです。

今後とも、よろしくお願いします。

1件のチップが贈られています

チップを贈るにはユーザー登録が必要です。チップについてはこちら

ruka(rikka) 2024/07/21 01:28

お詫びと再起動

はじめに、ごめんなさい。

一方的に連絡を絶ってしまったまま、二年以上が過ぎていました。

更新が全く途絶えていたにも関わらず、新規のフォロワーさんがしばしば増え続けていて、期待されていたことの自覚と、期待に応えられず逃げたことへの後悔が日に日に募り、復帰を決意するに至りました。

やらかしを正当化できるとは思っていませんが、返せなかった分の期待を少しでも返せるように、再度ウディタのブラウザ実行化に挑戦します。

およそ最悪からの遅すぎる再スタートに賛否あるかもしれません。見守って頂けると幸いです。

以下、前回のつまづいた所の振り返りや今後の展望など、少し技術的な部分を交えた話をします。

初めに手をつけたのは2022年の春でした。ここでの記事にもある通り、ほぼ完動するサンプルゲームをアツマールさんのところにアップさせて頂き、色んな方から好評を得ることができました。

実際にプレイされた方は覚えていらっしゃると思いますが、この時点でmidiを含む音源、フォント、描画処理の殆どがサンプルゲームの範囲では真っ当に動く状態でした。

なぜこの状態から頓挫してしまったのか。

自分でも情けないのですが、当時の(というか今も大して変わらない)ゲームを実行するための実行環境・コード群が、あまりにも汚くとっ散らかった状態であったため、こんなものを世に出していいものかと躊躇してしまった部分が大きかった……のです。

自分で設定する分にはなんとか動かせたのですが、手順のドキュメント化が進んでおらず、補助ツールを作ってみるもその使い方すら複雑になってしまい、自信が失われていく一方でした。

具体的に言えば、ウディタGame部分を魔改造により強○的にWeb向けビルドできるようにしたC++コード、ウディタが使っているDxLibのコア機能をそのまま使えるように改変したWeb向けDxLib、midi演奏用のrustライブラリを流用したJavaScript、ファイル周りの操作などをブラウザに適合するようC++に埋め込んだJavaScript、ゲーム画面になんとかなってるhtmlなど、とても綺麗とは言えない複雑なコード群から成っています。

今思えば、それでも使ってくれる方々を信じて公開すべきだったのかもしれません。

二年前に一度投げ出した後、2023年の夏にも一度、本格的に再挑戦しています。コードの複雑さは変わりませんが、このときはよほど大規模な作品でもない限り、スマホでも十分動く可能性がある。くらいのところまでは改善が進みました。

ただ欲張りすぎて、色んなスマホにも対応したい。一般的なスマホでも大規模な作品が動くようにしたい。と思い追求するうちに、力尽きてしまいました。

この当時の知見は記録に残している(もちろんソースコードも)ので、再始動は比較的楽に出来ます。

ただこの一年でブラウザの対応状況が変わっていたり、開発環境に微妙な変更が入っていたり、前回は捕捉できていなかった不明なエラーが出てしまうパターンも確認しており、メンテできる形ものを今すぐ出すのは難しい状況にあります。

出来れば最新のウディタの仕様にも追従したく、現在試行錯誤しているところです。

最後に、有料プランは廃止しました。頂いた分の支援は、今後の活動で返却するしかないと思っています。

来週辺りにまた記事を書く予定です。

以上、よろしくお願いします。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

月別アーカイブ

記事のタグから探す

記事を検索