〜 オブジェクト 〜
配置オブジェクトの総数を取得

現在配置されているオブジェクトの数を知る必要がある場合もありますが、取得する命令は用意されてません。
HSP2はBMSCR構造体、HSP3はHSPOBJINFO構造体にオブジェクト情報が入っているので、
コレを元にすれば、オブジェクトの総数を取得することができきます。
具体的に、HSP2はBMSCR構造体の164バイト(配列要素41)からのオブジェクトハンドルhCld、
HSP3はBMSCR構造体284バイト(配列要素71)にあるHSPOBJINFO構造体の先頭アドレス、
288バイト(配列要素72)から4バイト分のHSPOBJINFO構造体の連続する総数objmaxを取得し、
HSPOBJINFO構造体8バイト目のオブジェクトハンドルが使えるかをチェックしています。
HSP3はHSPOBJINFO構造体を見なくても連続する総数objmaxだけでイケそうですが、
現時点の最新HSP3.1では、バグなのか仕様なのか、オブジェクトをclrobj命令でクリアしたりすると
この数が現在の配置総数と一致しなくなるようなので、残念ながら使えません。
	

getobjmax
[パラメータなし]現在ウィンドウのオブジェクト数を取得するだけのため、パラメータは必要ない。
尚、取得結果はstatに格納される。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#module
#deffunc getobjmax
	mref stt, 64
	mref bmscr, 67
	stt = 0
	repeat 64, 41
		if bmscr.cnt : stt++
	loop
	return
#global

	repeat 10
		s = cnt
		input s, 100
	loop
	clrobj 6
	getobjmax
	mes "現在の配置総数:" + stat
	stop

総数 = getobjmax( )
総数取得したオブジェクト数の格納先を指定する。
[パラメータなし]現在ウィンドウのオブジェクト数を取得するだけのため、パラメータは必要ない。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#module
#defcfunc getobjmax local bmscr, local hspobjinfo, local i
	mref bmscr, 67
	if bmscr.72 {
		dupptr hspobjinfo, bmscr.71, bmscr.72 * 48
		repeat bmscr.72
			if hspobjinfo(cnt * 12 + 2) : i++
		loop
	}
	return i
#global

	repeat 10
		s = cnt
		input s, 100
	loop
	clrobj 6
	mes "現在の配置総数:" + getobjmax()