この記事では、キャラクター生成時に生成されたキャラクターに装備がどう生成されるのかを解説します。
TL;DR#
装備の生成ロジックを大まかにまとめると以下のとおりです。
- キャラクターの種族によって、装備が生成されるか全く生成されないかが決まる
- キャラクターの職業によって、近接・遠隔武器の種類が決まる
- キャラクターのレベルによって、装備が生成される確率が上がる
- キャラクターの種別によって、ユニーク武器などの生成がされている
以下で細かい内容を見ていきましょう。
装備生成の仕組み#
装備の生成はChara.RestockEquip関数で行われています。1
Chara.RestockEquip関数が呼ばれる条件#
Chara.RestockEquipはChara.OnCreate関数から呼び出されています。この関数はrace.EQ.Length != 0 || !source.equip.IsEmpty()のときに呼び出されます。2
race.EQは、現在allが入っているか、空であるかのどちらかです。半数程度の種族がallを持っているようです。allがあれば基本的に装備が生成され、そうでなければ生成されません。
race.EQが空の種族でも、一部の種族はsource.equipに装備情報が入っているため、装備が生成されます。
source.equipはそのキャラクターがどのような種類の装備を持つか決めるための情報で、現在は遠隔武器を持つかどうかを決めるために主に使用されています。
source.equipに値が入っているキャラクターは非常に少なく、大道芸人、イーク、デュポンヌ、イゴーロナク、イモーロナク、ダゴンの6体のみです。
なお、source.equipに入っている値がnoneの場合はChara.RestockEquip関数が早期リターンするため、装備は生成されません。3現状これに該当するのはイークのみです。
Chara.RestockEquip関数の中身#
この関数内の処理はいくつかのステップに分かれています。
- キャラクターのidに基づいて、装備を生成
- キャラクターのid、
equipフィールドに基づいて、遠隔武器を生成 - キャラクターの種類を問わず、各部位の装備を生成
- その他細かい処理
具体的にそれぞれの処理を見ていきましょう。
キャラクターidに基づく装備生成#
キャラクターのidを指定して、特定の装備を生成する処理です。主にユニークキャラクターの初期装備品を生成するのに使われている他、A.I.Rなどの固有装備の生成にも使われています。
例えばキリアにゼフィールの怒りを装備させる処理は以下のようになっています。4
switch (id)
{
// ...
case "adv_kiria":
if (onCreate)
{
EQ_ID("sword_zephir");
}
break;
// ...
}onCreateはキャラクターの初回生成時にのみtrueになるフラグです。これによってキャラクターの装備が再生成されるタイミングでゼフィールの怒りが再生成されるのを防いでいます。
遠隔武器の生成#
遠隔武器の生成はキャラクターidとequipフィールドに基づいて行われます。
まず、キャラクターidに基づいた処理では特定のキャラクターに特定の遠隔武器を持たせています。 具体的には、現在はティケ、トルーパー、スカラベにレーザーガンを、デーヴにパンツァーファウストを持たせる処理が書かれています。5
それ以外のキャラクターはequipフィールドに基づいて遠隔武器が決定されます(Chara.RestockEquipを呼ぶ判定をするのに使っているのと同じフィールドです)。
このフィールドはCharaとJobにそれぞれ存在しており、Charaの方が優先されます。6
equipフィールドがarcherの場合はクロスボウか弓カテゴリから、inquisitorかgunnerの場合は銃カテゴリから装備が生成されます。7
なお現段階ではequipフィールドがarcherの職業は遺跡荒らしと狩人が該当し、gunnerは機工兵と異端審問官が該当します。inquisitorは現在該当する職業がありません。8
キャラクター種別を問わない装備生成#
ここではキャラクターの種別を問わず、各部位の装備を生成する処理について説明します。
まず、num変数が定義されています。これはキャラクターのレベルに比例し、またキャラクターのレアリティが高いほど大きくなります。また冒険者の場合は3倍されます。9
このnum変数は装備が生成される確率を決めており、数値が大きいほど装備が生成されやすくなります。
キャラクターのレベルが高くなれば確率が上がるため、深層では基本的に全ての部位が埋まるようになるでしょう。
以下では武器と防具に分けて装備の生成ロジックを解説します。 なお、以下の処理は種族がカオスシェイプの場合はやや異なった実装になります(増える部位に合わせて装備生成判定の回数が増えます)。
武器の生成#
武器は、CharaのタグとJobのweaponフィールドに基づいて生成されます。10
まず、Charaのタグにboxerが含まれる場合、格闘武器が生成されます。現在該当するのは毒の『ポイナ』、リザードマンの拳闘士、ミノタウロスの拳闘士のみです。
その他の場合、Jobのweaponフィールドに基づいて武器が生成されます。このフィールドには武器のカテゴリが配列で格納されており、その中からランダムに選ばれた武器が生成されます。
現在のJobとweaponフィールドの対応は以下のとおりです。
| 職業 | weaponフィールドの値 |
|---|---|
| 戦士 | sword,axe,blunt,polearm,scythe |
| 遺跡荒らし | sword,dagger |
| 魔法使い | staff |
| 農民 | scythe |
| 狩人 | dagger,axe |
| 魔法戦士 | sword,polearm |
| 観光客 | dagger,blunt,staff |
| ピアニスト | dagger,blunt,staff |
| 神官 | blunt,staff |
| 機工兵 | blunt |
| 異端審問官 | sword |
| パラディン | sword,blunt,polearm |
| 魔女 | staff |
| 処刑人 | scythe,axe |
| 陰陽師 | sword |
| プレデター | (空) |
| 唄い手 | staff |
| 錬金術師 | staff |
| 防衛者 | sword |
| なし | (空) |
生成される武器の本数は基本的に1本ですが、二刀流スキルを持っているキャラクターの場合は1/2の確率で2本目が生成されます。11
防具の生成#
防具は部位によって生成確率が異なります。胴体装備は必ず生成されますが、その他の部位は確率的に生成されます。12
その他細かい処理#
その他細かい条件について説明します。
阿修羅#
種族が阿修羅のキャラクターは、4本のランダムな武器が必ず生成されます。13
リュートの生成#
traitがTraitBardの場合、リュートが生成されます。また1%の確率でアル・ウードが生成されます。14
なおこれは職業には無関係です。bard (唄い手)という職業が存在しますが、職業がbardのキャラクターでtraitがTraitBardのキャラクターは現在存在しません。
現在traitがTraitBardのキャラクターは、嬢、温泉マーメイド、吟遊詩人のみで、どれも職業がピアニストのキャラクターです。
着ぐるみのバイト、天才画家『フェルメラ』、ルーリエの忘れられし海竜『デュポンヌ』も職業がピアニストですが、これらはtraitがTraitBardではありません。
盾の生成#
shieldタグを持つキャラクターは盾が生成されます。15
現在は防衛者、黄金の騎士、<ポーン>、<ナイト>、骸骨戦士、骸骨狂戦士、レッサーファントム、傭兵戦士、リビングアーマー、バスティオンが該当します。
最後に#
装備の生成ロジックを調べたので、記事にまとめてみました。
なおChara.RestockEquip関数からはChara.EQ_CATなどの関数を呼び出すことで装備を生成・装備しているのですが、これらの関数の中身までは今回は調査していません。
これを調査すれば生成される装備の具体的な内容が分かると思われます。今後機会があれば調査してみたいと思います。
-
https://github.com/Elin-Modding-Resources/Elin-Decompiled/blob/6413215f4c59899e80dc892f79cb80e5acdc617c/Elin/Chara.cs#L4688 ↩︎
-
https://github.com/Elin-Modding-Resources/Elin-Decompiled/blob/6413215f4c59899e80dc892f79cb80e5acdc617c/Elin/Chara.cs#L1624-L1627 ↩︎
-
https://github.com/Elin-Modding-Resources/Elin-Decompiled/blob/6413215f4c59899e80dc892f79cb80e5acdc617c/Elin/Chara.cs#L4695-L4698 ↩︎
-
https://github.com/Elin-Modding-Resources/Elin-Decompiled/blob/6413215f4c59899e80dc892f79cb80e5acdc617c/Elin/Chara.cs#L4717-L4722 ↩︎
-
https://github.com/Elin-Modding-Resources/Elin-Decompiled/blob/6413215f4c59899e80dc892f79cb80e5acdc617c/Elin/Chara.cs#L4876-L4889 ↩︎
-
https://github.com/Elin-Modding-Resources/Elin-Decompiled/blob/6413215f4c59899e80dc892f79cb80e5acdc617c/Elin/Chara.cs#L4690-L4694 ↩︎
-
https://github.com/Elin-Modding-Resources/Elin-Decompiled/blob/6413215f4c59899e80dc892f79cb80e5acdc617c/Elin/Chara.cs#L4896-L4908 ↩︎
-
なお、異端審問官のid, 英語表記は
inquisitorですが、equipフィールドの値とは無関係です。 ↩︎ -
https://github.com/Elin-Modding-Resources/Elin-Decompiled/blob/6413215f4c59899e80dc892f79cb80e5acdc617c/Elin/Chara.cs#L4910-L4914 ↩︎
-
https://github.com/Elin-Modding-Resources/Elin-Decompiled/blob/6413215f4c59899e80dc892f79cb80e5acdc617c/Elin/Chara.cs#L4924-L4941 ↩︎
-
https://github.com/Elin-Modding-Resources/Elin-Decompiled/blob/6413215f4c59899e80dc892f79cb80e5acdc617c/Elin/Chara.cs#L4936-L4939 ↩︎
-
https://github.com/Elin-Modding-Resources/Elin-Decompiled/blob/6413215f4c59899e80dc892f79cb80e5acdc617c/Elin/Chara.cs#L4942-L4974 ↩︎
-
https://github.com/Elin-Modding-Resources/Elin-Decompiled/blob/6413215f4c59899e80dc892f79cb80e5acdc617c/Elin/Chara.cs#L4915-L4921 ↩︎
-
https://github.com/Elin-Modding-Resources/Elin-Decompiled/blob/6413215f4c59899e80dc892f79cb80e5acdc617c/Elin/Chara.cs#L4976-L4983 ↩︎
-
https://github.com/Elin-Modding-Resources/Elin-Decompiled/blob/6413215f4c59899e80dc892f79cb80e5acdc617c/Elin/Chara.cs#L4984-L4987 ↩︎