Skip to content

Instantly share code, notes, and snippets.

@oupo
Created September 17, 2010 12:46
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save oupo/584174 to your computer and use it in GitHub Desktop.
Save oupo/584174 to your computer and use it in GitHub Desktop.

テクニック値の計算

間違っている可能性が多分にあります

計算に使われる定数

近くの選手の値への倍率5
ダブルのときの補正20
トリプルのときの補正40
属性有利による補正10
属性一致による補正10
キーパーに向かってドリブルされてきた場合の補正60
GPの境目125
GPの境目210
こんしん!に必要なGP10

スキルに設定されている威力

スキル威力
キーパープラス110
スピードプラス110
シュートプラス110
ディフェンスプラス110
オフェンスプラス110
おいろけUP!90
イケメンUP!90
ちょうわざ!120
ぞくせいきょうか150
クリティカル!150
ラッキー!105
やくびょうがみ105
スピードフォース105
シュートフォース105
ディフェンスフォース105
オフェンスフォース105
ネバーギブアップ105
イケイケ!105
みんなイケイケ!105
こんしん!120

unitcalc

名前は勝手につけたもの

limitmagnificationrandom_widthburning_phaseshoot_powerpower
オフェンス側010402000
ディフェンス側020302000
オフェンス側(必殺技)0502015075
ディフェンス側(必殺技)0502015075
シュート0202020100
ループシュート0202020100
ボレーシュート・ヘディング0202020100
シュート(必殺技)05020151075
キーパー(表示用)030202000
キーパー030202000
キーパー(必殺技)0502015075
競り合い108020000
競り合い208020000
競り合いでキープするか06040000
シュートブロック0502015075
シュートブロック(シュート技)0502015075
kickbodyguardcontrolspeedgutsstaminaflags
オフェンス側040050505
ディフェンス側004050505
オフェンス側(必殺技)035050555
ディフェンス側(必殺技)003550555
シュート400050506
ループシュート1000350506
ボレーシュート・ヘディング3000015506
シュート(必殺技)400000556
キーパー(表示用)004000556
キーパー004000556
キーパー(必殺技)054000506
競り合い100300010104
競り合い203000010104
競り合いでキープするか01515200004
シュートブロック0035001050
シュートブロック(シュート技)3500100050

テクニック値計算ルーチン

if (キーマンがGK)
	unitcalc.power += (ボディ > 120 ? 13 : ボディ / 10)
if (キーマンがDF)
	unitcalc.body += (ガード > 120 ? 13 : ガード / 10)
if (キーマンがMF)
	unitcalc.control += (コントロール > 120 ? 13 : コントロール / 10)
if (キーマンがFW)
	unitcalc.kick += (キック > 120 ? 13 : キック / 10)

r = 0
r += (技の威力 + 技の成長度による威力アップ) * unitcalc.power
r += ステータスから基本となる値計算(unit, unitcalc)
r = r * 41 / 4096
r = r * (unitcalc.magnification + 100) / 100

if (ランダム計算をする場合) {
	; 0以上unitcalc.random_width未満の乱数
	r += r * rand(unitcalc.random_width) / 100
} else {
	r += r * (unitcalc.random_width / 2) / 100
}

if (バーニングフェーズ) {
	r += r * unitcalc.burning_phase / 100
}
r += r * (unitcalc.shoot_power * 必殺技じゃないシュートの4段階の強さ(0~3)) / 100

r += r * ダブルやトリプルによる補正を計算(unitcalc) / 100

r += r * 属性の相性による補正を計算(unit, opponent_unit) / 100

if (技の属性 == 選手の属性) {
	r += r * 属性一致による補正 / 100
}
r = r * スキルによる補正を計算(unit, opponent_unit, unitcalc) / 100

if (バーニングフェーズじゃない) {
	if (残りGP < GPの境目1) r = r * 90 / 100
	if (残りGP < GPの境目2) r = r * 90 / 100
}

if (unitcalc.limit > 0) {
	return min(r, unitcalc.limit)
} else {
	return max(r, unitcalc.limit)
}

キーマン

参照されるのは選手データに設定されているポジション

キーマンのステータスではないことに注意

  • キーマンがGK: テクニック値を計算する選手のボディ値が高いほど、必殺技の威力があがる
  • キーマンがDF: テクニック値を計算する選手のガード値が高いほど、ボディの値がテクニック値によく反映される
  • キーマンがMF: テクニック値を計算する選手のコントロール値が高いほど、コントロールの値がテクニック値によく反映される
  • キーマンがFW: テクニック値を計算する選手のキック値が高いほど、キックの値がテクニック値によく反映される

ステータスから基本となる値計算

return キック * unitcalc.kick +
       ボディ * unitcalc.body +
       ガード * unitcalc.guard +
       コントロール * unitcalc.control +
       スピード * unitcalc.speed +
       ガッツ * unitcalc.guts +
       スタミナ * unitcalc.stamina

ダブルやトリプルによる補正を計算

r = 0
n = 0

for (unit2 in 近くにいる選手) {
	r += ステータスから基本となる値計算(unit2, unitcalc) * 近くの選手の値への倍率 / 100
	if (属性(unit) == 属性(unit2) && ! むぞくせいフラグ(unit2)) {
		n ++
	}
}
if (n == 1) { ; ダブル
	r += r * ダブルのときの補正 / 100
} else if (n == 2) { ; トリプル
	r += r * トリプルのときの補正 / 100
}
r = r * 10 / 100

if (キーパーだったら(unit) && ほかいろいろな条件) {
	r += キーパーに向かってドリブルされてきた場合の補正
}

return r

技の成長度による威力アップ

12345
G普0381216
G速0261014
G遅04101418
真普0310
真速028
真遅0512
V普0310
V速028
V遅0512

属性の相性による補正を計算

if (むぞくせいフラグ(unit) || むぞくせいフラグ(opponent_unit))
	return 0

if (属性が勝っている(属性(unit), 属性(opponent_unit))) {
	if (ぞくせいきょうかフラグ(unit)) {
		return ぞくせいきょうかの威力 ; 150
	} else {
		return 属性有利の倍率 ; 10
	}
}
return 0

スキルによる補正を計算

r = 100
if (おいろけUP!フラグ(opponent_unit) && 性別(unit) == 男) {
	r = r * おいろけUP!の威力 / 100
}
if (イケメンUP!フラグ(opponent_unit) && 性別(unit) == 女) {
	r = r * イケメンUP!の威力 / 100
}
if (キーパープラスフラグ(unit) && キーパー時) {
	r = r * キーパープラスの威力 / 100
}
if (シュートプラスフラグ(unit) && シュート時) {
	r = r * シュートプラスの威力 / 100
}
if (ディフェンスプラスフラグ(unit) && ディフェンス時) {
	r = r * ディフェンスプラスの威力 / 100
}
if (オフェンスプラスフラグ(unit) && オフェンス時) {
	r = r * オフェンスプラスの威力 / 100
}
if (ちょうわざ!フラグ(unit)) {
	r = r * ちょうわざ!の威力 / 100
}
if (ランダム計算をする場合) { // コマンド選択の表示用テクニック計算ではfalse
	if (クリティカル!フラグ(unit) && rand(100) <= 10) {
		r = r * クリティカル!の威力 / 100
	}
	if (ラッキー!フラグ(unit)) {
		r = r * (rand(ラッキー!の威力 - 100) + 100) / 100
	}
	if (やくびょうがみフラグ(unit)) {
		if (rand(100) <= 10) {
			r = r * クリティカル!の威力 / 100
		} else {
			r = r * (100 - rand(やくびょうがみの威力 - 100)) / 100
			r = max(r, 1)
		}
	}
}
if (シュートフォースフラグ(unit) && シュート時) {
	r = r * シュートフォースの威力 / 100
}
if (ディフェンスフォースフラグ(unit) && ディフェンス時) {
	r = r * ディフェンスフォースの威力 / 100
}
if (オフェンスフォースフラグ(unit) && オフェンス時) {
	r = r * オフェンスフォースの威力 / 100
}
得点 = チームの得点取得(unit)
相手の得点 = チームの得点取得(opponent_unit)

if (ネバーギブアップフラグ(unit)) {
	if (得点 < 相手の得点) {
		r = r * ネバーギブアップの威力 / 100
	}
}
if (イケイケ!フラグ(unit)) {
	if (得点 - 相手の得点 > 0) {
		for (i = 0; i < 得点 - 相手の得点; i ++) {
			r = r * イケイケ!の威力 / 100
		}
	} else {
		for (i = 0; i < 相手の得点 - 得点; i ++) {
			r = r * 100 / イケイケ!の威力
		}
	}
}
if (みんなイケイケ!フラグ(unit)) {
	if (得点 - 相手の得点 > 0) {
		for (i = 0; i < 得点 - 相手の得点; i ++) {
			r = r * みんなイケイケ!の威力 / 100
		}
	} else {
		for (i = 0; i < 相手の得点 - 得点; i ++) {
			r = r * 100 / みんなイケイケ!の威力
		}
	}
}
if (こんしん!フラグ(unit) && 技が必殺技 && 残りGP >= こんしん!に必要なGP) {
	r = r * こんしん!の威力 / 100
}
return r

オフェンス・ディフェンスのコマンドバトルの勝敗

  • トータルテクニックの下限: 1
  • トータルテクニックの上限: 1200

勝つ確率は ((自分のトータルテクニックの3乗)+(相手のトータルテクニックの3乗)) 分の (自分のトータルテクニックの3乗)

シュート・キーパーの勝敗

とりあえずシュートブロックとシュートチェインは無視。

キーパートータルテクニックが (シュートトータルテクニック * 距離の補正) 以上だったらキーパーの勝ち

試合(not ミニバトル)時の距離の補正のグラフ:

距離の補正のグラフ

ただしCPU側のシュートの場合は距離を割る値が約0.8倍になるようです?詳細不明

補足

  • プラス系の効果範囲はスキルを持っている一人じゃなくてよくわからない効果範囲になっているよう。未調査
  • 競り合いはパスしたのが味方だったら競り合い1で敵だったら競り合い2の模様
  • 属性一致による補正は自分や相手にむぞくせいがついていてもかかる
  • 選手にむぞくせいがついていてもダブル・トリプルの補正はかかる(表示上はかかっていない)
    • 近くにいる選手の方にむぞくせいがついている場合はその選手はダブル・トリプルのカウントにはいらない (表示通り)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment