よくわからないバトルロワイアルを軽量化してみようその1

JavaScriptでマップを書いてみる、の巻。改

1.とりあえず

本当に二次狼の書く文章が役に立つのか。バグるんじゃないのか。むしろ嘘八百言ってるんじゃないのか。
そんな疑いの心を忘れないでください。
と言うかミスがあったら教えてください。
なお、これを導入して何ヶ月か経ちますが、今のところバグ報告は入っていません。

2.じゃ、始めますか

普通のサイトでJavaScriptを使う場合、JavaScriptに対応していないブラウザ(と設定)に配慮した使い方をするのが一般的です。
そうしないと、環境によってはサイトの中身がさっぱりわからないと言う状態に陥るからです。
しかし「よくわからないBR」の場合は、いくらJavaScriptを使った改造をしても文句は言われません。
このゲームは元々JavaScriptを使いまくっていて、これが動かないとそもそもゲームにならないからです。

今回はJavaScriptでマップを書いてみます。
どうしてJavaScriptを使うのかと言うと…。
cgiはサーバーが頑張ります。JavaScriptはブラウザ(各プレイヤーのPC)が頑張ります。
だから、cgiとJavaScriptで同じことができるのならJavaScriptにやらせたほうがサーバーへの負担が軽くなるはずです。
…理論上は。
ただし、JavaScriptはソースコードがプレイヤーにまる見えなので内部処理はcgiにさせて「表示」の部分だけをJavaScriptにさせます。

3.さて

JavaScriptでマップを書く関数を、jsファイルに保存してみました。 → map.js.txt
ファイル名を「map.js」として保存し、マップを描画したい位置で次の関数を呼び出してください。
引数は「プレイヤーの位置」と「プレイヤーのエントリータイム」です。プレイヤーの位置を表示したくない時は両方負数を入れてください。

sub WriteMap_Cgi
{
	my($nowdanger,$nextdanger,$maplist);

	foreach (@NowDanger) {
		$nowdanger .= $_->{Area}.',';#禁止エリア
	}
	if (@FutureDanger2) {
		foreach (@FutureDanger2) {
			last if (${FutureDanger2[0]}->{StartTime} < $_->{StartTime});#予告エリア
			$nextdanger .= $_->{Area}.',';
		}
	}
	if ($brEnv{KillReverseStartArea} > 0 && !(exists $brEnvM{MacHacked})) {#スタート地点禁止エリア
		if (@_[1] + $brEnv{KillReverseStartArea} <= $now) {
			$nowdanger .= $brEnv{StartArea}.',';
		} else {
			$nextdanger .= $brEnv{StartArea}.',';
		}
	}
	for ($j = 0; $j < $brEnv{AreaSize}**2; $j++) {
		$maplist .= $Map[$j]->{Code};#マップコード
	}
	$ResultOut .= <<__END__;
<script language="JavaScript" src="map.js"></script>
<script language="JavaScript"><!--
	WriteMap("$maplist","$nowdanger-1","$nextdanger-1",@_[0]);
//-->
</script>
__END__
}
4.注意

色々と改造したい人(それと、マップの大きさが10*10以外だったり地形のclassを変えている人)はmap.jsをメモ帳か何かで開いて書き換えてください。
あとはコメントで推して知ってください。そんなに複雑なことはやってないはず…。

禁止エリアの検索をブラウザ側にさせるため、理論上はそこそこ軽くなってくれるはずです。


5.で

困ったことに、私が使っているサーバーは処理がかなり早く、あんまりこの改造で早くなったような気がしないのですね(ぉぃ
と言うわけで、これを使ってゲームが快適になったら是非報告してください。泣いて喜びます。



2004/01/17 書いた
2004/02/22 バグ対策
2004/11/24 外部jsファイルを使うように
二次狼