🧩

Clausewitz Engine で書くコードの憂鬱

に公開

この記事は coins Advent Calendar 2025 記事です。

遅刻王、チコキング

まえがき

筆者は:

  • Stellaris の mod 開発で Clausewitz Engine に触れています
  • 開発環境は VSCode で、変数などをハイライトしてくれる拡張機能しか入れていません
  • もっとよい環境があるだろうなあと思いながら中指を立てています。ちょっと自責の念がある
  • 普段は Python で遊んでいます。どっちかって言うと Python の方が好きです。Cは好きになれなかった。

当記事は延々と Clausewitz Engine で書くコードの悪口と憂鬱を書きます。後から読み返して俺はこんなにも愚かだったのか……と思うため、またこういう愚か者がいるのだということを世界に知らしめるための記事です。

Clausewitz Engine ってなんやねん

Paradox Interactive の出しているゲームでは、とりあえずこれのコードを喋れるようになっておけば mod が書けます。

Paradox Interactive 製のゲームと言えば、 Hearts of Iron や Stellaris 、  Victoria や Europa Universalis が該当します。いずれも、 mod 開発の手軽さや mod 開発コミュニティの巨大さが特徴のゲームです。

筆者は Stellaris の mod を作ろうと思い立ち、 Clausewitz Engine に触れましたが、まあこれが非常に苦しい。ゲームのコードってこんなに苦しいんですか?という顔になる。

実際の様子

何が苦しいん?

linter がない

なんとこの言語、 VSCode で書こうとすると linter がない。それはなぜかというと、当然ファイル拡張子が .txt なのでVSCode側でサポートしてるわけがない。さらに、有志が作っている拡張機能はゲームに増設される機能に対して更新が間に合っておらず、保守が放棄されているのでゲーム本体に潜ってコードをパクるしかない。

これは苦しい。

例えばこの言語は C/C++ よろしく {} で閉じないとバグるが、これはゲームを動かしても構造上問題がなければエラーログに出てこない。なので壊れる。

Syntax Highlight がない

ぶっちゃけ linter ないよりこっちの方が圧倒的に苦しい

再掲: Clausewitz Engine というやつのコードは .txt で記述する。賢い拡張子を使って何かの変換を書こうと思えばできないこともないのだろうが、あいにく筆者にはそのような技能がなく破滅している。

元コードがぐちゃぐちゃ

Stellaris に関しては、開発が10年以上続いていることもありもはやコードがグチャグチャになっている。例えば、その日数以内にそのイベントが1/2の確率で発生する MTTH (mean time to happen) という処理があるが、これはゲーム内で毎 tick (便宜上 tick と呼称する) ごとに判定処理を行うので非常にゲロ重い。30 tick ごとに処理するパターンもあるが、これも苦しい。どちらにせよ、確率計算が重いことに変わりはないので。

さて、これでは困るので、どういう処理が行われているのかというと n_month_pulse といったカスタムスクリプトを公式が用意しており、これに基づいてまとめて発生処理を行っている。確率に応じて選択的に処理したり、特定のイベントが重なって一気に発生するという処理だ。こっちの方がまだマシなので、それはそれでわからないこともない。

なんと、 documentation にはそんなことどこにも書いていないのである。

頭を悩ませるスコープの概念

イベントを記述する場合、そのイベントがどこで発生しているのかを記述しなければならない。例えば惑星イベントなら planet_event タイプで記述しなければならないし、艦船イベントなら ship_event タイプで記述しなければならない。

これの発生を司っているのがさっきの n_month_pulse で on_colony といったものを取り付ける処理や、特定の惑星を調査した ship を対象とするコードを書くことに相当するのだが、このスコープ管理が非常にややこしい。

例えばイベントが ship で発生した場合、それの発生源に相当するのは planet からなのだが、イベント自体は ship で書かなければならず、そしてこれを country というスコープに移そうとすると owner といった処理を別途噛ませないといけなくなる。

この認識が正しいのかは保証できない。 documentation がないので……

苦しいなら書くなという話

当たり前のことだが、苦しいならそんな言語捨てて別ので書けばよい、あるいは別のゲームで実装すればよい、という話になるのだが、それはそうと筆者はパラドゲー沼に落ちた人間である。

Stellaris でのゲーム体験は、他の何にも代替することができない。なので、この苦しいコードと付き合い、出来上がったものを見てウホウホすることしかできないのである。

できたもの

いかがでしたか?

今なら Stellaris は 1347 円でプレイできます!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Stellaris: Expansion Subscription とセットで一カ月だけ買ってDLCフルセットの世界を体験してみましょう!コンテンツが多すぎて一生啜って生きていられるぞ!!!!!!!!!!

毎回のプレイが唯一無二のプレイ体験になること間違いなし!銀河を探索し、拡張し、開発し、殲滅しよう!

前後記事へのリンクは、投稿時点では記事がないので貼れません。そもそも僕も遅刻です。いかがでしたか?

ほなまた。

Discussion