Elin(エリン)、ブラッシングの処理と勧誘条件等に関わるゲームデータの解析と解説です。
最終更新:2025/11/30
はじめに

現環境の主力はブラッシングとはいえ仕様が全くわからん~~~~~~
ということで、ソースコードを見てきました。
なお、私のプログラミングスキルは簡単なゲームを作ったりgoogleスプレッドシートでダメージシミュレーターを書いたことがある程度で、本業のソレではないので怪しい点にも注意して閲覧ください。
ソース:Elin Decompiled Documentation EA 23.240 Nightly
ブラッシング勧誘ざっくりまとめ
実践的な部分
- 呪エーテル抗体を投げて魅力マイナス化で確定成功
- ブラッシング終了時、プレイヤーの魅力(バフ込み) > 対象の最も高い能力値(バフ込みでない)で加入
- 呪い肉体復活、呪い精神復活は無効
- エーテル病の能力下落は有効
- プレイヤーへの祝福肉体復活やプチ変容も有効
- 調教スキルは加入部分には無関係
処理順とか
- ブラッシング開始
- 5ターンごとにブラッシング成否判定
- プレイヤーの魅力+調教と対象の魅力x難易度補正で対抗
- 判定に勝つと友好度UP、負けると友好度DOWN
- 25ターンでブラッシング終了
- ブラッシング終了時、ブラッシング判定の成否には関わらず、加入可能なNPCかつプレイヤーの魅力が最大主能力を上回っており、友好度が75以上なら加入
調教スキルが影響する部分
- ブラッシングの成否判定と友好度UP量に影響する
- 加入判定には影響しない
FuckType.tame
ブラッシングはFuckに分類される動作です。
FuckにはFucktype(fuck = 気持ちいいこと、 tame = 動物のブラッシング)があり、バリエーションには(Normal, Bitch, Succubus, NTR, Bloodsuck)があります。(吸血もfuck扱いのようです)
FucktypeがTame(動物のブラッシング)の場合の処理は以下のとおりです。
基本処理
ブラッシングは合計25ターン所要するfuckで、5ターンごとにブラッシングの成否判定が行われます。
if (i % 5 == 0)
{
if (EClass.rnd(cc.CHA / 2 + cc.Evalue(237)) > EClass.rnd(tc.CHA * num / 100))
{
num3 = 5 + Mathf.Clamp(num2 / 20, 0, 20);
}
else
{
num3 = -5 + ((!tc.IsPCFaction) ? Mathf.Clamp(num2 / 10, -30, 0) : 0);
fails++;
}
5ターンごとに訪れるブラッシングの成否判定は、
- 「プレイヤーの魅力/2 + 調教スキル」~ 0までの乱数
- 「対象の魅力 * 状況補正」~0までの乱数
で比較が行われます。
「プレイヤーの魅力/2 + 調教スキル」側が勝つと対象の友好度が増加し、
「対象の魅力 * 状況補正」側が勝つと対象の友好度が低下し、失敗数(ブラッシング終了後の敵対判定に使用)が加算されます。
状況補正
ブラッシング開始時、対象の状態によって補正が決定されます。
{
int num = 100;
if (!tc.IsAnimal)
{
num += 50;
}
if (tc.IsHuman)
{
num += 50;
}
if (tc.IsInCombat)
{
num += 100;
}
if (tc == cc)
{
num = 50;
}
num = 100(等倍)に倍率が加算されていく方式で、以下の条件で変動します。
- 対象が動物でない場合 + 50
- 対象が人間である場合 + 50
- 対象が戦闘中の場合 + 100
例:対象が動物でなく、人間ではなく、戦闘中の場合、numは100+50+100で250(難易度2.5倍)になります。
また、プレイヤーが自分自身にブラッシングする場合、numは50に固定されます。
友好度増減
ブラッシング判定成功時、判定失敗時の友好度の増減は、num2の値で補正されます。
int num2 = cc.CHA / 2 + cc.Evalue(237) - tc.CHA * 2;
num2は「プレイヤーの魅力/2 + 調教スキル – 対象の魅力*2」です。
num3 = 5 + Mathf.Clamp(num2 / 20, 0, 20);
ブラッシング判定成功時、対象の友好度は5 + num2 / 20(値は0~20までで制限される)増加します。最大で+25の友好度を得ます。
num3 = -5 + ((!tc.IsPCFaction) ? Mathf.Clamp(num2 / 10, -30, 0) : 0);
ブラッシング判定失敗時、プレイヤー勢力でない場合、対象の友好度は-5 ~ -35低下します。低下量はnum2によって補正されます。(プレイヤーの魅力と調教スキルが高いほど減少量ダウン、対象の魅力が高いほど減少量UP)
既に有効な対象へのボーナス抑制
int num4 = 20;
if (tc.IsPCFactionOrMinion && tc.affinity.CurrentStage >= Affinity.Stage.Love)
{
num3 = ((EClass.rnd(3) == 0) ? 4 : 0);
num4 = 10;
}
totalAffinity += num3;
tc.ModAffinity(EClass.pc, num3, show: true, showOnlyEmo: true);
cc.elements.ModExp(237, num4);
対象がプレイヤー勢力かつ、Love以上の友好度の場合、獲得友好度と経験値が抑制されます。
獲得友好度はブラッシングの成否に関わらず1/3の確率で+4になります。
獲得経験値は本来は20ですが、条件を満たす場合は10になります。
スタミナ増減
if (EClass.rnd(4) == 0)
{
cc.stamina.Mod(-1);
}
また、ブラッシング判定1回毎に、1/4の確率でスタミナが1減少します。
ブラッシング終了時の判定
25ターン、5回判定のブラッシングが終了すると、終了判定に移ります。
if (chara == EClass.pc)
{
EClass.player.stats.brush++;
}
対象がプレイヤーだった場合、brush++のステータスを付与します。
if (totalAffinity > 0)
{
chara.Say("brush_success", target, owner);
}
else
{
chara.Say("brush_fail", target, owner);
num *= 5;
}
獲得した合計友好度がプラスの場合、調教成功時のメッセージが出ます。
そうでない場合は失敗時のメッセージが出て、num(敵対判定に使用)が5倍増加します。
加入判定
bool num2 = TraitToolBrush.IsTamePossible(target.Chara);
bool flag2 = num2 && chara2.affinity.CanInvite() && chara2.GetBestAttribute() < EClass.pc.CHA;
if (num2)
{
if (flag2)
{
chara.Say("tame_success", owner, target);
chara2.MakeAlly();
}
else
{
chara.Say("tame_fail", chara, chara2);
}
}
ターゲットの味方加入判定が行われます。
プレイヤー勢力に加入する条件は以下のとおりです。
- 勧誘可能なNPCである
- 友好度が勧誘可能以上の段階である(chara.affinity.CanInvite())
- 対象の最大主能力をプレイヤーの魅力が上回っている(GetBestAttribute())
対象の最大主能力 GetBestAttribute()
対象の主能力を取り出すGetBestAttribute()メソッドは以下のとおりです。
public int GetBestAttribute()
{
int num = 1;
foreach (Element item in elements.dict.Values.Where((Element a) => Element.List_MainAttributesMajor.Contains(a.id)))
{
int num2 = item.Value;
if (isChara && Chara.tempElements != null)
{
num2 -= Chara.tempElements.Value(item.id);
}
if (num2 > num)
{
num = num2;
}
}
return num;
}
キャラクタークラスの関数で、対象の最も高い能力値を返します。
冒頭にnum=1とあり、foreachループ中にnumより高い主能力が見つかった場合に逐次値を更新する処理のため、numは1以下になりません。
また、num2の比較時、Chara.tempElements.Value(一時能力上昇や低下)を引いているため、GetBestAttributeは一時能力低下、上昇を考慮しません。
ブラッシング勧誘のケースでは弱体化の手や、呪い肉体復活や呪い精神復活をかけても意味がないことになります。
勧誘可能な友好度かどうか affinity.CanInvite()
{
if (!EClass.debug.inviteAnytime)
{
return CurrentStage >= Stage.Respected;
}
return true;
}
affinity.CanInvite() (勧誘可能かどうか)関数は上記の通りで、Respected(信頼)以上の場合trueを返します。
敵対化の処理
if (fails > 0 && num > EClass.rnd(100))
{
chara2.DoHostileAction(chara);
chara2.calmCheckTurn *= 3;
}
ブラッシング中、1回以上失敗している場合かつ、numが0~100の乱数より大きい場合、対象が敵対します。
numは以下のように決定されています。
int num = ((!chara2.IsPCFaction) ? (chara2.IsHuman ? 10 : 5) : (chara2.IsHuman ? 5 : 0));
- プレイヤー勢力でない場合、人間NPCの場合は10、そうでない場合は5
- プレイヤー勢力の場合、人間NPCの場合は5、そうでない場合は0
調教に失敗した場合はnum*=5の処理が入るため、
- 調教失敗、非プレイヤー勢力の人間 = 50%敵対
- 調教失敗、非プレイヤー勢力の動物 = 25%敵対
- 調教成功、非プレイヤー勢力の人間 = 10%敵対
- 調教成功、非プレイヤー勢力の動物 = 5%敵対
- 調教失敗、プレイヤー勢力の人間 = 25%敵対
- 調教成功、プレイヤー勢力の人間 = 5%敵対
- プレイヤー勢力の動物 = 0%敵対
という敵対率になります。

コメント