今回は2025年版モビルファイトの対戦コードを公開いたします。
基本的には同じですが2017年と比べてやや変わっているところがあります。
皆さんの参考になれば幸いです(˘ω˘)
#
#戦闘実行処理
#
for(my $turn = 0; $turn < 200; $turn++){
#ゲージ増加スピード依存
$my_gauge += $my_sp;
$vs_gauge += $vs_sp;
if ($my_gauge >= $vs_gauge and $my_atcnt > 0){
$my_prob = int(rand(100) + 1);
$my_critical_prob = int(rand(100) + 1);
if ($my_hit >= $my_prob){
if ($$MY_STATE[22] >= 60 and $my_cho >= $my_critical_prob){
#直撃
$$VS_STATE[13] -= int(($my_at * 1.5));$my_meichu[$my_cnt] = 3;
} elsif ($my_cho >= $my_critical_prob){
#クリティカル
$$VS_STATE[13] -= int(($my_at * 1.4));$my_meichu[$my_cnt] = 3;
} else {
#ヒット
$$VS_STATE[13] -= int($my_at);$my_meichu[$my_cnt] = 2;
}
$my_gauge = 0;$my_atcnt--;$my_cnt++;
} else {
#ハズレ
$my_meichu[$my_cnt] = 1;$my_gauge = 0;$my_atcnt--;$my_cnt++;
}
#ターンメッセージ
$turn_msg .= "◯";
} elsif ($vs_gauge >= $my_gauge and $vs_atcnt > 0){
$vs_prob = int(rand(100) + 1);
$vs_critical_prob = int(rand(100) + 1);
if ($vs_hit >= $vs_prob){
if ($$VS_STATE[22] >= 60 and $vs_cho >= $vs_critical_prob){
#直撃
$$MY_STATE[13] -= int(($vs_at * 1.5));$vs_meichu[$vs_cnt] = 3;
} elsif ($vs_cho >= $vs_critical_prob){
#クリティカル
$$MY_STATE[13] -= int(($vs_at * 1.4));$vs_meichu[$vs_cnt] = 3;
} else {
#ヒット
$$MY_STATE[13] -= int($vs_at);$vs_meichu[$vs_cnt] = 2;
}
$vs_gauge = 0;$vs_atcnt--;$vs_cnt++;
} else {
#ハズレ
$vs_meichu[$vs_cnt] = 1;$vs_gauge = 0;$vs_atcnt--;$vs_cnt++;
}
#ターンメッセージ
$turn_msg .= "▽";
}
#敵撃墜判定
if ($$VS_STATE[13] <= 0){
$$VS_STATE[24] = 0;$$VS_STATE[13] = 0;
if ($nb_flag eq "1"){
$msg = "「$$MY_STATE[0]」が「$$VS_STATE[0]」を撃破。「$$VS_STATE[3]」機は中破。";
} else {
$msg = "「$$MY_STATE[0]」が「$$VS_STATE[0]」を撃破。「$$VS_STATE[3]」機は大破。";
}
$msg2 = "「$$MY_STATE[0]」が「$$VS_STATE[0]」を撃破。";
$result = 1;
#自爆大破
if ($mission eq "12"){
$zibaku_win_flag = 1;
$$MY_STATE[24] = 0;
}
last;
}
#自機大破判定
if ($$MY_STATE[13] <= 0){
$$MY_STATE[24] = 0;$$MY_STATE[13] = 0;
if ($nb_flag eq "1"){
$msg = "「$$VS_STATE[0]」が「$$MY_STATE[0]」を撃破。「$$MY_STATE[3]」機は中破。";
} else {
$msg = "「$$VS_STATE[0]」が「$$MY_STATE[0]」を撃破。「$$MY_STATE[3]」機は大破。";
}
$msg2 = "「$$VS_STATE[0]」が「$$MY_STATE[0]」を撃破。";
$result = 0;
last;
}
#自機攻撃終了判定
if ($my_atcnt <= 0){
$my_gauge = 0; $my_sp = 0; $vs_at = $vs_at_down; $vs_hit = $vs_hit_down;
if ($skill_msg eq ""){
$skill_msg = "自機の攻撃終了特殊補正が発動。";
}
}
#敵機攻撃終了判定
if ($vs_atcnt <= 0){
$vs_gauge = 0; $vs_sp = 0; $my_at = $my_at_down; $my_hit = $my_hit_down;
if ($skill_msg eq ""){
$skill_msg = "敵機の攻撃終了特殊補正が発動。";
}
}
#両機未大破終了判定
if ($my_atcnt == 0 and $vs_atcnt == 0){
$msg = "「$$MY_STATE[0]」と「$$VS_STATE[0]」は交戦後、戦闘を終了。";
$msg2 = "「$$MY_STATE[0]」と「$$VS_STATE[0]」が交戦。";
$result = 2;
last;
}
}