Papyrusをコンパイルするまで

Mod作成

Sublime Text

Sublime Textのプラグインは公式が出しているものを大人しく使っておいたほうが良さそうです。

Sublime_Text
Maintenance

SublimePapyrusはSkyrim SEでは問題なく使えていましたが、Fallout 4だとどうやってもLinterを通せませんでした。

CK

起動が遅いです。SkyrimにはCK Fixesという便利ツールがあったのですが、Fallout 4にはないようです。

Skyrimとの違い

公式Wikiの解説を熟読しましょう。

Differences_from_Skyrim_to_Fallout_4
Maintenance

使える部品が増えて出来ることが増えているのはいいことなのですが、Mod開発で重要なのはノウハウです。Skyrimのやり方では通用しない部分がかなりあるのが大変です。

コマンドプロンプトでコンパイル

項目ディレクトリ
Fallout 4E:\Steam\steamapps\common\Fallout 4
MO2のmodsE:\MO2FO4DATA\mods
ソースコードMO2のmods\mod名\Source\Scripts
バイナリMO2のmods\mod名\Scripts

ソースコードのある場所でコマンドプロンプトを開きます。ソースコードのある場所にコマンドプロンプトへのショートカットを作っておいて、それを開くだけです。

以下のコマンドを入力してコンパイルです。

cc ソースコードのファイル名

Fallout 4は階層がサポートされました。ディレクトリを作って分けるのが通例みたいです。

このように、事前にディレクトリを作っておきます。

項目ディレクトリ
Fallout 4E:\Steam\steamapps\common\Fallout 4\Data\Scripts\Mod名
E:\Steam\steamapps\common\Fallout 4\Data\Source\Scripts\Mod名
ソースコードMO2のmods\mod名\Source\Scripts\Mod名
バイナリMO2のmods\mod名\Scripts\Mod名

ソースとバイナリを完全に分けています。Skyrim方式です。階層の数が重要であって、ディレクトリは統合しても別でもどちらでも問題ありません。配布やバックアップを考慮すると分かれている方がやりやすいと思います。

バッチファイル

カレントディレクトとサブディレクトリにあるすべてのソースコードのコンパイル状況を表示します。

check.bat (bat)

@echo off

setlocal enabledelayedexpansion

echo Source Binary Filename

for %%i in (*.psc) do (
    call :MyFunc %%i
)

for /d %%d in (*) do (
    for %%i in (%%d\*.psc) do (
        call :MyFunc %%i
    )
)

exit /b

:MyFunc
set psc=%1
set pex=..\..\scripts\!psc:.psc=.pex!

for %%a in (!psc!) do set psc_time=%%~ta
for %%b in (!pex!) do set pex_time=%%~tb

if "!psc_time!" equ "!pex_time!" (
    set cond==
) else (
    if "!psc_time!" gtr "!pex_time!" (
        set cond=+
    ) else (
        set cond=
    )
)

if "!pex_time!" == "" (
    set pex_time=
)

echo !psc_time! !pex_time! !cond! !psc!
exit /b

引数に指定したソースコードをコンパイルします。

cc.bat (bat)

@echo off

if ""=="%1" (
    echo Usage: cc ^<source^>
    exit /b 0
)

set psc=%1
set pex=%psc:.psc=.pex%

set my_psc=%CD%\%psc%
set my_pex=%CD%\..\..\scripts\%pex%

set fo4_dir=E:\Steam\steamapps\common\Fallout 4
set mo2_dir=E:\MO2FO4DATA\mods

set fo4_pex_dir=%fo4_dir%\Data\Scripts
set fo4_psc_dir=%fo4_dir%\Data\Scripts\Source
set src_base_dir=%fo4_dir%\Data\Scripts\Source\Base
set src_user_dir=%fo4_dir%\Data\Scripts\Source\User
set src_mcm_dir=%mo2_dir%\Mod Configuration Menu\Scripts\Source\User

set fo4_psc=%fo4_psc_dir%\%psc%
set fo4_pex=%fo4_pex_dir%\%pex%

set cc_bin=%fo4_dir%\Papyrus Compiler\PapyrusCompiler.exe
set cc_opt=-f="Institute_Papyrus_Flags.flg" -i="%src_user_dir%;%src_base_dir%;%fo4_psc_dir%;%src_mcm_dir%" -o="%fo4_pex_dir%"

echo === from %my_psc% ===
echo === to %fo4_psc% ===

if exist "%fo4_psc%" (
    echo "%fo4_psc%" が既に存在するのでコピーできません
    exit /b 0
)

if exist "%my_psc%" (
    copy "%my_psc%" "%fo4_psc%"
) else (
    echo "%my_psc%" が見つかりません
    exit /b 0
)

"%cc_bin%" "%fo4_psc%" %cc_opt%

del "%fo4_psc%"

echo === from %fo4_pex% ===
echo === to %my_pex% ===

if exist "%fo4_pex%" (
    move "%fo4_pex%" "%my_pex%"
) else (
    echo "%fo4_pex%" が見つかりません
)

タイトルとURLをコピーしました