@パーティーⅡに移行する際に追加された新システム『@ダンジョン』
これは普通のステージと違って、結構面倒な処理が多く、またバグが発生しやすいのが難点です。
此処ではバグを発生させずに新ステージを追加する方法を乗せていって見ましょう。
①とりあえず新規データを作成する
mapディレクトリを開くと、デフォルトなら0~12と名の付いたフォルダが出てきますね。
此処に、13と名づけたフォルダを作りましょう。
13を開くと当然中身はからっぽです。
では、1.cgiを作成して以下の文章を貼り付けてみて下さい。
# 最大ターン
$max_round = 80;
# マップ
@maps = (
[0,0,0,0,0,0,0,1,1,1],
[0,1,1,0,1,1,0,0,0,1],
[E,1,0,0,0,1,1,1,0,1],
[1,1,1,0,1,1,1,1,0,1],
[1,0,0,0,0,1,C,B,0,1],
[0,0,1,1,1,1,1,1,1,1],
[A,1,0,0,1,0,1,0,0,1],
[0,1,0,0,0,0,0,0,D,1],
[0,0,0,0,1,0,1,0,0,1],
[1,1,1,1,1,S,1,1,1,1],
);
# イベント
$map_imgs{A} = '扉' if $event !~ /A/;
sub event_A {
return if $event =~ /A/;
if ($event =~ /D/) {
$npc_com .= "$mは敵から奪った鍵を使った!";
$event .= 'A';
}
else {
$npc_com .= "$mは扉を押したり引いたりしてみたが、ビクともしない…";
++$px;
}
}
$map_imgs{B} = '扉' if $event !~ /B/;
sub event_B {
return if $event =~ /B/;
if ($event =~ /E/) {
$npc_com .= "$mは敵から奪った鍵を使った!";
$event .= 'B';
}
else {
$npc_com .= "$mは扉を押したり引いたりしてみたが、ビクともしない…";
++$px;
}
}
$map_imgs{C} = '凸' if $event !~ /C/;
sub event_C { $map="_2"; $npc_com.="$p_nameは次の階へと進んだ…"; }
$map_imgs{D} = '敵' if $event !~ /D/;
sub event_D { return if $event =~ /D/; $event .= 'D'; $npc_com.="扉の鍵を持った敵が現れた!<BR>下級騎士『世界を崩壊に導く者共が居たぞ!』"; &get_boss_data_a; &add_boss; }
$map_imgs{E} = '敵' if $event !~ /E/;
sub event_E { return if $event =~ /E/; $event .= 'E'; $npc_com.="扉の鍵を持った敵が現れた!<BR>下級騎士『お前たちのせいで封印が解かれようとしている!』"; &get_boss_data_b; &add_boss; }
sub get_boss_data {
@bosses= (
{
name => '上級騎士',
tmp => 'スパート',
hp => 600,
at => 180,
df => 330,
ag => 270,
get_exp => 70,
get_money => 30,
icon => 'mon/524.gif',
job => 305,
sp => 100,
mp => 400,
},
);
}
# モンスター
@appears = ();
@monsters = (
{
name => '下級騎士',
tmp => 'スパート',
hp => 400,
at => 120,
df => 220,
ag => 180,
get_exp => 35,
get_money => 15,
icon => 'mon/520.gif',
job => 305,
sp => 50,
mp => 200,
},
);
1; # 削除不可
サテ、では一つずつ説明していくとしましょう。
改造を加えながらですけどね。
# 最大ターン
$max_round = 80;
これが説明どおりのターンの部分です。
活動限界って事ですね。
# マップ
@maps = (
[1,C,1],
[1,0,1],
[1,0,1],
[1,0,1],
[1,0,1],
[1,0,1],
[1,A,1],
[1,D,1],
[1,S,1],
[1,1,1],
);
マップの地図の事です。
一般的には1が壁で0が道、[]の外は全部1と指定されます。
また、以下に出すイベントを設定する場合は、
2~9、A~Zの記号を扱う事ができます。
但し、Sを設定するのを忘れないで下さい。
Sがスタート地点となります。
# イベント
$map_imgs{A} = '扉' if $event !~ /A/;
sub event_A {
return if $event =~ /A/;
if ($event =~ /D/) {
$npc_com .= "$mは敵から奪った鍵を使った!";
$event .= 'A';
}
else {
$npc_com .= "$mは扉を押したり引いたりしてみたが、ビクともしない…";
++$px;
}
}
$map_imgs{C} = '凸' if $event !~ /C/;
sub event_C { $map="_2"; $npc_com.="$p_nameは次の階へと進んだ…"; }
$map_imgs{D} = '敵' if $event !~ /D/;
sub event_D { return if $event =~ /D/; $event .= 'D'; $npc_com.="扉の鍵を持った敵が現れた!<BR>下級騎士『世界を崩壊に導く者共が居たぞ!』"; &get_boss_data_a; &add_boss; }
一つ一つ説明すると、
凸とか敵と書いてあるのは実際にマップに表示される物を指します。
AはDを実行しているなら通行可能な壁です。
Cはステージ変更の事で、/map/13/_2.cgiの同地点に飛べます。
また、Dはボスを呼び出すスクリプトです。
sub get_boss_data_a {
@bosses= (
{
name => '下級騎士',
tmp => 'スパート',
hp => 400,
at => 120,
df => 220,
ag => 180,
get_exp => 35,
get_money => 15,
icon => 'mon/520.gif',
job => 305,
sp => 50,
mp => 200,
},
);
}
これを別途加えることで、そのイベントの発生時に強制的に戦闘を行う事ができます。
宝箱も同様に見て下さい。
最後に通常モンスターの設定としてstageと同じように
# モンスター
@appears = ();
@monsters = (
{
name => '光霊',
hp => 480,
at => 75,
df => 75,
ag => 600,
get_exp => 40,
get_money => 36,
icon => 'mon/070.gif',
job => 304,
sp => 50,
mp => 100,
},
{
name => '下級騎士',
tmp => 'スパート',
hp => 400,
at => 120,
df => 220,
ag => 180,
get_exp => 35,
get_money => 15,
icon => 'mon/520.gif',
job => 305,
sp => 50,
mp => 200,
},
);
を追加すれば完成です。
最終更新:2009年08月19日 08:11