バッチファイルで作るクトゥルフキャラクターシート簡易生成機

#目的
暇つぶしと手抜き

#必要な環境
windows

#必要な機能

1. 乱数生成
1. ダイスロール機能
1. 出力機能

#用意するもの
テキストエディタ
コマンドプロンプト

#手順

##乱数生成器を用意する
まずは乱数生成を行う必要があるので乱数生成器を作ります
`%RANDOM%`を使えば取得できますがそのままだと範囲が広いのでファイルで機能を作ってしまいます。

```bat:rand.bat

@echo off

if "%1" == "" (set /a DMINIMUM = 1) else set /a DMINIMUM=%1
if "%2" == "" (set /a DMAXIMUM = 6) else set /a DMAXIMUM=%2
set /a ROLL=(%RANDOM%*(%DMAXIMUM%))/32768+%DMINIMUM%

```

これで`rand.bat`を呼び出せば乱数が得られます
そのまま呼びだされた場合は1d6を振ったのと同じ出目が得られます
そのまま表示したいのであれば呼び出した後でechoか何かで`%ROLL%`を呼び出せば値が取得できます

##ダイスロール機能を作る
乱数生成器を使ってダイスロール機能を作ります
制限上2d6とかで振れませんが`dice 2 6`で2d6と同じ出力が得られるようにします

```bat:dice.bat

@echo off

if "%1" == "" (set /a LOOP=1) else set /a LOOP=%1
if "%2" == "" (set /a MAX=6) else set /a MAX=%2
if "%3" == "" (set /a ADD=0) else set /a ADD=%3


if not exist rand.bat goto ERROR

set /a SUM=0
set /a REMAIN=%LOOP%

set RESULT=[
:FOREACH
if "%REMAIN%" == "0" goto DISP
if "%LOOP%" NEQ "%REMAIN%" set RESULT=%RESULT%,
call rand.bat 1 %MAX%


set RESULT=%RESULT%%ROLL%
set /a SUM=%SUM%+%ROLL%
set /a REMAIN=%REMAIN%-1

goto FOREACH

:DISP
set RESULT=%RESULT%]
set /a SUM=%SUM%+%ADD%

echo %LOOP%D%MAX%+%ADD% = %SUM%%RESULT%

goto EOF

:ERROR

echo NotFind rand.bat

:EOF

```

そのまま作った場合`rand.bat`と同じ場所に置かないと動かないのでその辺りは適宜書き換えて下さい
`for`で書かないのは出目を記録しておきたいからと
可読性のため

##出力機能
ここまでくればもうすぐ
ダイスを振ってパラメーターを計算して吐き出しましょう
出力先を変えたり出力ファイル名を変えるなら`set FNAME=%NAME%.txt`の部分を書き換えましょう

```bat:charasheet.bat

@echo off

setlocal

set /p NAME="キャラクター名は？＞ "
set /p JOB="職業は？＞ "

@rem ステータス算出

@call dice 3 6 1>nul
set /a STR=%SUM%
@call dice 3 6 1>nul
set /a CON=%SUM%
@call dice 3 6 1>nul
set /a POW=%SUM%
@call dice 3 6 1>nul
set /a DEX=%SUM%
@call dice 3 6 1>nul
set /a APP=%SUM%
@call dice 2 6 1>nul
set /a SIZ=%SUM%+6
@call dice 2 6 1>nul
set /a INT=%SUM%+6
@call dice 3 6 1>nul
set /a EDU=%SUM%+3
set /a IDEA=%INT%*5
set /a LUCK=%POW%*5
set /a KNOW=%EDU%+5
set /a SAN=%POW%*5
set /a HP=(%CON%+%SIZ%)/2
set /a MP=%POW%

set /a DB=%STR%+%SIZ%
if %DB% LSS 57 set BONUS=+2D6
if %DB% LSS 41 set BONUS=+1D6
if %DB% LSS 33 set BONUS=+1D4
if %DB% LSS 25 set BONUS=0
if %DB% LSS 17 set BONUS=-1D4
if %DB% LSS 13 set BONUS=-1D6

set /a JSP=%EDU%*20
set /a PSP=%INT%*20

set FNAME=%NAME%.txt

type nul>%FNAME%
echo ========================================================= >>%FNAME%
echo. >>%FNAME%
echo [NAME] %NAME% >>%FNAME%
echo [JOB]  %JOB% >>%FNAME%
echo. >>%FNAME%
echo ========================================================= >>%FNAME%
echo [HP] %HP%/%HP% >>%FNAME%
echo [MP] %MP%/%MP% >>%FNAME%
echo ========================================================= >>%FNAME%
echo [STR]  %STR% >>%FNAME%
echo [CON]  %CON% >>%FNAME%
echo [POW]  %POW% >>%FNAME%
echo [DEX]  %DEX% >>%FNAME%
echo [APP]  %APP% >>%FNAME%
echo [SIZ]  %SIZ% >>%FNAME%
echo [INT]  %INT% >>%FNAME%
echo [EDU]  %EDU% >>%FNAME%
echo [IDEA] %IDEA% >>%FNAME%
echo [LUCK] %LUCK% >>%FNAME%
echo [KNOW] %KNOW% >>%FNAME%
echo [SAN]  %SAN% >>%FNAME%
echo ========================================================= >>%FNAME%
echo [BONUS] %BONUS% >>%FNAME%
echo [JobSkill] %JSP% >>%FNAME%
echo [PrivateSkill] %PSP% >>%FNAME%
echo ========================================================= >>%FNAME%

type %FNAME%





endlocal


```

#完成
これで完成です
あとは作ったファイルすべて同じフォルダに入れておくか
パスが通った場所においておけば使用できます