VS2010とSDLSKKでビルド

Last-modified: 2017-03-10 (金) 22:49:31

概要

このページでは、Windows 版 The Battle for Wesnoth 1.8.4 の Visual Studio 2010 Express によるビルドと、SDLSKK による日本語入力機能の追加方法などを扱います。
ビルド手順は基本的に CompilingWesnothOnWindows に沿って行いますので、作業前にご一読ください。ただしくだんのページの記述とは異なる前提 (たとえば Visual Studio のバージョンなど) で作業を行うため、手順もやや異なります。

対象読者はこんな方々です:

  • Windows 利用者である
  • コマンドプロンプトでの操作が十分理解できる
  • C++ の基礎的な知識を持ち、プログラムのコンパイル経験がある、もしくは強い興味を持っている
  • うまくいかなくても、このページの執筆者とかにやつあたりしない常識を持っている

目次

ビルド

Visual Studio 2010 Express と Microsoft Windows SDK のインストール

Visual Studio 2010 Express のうち、ここでの作業でインストールすべきものはおそらく Visual C++ 2010 Express のみでしょうが、とりあえずうちではフルインストールされています。

SDK はうちでは Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1 を使用しました。これもおそらくは新しめのものであれば特にこのバージョンでなければならないこともないと思います。むしろこれより新しいのが出ているようなので、そちらのほうがいいかも。
(OpenTTD などのビルドでは、特定バージョン以前の SDK でないと音が出ない問題などが起きたりもしましたが、Wesnoth は SDL を使っているので、SDK については基本的なヘッダやライブラリが揃ってさえいれば問題は起きないでしょう)

ここで最低限、MessageBox API を使用した hello.c のビルドが問題なく行える状態にしておいてください。

CMake のインストール

cmake-2.8.2-win32-x86.exe を http://www.cmake.org/cmake/resources/software.html からダウンロードし、インストールします。
インストールの際、[現在のユーザのみパス追加(の意味の英文)] を選択してください。すべてデフォルトのまま進めた場合は、自分でインストール先 (C:\Program Files (x86)\CMake 2.8\bin あたり) を PATH に追加する必要があります。

Wesnoth ソースの展開

tar ボール wesnoth-1.8.4.tar.bz2 をダウンロードし、展開します。
wesnoth-1.8.4 ディレクトリができ、その直下に README や src ディレクトリがあるツリーとなっていることを確認してください。一段余計に wesnoth-1.8.4 ディレクトリができていたら修正してください。
(展開時、@LongLink というファイルが作成されても無視してかまいません。上書き確認されたら [いいえ] 。後から消してしまってかまいません)

関連ライブラリ群を固めた build essential 的なアーカイブ external.zip をダウンロードし、展開します。
展開すると external ディレクトリができ、直下には各種ライブラリのディレクトリが群れなしているはずです。
この external ディレクトリを wesnoth-1.8.4 ディレクトリ直下に移動してください。

libintl ライブラリの取得

external.zip に含まれる libintl は、なぜか Wesnoth インストーラパッケージに含まれるものと異なります。
インストーラに含まれるのは intl.dll ですが、external.zip に含まれるものは libintl3.dll で、さらにこの DLL は同時に libiconv2.dll も必要とします。
libintl3.dll も libiconv2.dll も external.zip に含まれているため、このままでも実害はありませんが、若干気になるため、バージョンを合わせておくことにします。
(ちなみに実際のところ、他の DLL もほとんどすべてバージョンが異なっているのですが、ロードされる DLL 名が異なるような違いがあるのは libintl のみです)

インストーラに含まれる intl.dll のバージョンは 0.17 で、ソースを持ってきてビルドしてもよいのですが、バイナリが Windows 用 GTK+ のページに置かれています。
ここにある intl.dll はインストーラに含まれるものと完全に同一なので、対応する開発用アーカイブ gettext-runtime-dev-0.17-1.zip をダウンロードし、展開します。
gettext-runtime-dev-0.17-1 ディレクトリは wesnoth-1.8.4\external に移動してください。

Boost ライブラリのビルド

external.zip が含む Boost ライブラリは VC9 (VS2008) 用のみなので、最新版を自前でビルドしなおすことにします。
(ビルド済みのライブラリもひとつずつ個別に落ちているので、暇な人は拾い集めてもかまいませんし、BoostPro と戯れてもかまいません)

ソースアーカイブ boost_1_44_0.zip と、ビルドツール boost-jam-3.1.18-1-ntx86.zip を http://www.boost.org/users/download/ からダウンロードし、展開します。
boost-jam-3.1.18-1-ntx86 内の bjam.exe を boost_1_44_0 ディレクトリに移動します。boost-jam-3.1.18-1-ntx86 ディレクトリはもう不要なので削除してください。
そして boost_1_44_0 ディレクトリを wesnoth-1.8.4\external に移動してください。

Boost が libboost*zlib*.lib の生成に zlib のソースを必要とする (bz2 と異なりこちらは Wesnoth のビルドに必須) ため、zlib125.zip をダウンロードし、展開します。
zlib-1.2.5 ディレクトリは wesnoth-1.8.4\external に移動してください。

ここでソースツリーがこんな感じであることを確認しておきます:

	wesnoth-1.8.4\
		attic\
		cmake\
		...
		external\
			boost_1_42\
			boost_1_44_0\
				boost\
				doc\
				...
				bjam.exe
				...
				bootstrap.bat
				...
				rst.css
			...
			gettext-runtime-dev-0.17-1\
				include\
				lib\
				make\
				manifest\
			...
			zlib-1.2.3\
			zlib-1.2.5\
				amiga\
				contrib\
				...
				zutil.c
				zutil.h
			msvc9-cmake.bat
		...
		src\
		...
		README
		...
		SConstruct
		wesnoth.kdevelop

個別に展開した書庫のトップが二重になっていたりしないかチェックしてください (特に external, boost_1_44_0, zlib-1.2.5 のあたりは要注意) 。

スタートメニューから VisualStudio コマンドプロンプトを開いて wesnoth-1.8.4\external\boost_1_44_0 へ移動し、以下を行います (2 行です):

bootstrap.bat
bjam -s ZLIB_SOURCE=%CD%\..\zlib-1.2.5 --without-mpi --without-python --toolset=msvc-10.0 link=static runtime-link=shared variant=debug,release threading=multi stage

bjam によるビルドには 10 分程度かかります。エラーが出ていなければ次へ進みましょう。
(エラーが出る場合、おそらく原因はソースツリーがおかしいか、Visual Studio がまともにインストールされていないかです。冷静に確認しましょう)

Wesnoth プロジェクトファイルの作成

wesnoth-1.8.4\external\msvc9-cmake.bat をエディタで開き、以下の箇所を変更します:

"Visual Studio 9 2008" → "Visual Studio 10"
boost_1_42 → boost_1_44_0
libintl-0.14.4 → gettext-runtime-dev-0.17-1
libintl.lib → intl.lib
(libintl-0.14.4 はヘッダとライブラリの 2 か所あるので注意)

そして実行すると、wesnoth-1.8.4 直下などに *.vcxproj* ファイルがいくつか作成されます。

Wesnoth のビルド

wesnoth-1.8.4\ALL_BUILD.vcxproj をダブルクリックし、表示されたアプリケーションの選択ダイアログで Visual C++ 2010 Express を選択してしばらく待つと、IDE が起動します。
(ソリューション Project をいったん [名前を付けて保存] しておき、次回からはここから起動するようにすれば、アプリケーションの選択を確認されずに済むようになります)
IDE が起動したらターゲットを Debug から Release に変更します。

実行ファイルアイコンの追加

このままビルドしても実行ファイルにアイコンが含まれません。
wesnoth-1.8.4\packaging\windows\wesnoth.rc を wesnoth プロジェクト直下にでも [追加]-[既存の項目] しておきましょう。
(ちなみにこのファイルにもうちょい記述を追加すれば、バージョン情報なんかも埋め込めることは言うに及ばずです)

ソースコードページ問題の回避

wesnoth プロジェクト内の generate_report.cpp, leader_list.cpp, multiplayer_connect.cpp の 3 ファイルがコードページについての問題を起こします。
leader_list.cpp と multiplayer_connect.cpp は、前もって UTF-8 から UNICODE に変換しておくだけでとりあえず問題を回避できます。
(IDE から [名前を付けて保存] で [エンコード付きで保存] を選び、エンコードに [Unicode - コードページ 1200] を指定してもよい)
generate_report.cpp も同様にしてエラーは回避できますが、おそらく問題の文字が化けたままになります。いったんビルドし、エラーが出た箇所の化け文字 (コード E28892: Mac で使われる全角マイナスらしい) をただの半角マイナスに書き換えてから再度ビルドするとよいでしょう (もちろんエンコード指定して保存は不要)。
(generate_report.cpp がどのタイミングで使われるものなのかよくわかっていないので、もしかしたらこの方法だと問題があるかも知れません。翻訳とかユニットデータ作成とかしてる方は要注意)

なおソースコードページの問題は海外で書かれたソースを扱う際よく出くわします。最も確実な対処法は、言語を英語に設定した環境を用意して、そこでコンパイル一切を行うことです。うちでも OpenTTD や Simutrans のビルドは英語モードにした Windows 2000 仮想マシンで行っています。

VS2015以降の場合、各プロジェクトの設定を変更してコンパイラオプション /utf-8 を使用すると、ソースコードの変更無しでコンパイルすることができます。

WINAPI 呼び出しのための加筆

wesnoth-core プロジェクト内の filesystem.cpp において、SHGetSpecialFolderPath の変数宣言 (470 行) とキャスト (472 行) が WINAPI 呼び出しになっていないため、このままだと --config-dir オプションを指定した場合に Run-Time Check Failure で落ちてしまいます。
以下のように双方に __stdcall を補っておきます:

	BOOL (__stdcall *SHGetSpecialFolderPath)(HWND, LPTSTR, int, BOOL);
	HMODULE module = LoadLibrary("shell32");
	SHGetSpecialFolderPath = (BOOL (__stdcall *)(HWND, LPTSTR, int, BOOL))
				GetProcAddress(module, "SHGetSpecialFolderPathA");

データロードダイアログでの曜日化け回避

現行の Windows バイナリではデータロードダイアログでの曜日表示が化ける問題があります。
原因は日本語 Windows におけるロケールや strftime の動作にあり、一番単純な対応方法は strftime でなくワイド文字版 (wcsftime) を使うことです。
しかしダイアログ左上に表示される年月日フォーマットがそもそも英語圏爆発で気に入らないため、strftime 呼び出し部を以下のように変更し、無理やり日本語 UTF-8 で曜日を持っておくことで対応してしまいましょう。
dialogs.cpp の 429 行 (データロードダイアログ左上):

	//const size_t res = strftime(time_buf,sizeof(time_buf),
						_("%a %b %d %H:%M %Y"),tm_l);
	const char* wd[] = {
		"%Y\xe5\xb9\xb4%m\xe6\x9c\x88%d\xe6\x97\xa5(\xe6\x97\xa5) %H:%M",
		"%Y\xe5\xb9\xb4%m\xe6\x9c\x88%d\xe6\x97\xa5(\xe6\x9c\x88) %H:%M",
		"%Y\xe5\xb9\xb4%m\xe6\x9c\x88%d\xe6\x97\xa5(\xe7\x81\xab) %H:%M",
		"%Y\xe5\xb9\xb4%m\xe6\x9c\x88%d\xe6\x97\xa5(\xe6\xb0\xb4) %H:%M",
		"%Y\xe5\xb9\xb4%m\xe6\x9c\x88%d\xe6\x97\xa5(\xe6\x9c\xa8) %H:%M",
		"%Y\xe5\xb9\xb4%m\xe6\x9c\x88%d\xe6\x97\xa5(\xe9\x87\x91) %H:%M",
		"%Y\xe5\xb9\xb4%m\xe6\x9c\x88%d\xe6\x97\xa5(\xe5\x9c\x9f) %H:%M"};
	const size_t res = strftime(time_buf, sizeof(time_buf),
						wd[tm_l->tm_wday], tm_l);

dialogs.cpp の 521 行 (データロードダイアログ各行):

	//format_string = _("%A, %H:%M");
	const char* wd[] = {
		"\xe6\x97\xa5\xe6\x9b\x9c\xe6\x97\xa5, %H:%M",
		"\xe6\x9c\x88\xe6\x9b\x9c\xe6\x97\xa5, %H:%M",
		"\xe7\x81\xab\xe6\x9b\x9c\xe6\x97\xa5, %H:%M",
		"\xe6\xb0\xb4\xe6\x9b\x9c\xe6\x97\xa5, %H:%M",
		"\xe6\x9c\xa8\xe6\x9b\x9c\xe6\x97\xa5, %H:%M",
		"\xe9\x87\x91\xe6\x9b\x9c\xe6\x97\xa5, %H:%M",
		"\xe5\x9c\x9f\xe6\x9b\x9c\xe6\x97\xa5, %H:%M"};
	char buf[40];
	if (strftime(buf, sizeof(buf), wd[save_time.tm_wday], &save_time) == 0)
		buf[0] = 0;
	return buf;

なお savegame.cpp の 133 行 と 171 行にも同様の箇所があるので手を入れておいてもいいかも知れません。
(それがいつ画面表示されるのかよくわかりませんが)

ビルド

ALL_BUILD プロジェクトを [ビルド] します。30分程度かかるはずです。
(おそらく必要なのは wesnoth.exe のみでしょうからビルドは wesnoth プロジェクトだけでもよいのですが、すべてビルドしても所要時間はさして変わりません)

テスト実行

実行ファイルは wesnoth-1.8.4\Release にあります。

実行にはパスの通った場所 (または同じディレクトリ) に wesnoth-1.8.4\external\dll 内のファイル群が必要ですし、設定ファイル等 wesnoth-1.8.4 直下にあるディレクトリも必要です。
めんどうなので、普段使っている実行ファイルのあるディレクトリに、ビルドした実行ファイルを名前を変えてコピーするのが一番楽です。

もちろん本格的にパッチ開発などを行う場合はデバッグ実行できないと都合が悪いので、上記とは逆に、普段使っているディレクトリの内容を実行ファイル以外そっくり Debug ディレクトリにコピーしてくるのが楽かもしれません。
なお、デバッグ実行する際は構成を Debug に変更し、[構成プロパティ]-[デバッグ] の [コマンド引数] だけでなく、[作業ディレクトリ] も確認しておく必要があります。
(デフォルトだと $(ProjectDir) になっていますが、デバッグ用の環境をまるごと wesnoth-1.8.4\Debug に作る場合は $(TargetDir) に変更しなければなりません)

ここまででようやく、バイナリ配布されているものと似たような代物を自炊できる状態となったことになります。
おともだちに実行ファイルをわけてあげる際は、VC++ 10.0 ランタイムもインストールするよう伝えるのを忘れないようにしましょう。

SDLSKK による日本語入力機能の追加

現状、私のような新参が Wesnoth で日本語入力を行おうとした場合に選べるオプションは SDLSKK のみです。
SDL-IM はあまりに古く、ビルド済みライブラリは Wesnoth の SDL_mixer 等と問題を起こします。パッチファイルは最新の SDL にはもはやまるで当たりません。
SDL_inputmethod とか SDL_textmanager などといったものは蜃気楼にすぎません。そんなものはこの世界には実在しません。日本 SDL 界隈の都市伝説と言ってよいでしょう。
最も素晴らしい成果をあげつつあるのが、Google Summer of Code における SDL 用 IME 対応パッチ群です。これは現時点で既に問題なく日本語 IME をコントロールできていることをビルド済みバイナリで確認できるという驚愕の代物ですが、いかんせん SDL 1.3 用であるため、Wesnoth で恩恵を受けることは現状できません。

よって、SDLSKK になるわけです。
私自身 SKK を使ったことすらなかったのですが、使ってみるとまあ案外どうにかなるものでした。

入力中.jpg

SDLSKK のビルド

ライブラリそのもののビルドのため、tar ボール sdlskk-0.4.tar.gz を http://www.kmc.gr.jp/~ohai/sdlskk/ からダウンロードし、展開します。
ディレクトリ sdlskk-0.4 は wesnoth-1.8.4\external に移動します。

SDKSKK は SDL, SDL_ttf, iconv を必要とします。SDL と SDL_ttf は Wesnoth 本体でも使われていてヘッダとライブラリも external に含まれているのでそれを使用することにします。
iconv は Wesnoth 本体では直接は使用されていませんが、なぜか external に DLL だけが含まれています。
これも縁なので、この DLL に対応するヘッダとライブラリのアーカイブ libiconv-1.9.2-1-lib.zip を http://sourceforge.net/projects/gnuwin32/files/libiconv/ からダウンロードし、展開します。
ディレクトリ libiconv-1.9.2-1-lib も wesnoth-1.8.4\external に移動してください。

Makefile.in を見ながらライブラリ (とサンプル) 用プロジェクトを作成し、ビルドします。DLL としてビルドする場合、DEF ファイルを書くか、ヘッダファイルに手を加えるかする必要があります。
なお filelibSDLSKK.zip に含まれるビルド用プロジェクトファイルを wesnoth-1.8.4\external\sdlskk-0.4 にコピーしてビルドすると、wesnoth-1.8.4\external\sdlskk-0.4\Release に以下 (とその他大勢) が得られます:

libSDLSKK.lib
libSDLSKK.dll
testrender.exe

testrender の実行

テストプログラム testrender を実行するためには、いくつかのファイルを wesnoth-1.8.4\external\sdlskk-0.4\Release にコピーする必要があります。

まず wesnoth-1.8.4\external\dll から以下の DLL をコピーします:

libfreetype-6.dll
libiconv2.dll
SDL.dll
SDL_ttf.dll
zlib1.dll

適当な日本語 TrueType フォント (msgothic.ttc とか) を sample.ttf にリネームコピーします。

sdlskk-0.4 に含まれる rule_table を test_rule_table にリネームコピーします。

SKK 用辞書として http://openlab.ring.gr.jp/skk/wiki/wiki.cgi?page=SKK%BC%AD%BD%F1#p7 あたりから SKK-JISYO.L.unannotated.gz をダウンロードし伸長、ファイル SKK-JISYO.L.unannotated を test_jisyo にリネームコピーします。
(SDLSKK は拡張書式辞書をサポートしていないとのことなので、unannotated を選択します)

これで testrender が起動できます。SDLSKK を使うのに必要なことのほぼすべてがここに書かれていますので、必ず一読してください (wesnoth プロジェクトを読み解くのに比べれば些細なものです) 。

Wesnoth への取り込み

ここまでついてこられた方には、wesnoth ソリューションへのヘッダやライブラリの追加について改めて説明する必要もないでしょう。
以下に filewesnoth-1.8.4-sdlskk.diff についての説明を述べます。

textbox.cpp

基本的なテキスト入力処理がここで行われています。
(text_box.cpp ではありません。wesnoth-1.8.4\src\widgets 下にあるものです)

キー入力が handle_event() で、入力済み文字列の描画が draw_contents() で処理されるので、ここに SDLSKK 用処理を追加します。
ハンドル用変数宣言やその初期化コード等もコンストラクタ・デストラクタに追加します。
パブリックメソッド decide_skk() は、未確定文字列が残っていればその確定を行い false を、そうでなければ true を返します。これについては後でまた触れます。

なお本来であれば辞書やルールの読み込みは設定ファイルを経由して起動時に行うべきですし、変換中の描画に使用するフォントも設定にしたがうべきです。
しかし面倒なので (特にフォントに関して Wesnoth 流を貫こうとすると、SDLSKK を書き換えなければならなくなる)、実行ファイルと同じ場所に置かれた sdlskk_jisyo, sdlskk_rule_table, sdlskk_ttf をコンストラクタでオープンする方法を採っています。

play_controller.cpp

textbox.cpp はほぼすべてのキー入力を直接処理しますが、それはあくまでも文字列入力にかかわるものだけです。
そして Enter キー入力は、文字列入力ではなく、テキストボックス内容の確定を意味します。すなわち Enter キーにまつわる処理は textbox.cpp には存在せず、その親の管轄となっています。

play_controller.cpp はユーザコマンドの入力等に textbox.cpp を使用しています。そして Enter キーにより、入力中の文字列をコマンドとして実行します。
(「や、ユーザコマンドに日本語入力しないし」とか言わないように。最初にテストケースとして多用したのが --test で起動したときのユーザコマンドだったのです)
しかし日本語の入力中には Enter キーを入力確定に使いたいものですよね? そのために textbox.cpp に設けたのが decide_skk() で、textbox.cpp の親は Enter 受付時にこれを呼び出します。false であれば何もせず、true であれば通常通りの処理を行うようにします。

multiplayer_ui.cpp

マルチプレイのロビーの処理がここに書かれています。play_controller.cpp と同じく、decide_skk() を呼び出すよう変更を行います。

menu_events.cpp

ゲーム画面で入力されたキーは、まだテキスト入力モード等に入っていなければ hotkeys.cpp で吟味され、多くは menu_events.cpp のメソッドを呼び出して処理されます。
チャット用のテキスト入力モードに入るための speak() メソッドもここにありますが、チャット用テキストボックスを最初から日本語入力モードにしておくと便利そうですので、textbox.cpp に設けた activate_skk() 呼び出しを追加しておくことにします。

ビルド

ソースにパッチを当ててビルドすれば OK です。
sdlskk_jisyo と sdlskk_rule_table は、SDLSKK のドキュメントにも書いてありますが、UTF-8 にコンバートしておく必要があります。

以下からビルド済み書庫をダウンロードできます:
http://sourceforge.jp/projects/wesnoth-ja/downloads/48962/wesnoth-1.8.4-sdlskk-20100915.zip/

ただしこの手順でビルドしたバイナリは公式サーバのうち server2 にしか接続できないという問題があります。ローカルサーバへの接続であれば問題ありません。

SKK について

詳しくは専門のページを参照してください。何も知らなくても、ひらがなだけなら問題なく入力できるはずですが…。

  • 連文節変換とか甘えたことを考えちゃだめです。
  • 変換が必要な個所 (漢字とかカタカナとか) は大文字で入力を開始する必要があります。
  • スペースを押して候補を送っていきますが、行き過ぎたときは x キーで戻ります。どん詰まりまで進めると単語登録モードになって問い詰められますが、単に Enter すればキャンセルできます。
  • カタカナとひらがなの切り替えは q キーです。大文字で入力を開始してから q キーを押してもカタカナ入力できます。
    (なお本パッチでは、Enter 入力時に暗黙で q キー処理を行っていますので、Eruhu[Enter] とすればエルフと入力できます。Eruhuq でもいいですけど)
  • l キーで半角英数モードに、L キーで全角英数モードに移ります。CTRL+j を押すと日本語モードに戻ります。

…はいわかってます。「そんなん使えねーよ!」とか思ってらっしゃいますね?
私も最初はそう思ってましたけど (だからえらく長い間 SDL-IM と無駄な格闘を続けてしまった orz) 、案外どうにかなるもんですよ。そもそもチャットのときって、そんなに難しい言葉を入力したりしないし。

そうそう、肝心なことを書き忘れてました:

  • SKK のオンオフ切り替えは SHIFT+SPACE で行います。ゲーム中のチャットなんかでは最初から SKK がオンになっていますが、英字入力等のためにオフにしたい場合は SHIFT+SPACE してください。
    間違ってAlt+漢字キーを押したりすると、見えないどこかで本物の IME が目覚め、何も入力できなくなります。慌てず焦らずもう一度Alt+漢字キーを押しましょう。

1.9.1 への適用

以下の手順変更で、1.9.1 のビルドも可能です:

  • Boost ライブラリのいくつかのファイル名を修飾なしに変更 (またはリネームコピー) する必要があります。
    boost_iostreams.lib, boost_regex.lib, boost_system.lib, boost_thread.lib がリンクに必要です。
  • プロジェクト ana は削除します。(ana-static はそのまま残しておく)
  • コードページ問題を起こすソースファイルが、generate_report.cpp から src\serialization\string_utils.hpp と src\marked-up_text.cpp に移動しています。

ただしこの手順でビルドしたバイナリは公式サーバのうち server2 にのみ接続できないという問題があります。ローカルサーバへの接続であれば問題ありません。

1.8.5 への適用

以下の手順変更で、1.8.5 のビルドも可能です:

  • Boost ライブラリのいくつかのファイル名を修飾なしに変更 (またはリネームコピー) する必要があります。
    boost_iostreams.lib, boost_regex.lib がリンクに必要です。

公式サーバのうち server2 にしか接続できない問題はかわりありません。


なお 1.8.5 対応版については、さらにコードを追加した上で MinGW によりビルドしたインストーラ形式のものを公開しています。これは公式サーバへの接続問題も解消されています。
http://sourceforge.jp/projects/wesnoth-ja/downloads/49432/wesnoth-1.8.5-win32-SDLSKK-20101019.exe/
これのビルド手順はMinGWとSDLSKKでクロスビルドで参照できます。

上記インストーラのビルドに使用したパッチ wesnoth-1.8.5-sdlskk-20101019.diff を適用したソースツリーは、以下の点で VC++ でのビルドにおいても有用です。

  • wesnoth.rc のプロジェクトへの追加済みです。
  • generate_report.cpp, leader_list.cpp, multiplayer_connect.cpp の書き換えによるコードページ問題対応済みです。
  • filesystem.cpp の書き換えによる __stdcall 対応済みです。
  • dialogs.cpp の書き換えによる曜日化け対応済みです。
  • SDLSKK ヘッダ・ライブラリがプロジェクトファイルへ追加済みです。
    プロジェクトファイルを作成する際に filemsvc10-cmake.bat を (必要なら修正して) 使用すると便利です。

なお SKK-JISYO.L.unannotated は data/sdlskk/SKK-JISYO.L.unannotated に、rule_table は data/sdlskk/rule_table に、コピー先とファイル名が変更になっています。フォントファイルのコピーは不要です。