ランダムオプションの定義 - roratorio-hub/ratorio GitHub Wiki

司祭のローブに付くMatk+100のようなランダムオプションはカード・エンチャントとは別枠のデータとして
rndopt.dat.jsrndoptlist.dat.jsrndopttype.dat.js に定義されている
このページではそれらの設定ファイルをどう編集すればよいか解説する

手順の概要

  1. item.h.js を参照しながら rndopt.dat.js から任意のランダムオプションを拾い集める
  2. 拾い集めたランダムオプションを組み立てて rndoptlist.dat.js に追加する
  3. 追加したリストを組み立てて rndopttype.dat.js に追加する
  4. item.dat.js の weapon_lv にランダムオプションタイプIDを加算する
    フォーマットは {ランダムオプションタイプID}0000{武器Lv}

説明が雑なので後日追記予定

解析内容

item.dat.js

[
	4646,			# アイテムID
	60,			# 鎧
	0,			# 誰でも装備可能
	100,			# DEF
	700000,			# 武器レベル(防具=0)なのに謎の数字 
	1,			# カードスロット
	100,			# 重量
	170,			# 必要Lv
	"司祭のローブ",
	"シサイノロオフ",
	"",
	198,			# 鎧属性が聖
	6,			 
	42000000194,		# 純粋なLukが130以上のとき損傷しない
	1,
	42000000015,		# 純粋なLukが130以上のときMaxHP+30%
	30,
	100018,			# 精錬1ごとにDEF+20
	20,
	100019,			# 精錬1ごとにMDEF+2
	2,
	8000077,		# 精錬8以上のときボス耐性+5%
	5,
	8000108,		# 精錬8以上のとき人間(プレイヤー除く)耐性+7%
	7,
	0			# EOF
],

司祭のローブのランダムオプションは以下の5種類のリストが定義されている
それぞれのリストに含まれるランダムオプションの種類も数も異なる

  • Atk+, Str+, Vit+, Agi+, Int+, Dex+, Luk+
  • Atk+, Matk+, MaxHP%, MaxSP%
  • Hit+, Flee+, SP減少, 完全回避, Def+, Mdef+
  • 詠唱, ASPD, ディレイ
  • 水耐性, 地耐性, 火耐性, 風耐性

謎の weapon_lv の数字がこれを定義していると予想して調べていく
weapon_lv は item.h.js では ITEM_DATA_INDEX_WPNLV と定義されている

rndopttype

  • .h.js
"EnumRndOptTypeDataIndex",
[
	"RND_OPT_TYPE_DATA_INDEX_ID",
	"RND_OPT_TYPE_DATA_INDEX_LIST_ID_ARRAY",
],
  • dat.js
[7,[17,18,19,20,21]],

ITEM_DATA_INDEX_WPNLV の6桁目 =7 をインデックスIDと仮定すると
ランダムオプションのリスト数 = 5 が一致する
つぎは 17 ~ 21 が意味を持ちそうな別ファイルを見ていく

rndoptlist

  • .h.js
"EnumRndOptListDataIndex",
[
	"RND_OPT_LIST_DATA_INDEX_ID",
	"RND_OPT_LIST_DATA_INDEX_OPT_ID_ARRAY",
],
  • .dat.js
[17,[0,20,217,218,219,220,221,222]],
[18,[0,20,21,223,224]],
[19,[0,8,9,163,11,22,23]],
[20,[0,24,12,25]],
[21,[0,133,134,135,136]],

0 はランダムオプション無しと仮定すると
司祭のローブのランダムプションリストのそれぞれの数と一致している
並び順通りなら 20 = Atk+ のはずなので別のファイルを見ていく

rndopt

  • .h.js
[
	"RND_OPT_DATA_INDEX_ID",
	"RND_OPT_DATA_INDEX_SPID",
	"RND_OPT_DATA_INDEX_MIN",
	"RND_OPT_DATA_INDEX_MAX",
	"RND_OPT_DATA_INDEX_STEP",
	"RND_OPT_DATA_INDEX_SPECIAL_FLAG",
],
  • .dat.js
[20,17,0,200,1,0],

item.h.js より 17 = ITEM_SP_ATK_PLUS なので辻褄が合う
最小 0 ~ 最大 200 の範囲で 1 ずつ増やすことが出来る