トップページgamedev
1001コメント296KB

HSP - Hot Soup Processor [7]

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。04/06/10 04:28ID:cbXY3kVC
前スレ
  HSP - Hot Soup Processor
   http://game.2ch.net/gamedev/kako/1005/10053/1005332663.html
  HSP - Hot Soup Processor [2]
   http://game.2ch.net/test/read.cgi/gamedev/1035428757/
  HSP - Hot Soup Processor [3]
   http://pc2.2ch.net/gamedev/kako/1043/10436/1043609896.html
  HSP - Hot Soup Processor [4]
   http://pc2.2ch.net/test/read.cgi/gamedev/1047082415/
  HSP - Hot Soup Processor [5]
   http://pc2.2ch.net/test/read.cgi/gamedev/1058507713/
  HSP - Hot Soup Processor [6]
   http://pc5.2ch.net/test/read.cgi/gamedev/1078660876/

関連サイト
  ONION software (本家)
   http://www.onionsoft.net/
  HSP CENTER
   http://hspcenter.com/
  HSP ML
   http://garde.esprix.net/hsp-ml/
0241名前は開発中のものです。04/07/02 22:07ID:HI+qdwAE
…質問がアレな割には飲み込み早いな…
0242名前は開発中のものです。04/07/02 22:11ID:mGc4qyci
こういう人を「素質がある」と言います。
0243名前は開発中のものです。04/07/02 23:37ID:Xs2Xk3aN
意外な展開
0244名前は開発中のものです。04/07/03 04:41ID:2WodAWEa
じゃあ俺は「天才肌」やな
0245名前は開発中のものです。04/07/03 16:44ID:UDxUOEED
・・・あいつ餅食べてるのに飲み込みが速いな・・・
0246名前は開発中のものです。04/07/03 18:10ID:XlhOXqKC
・・・はじめてとか言ってた割に飲み込むのためらわないのな・・・
0247名前は開発中のものです。04/07/03 18:28ID:JQyZZc1j
;文字変数から指定した文字をカットする
;(単語としてでなく、含まれる文字を全て消去)
#module "cut"
#deffunc cut val,val
mref v1,24
mref v2,25
strlen ln2,v2
cn=0:repeat ln2
n="":p=0:strlen ln1,v1
repeat
peek c,v2,cn
getstr a,v1,p,c:p+=strsize:n+=a
if ln1<p:break
loop
v1=n
cn++:loop
return
#global
a="abcdefghij"
b="ef"
cut a,b:print a
stop

少し力押ししすぎかも...@
0248名前は開発中のものです。04/07/03 18:42ID:/qhhvoLJ
>>246
下ネタかよ!
0249名前は開発中のものです。04/07/03 19:38ID:pdzdu8d1
>>246
ジワジワワラタ
0250名前は開発中のものです。04/07/03 21:58ID:7oBXh8xl
簡単に書くと。

a="abcdefghij"
b="ef"

strlen len1,a
strlen len2,b
instr p,a,b

strmid c,a,0,p
strmid d,a,(p+len2),len1
e=c+d

mes e

stop
0251名前は開発中のものです。04/07/03 22:26ID:ROS80UqG
けど、それだと先頭のやつしか除去できないし、a
に含まれないのをbにいれると変になるとおもうが...
0252名前は開発中のものです。04/07/03 22:32ID:ROS80UqG
a="abcdefghijef"
b="ef"
repeat
strlen len1,a
strlen len2,b
instr p,a,b:if p=-1:break
strmid c,a,0,p
strmid d,a,(p+len2),len1
a=c+d
loop
mes a

stop

aに含まれるbを全部除去する
0253名前は開発中のものです。04/07/04 01:20ID:T231Rcst
a="abcdefghijef"

a=""
mes a
stop

aを全部除去する
0254名前は開発中のものです。04/07/04 18:56ID:cPwRxDVp
HSPで弾幕シューゲーを作るにあたって、
どうしても越えられない壁がある。処理速度。
当たり判定が突き抜けないように、1ドット移動ごとに当たり判定
ルーチンを巡らせる。
100個くらいのところでバテる。
2ドットごとに妥協して、さらに作り進めていくと、
自弾の処理でまたバテる。

・・・・・・・・・・どうしても弾幕ゲームが作りたいんだ・・・
HSPの限界はよく分かった・・・。
誰か、頼むからプログラムを速く走らせるコツを
教えてくれ・・・
0255名前は開発中のものです。04/07/04 19:00ID:T231Rcst
> HSPの限界はよく分かった・・・。
それ組み方の限界ジャーン?
0256名前は開発中のものです。04/07/04 19:10ID:P4QR7izT
プラグイン何使ってんだ?
0257名前は開発中のものです。04/07/04 19:18ID:Lnm60bAX
ルーチンを軽くする
0258名前は開発中のものです。04/07/04 19:49ID:WDudAYFD
計算の部分をマシン語で書く。
0259名前は開発中のものです。04/07/04 20:46ID:cPwRxDVp
>>255
そう言われるとそうだな、そう訂正するw

プラグインは
hspext:hspdxa:dsoundex
ジョイパッドの入力にhmmを使う予定

サイン・コサインは予め256コのテーブルに
保存して使ってるけど、狙撃するときに
アークタンジェント(ematan)を求めてる。
これって相当遅くなるのかな?

マシン語か、マシン語とアセンブラの違いも分からない
俺じゃかなり無理ぽいな
0260名前は開発中のものです。04/07/04 20:52ID:WDudAYFD
マシン語はCとかで書いてオブジェクトファイルから取ればいい。
マシン語がバイナリで、アセンブラがmov *, *とか。
0261名前は開発中のものです。04/07/04 21:03ID:T231Rcst
それ、ヒープ領域のコード実行が将来のWindowsで不可能になることまで
考慮して言ってるのかな
0262名前は開発中のものです。04/07/04 21:05ID:WDudAYFD
実行時に切り替えるようにすれば?
0263名前は開発中のものです。04/07/04 21:05ID:Lnm60bAX
パソコン買い換える。
0264名前は開発中のものです。04/07/04 21:09ID:WDudAYFD
VirtualProtectで実行権付けるのに成功したらマシン語
失敗したら普通に。


普通にDLLに分離してもいいと思うけど。
0265名前は開発中のものです。04/07/04 21:13ID:cPwRxDVp
repeat 10000000
A ++
loop
で3400msくらいかかった。
セレロン1.7Gですた。
みんなのも気になるよ。
晒してくれぃ。
0266名前は開発中のものです。04/07/04 21:51ID:lrgpw4Tf
プログラム晒してくれればこっちの環境で実行した結果出すよ
0267名前は開発中のものです。04/07/04 23:04ID:AwxSjHBx
>>254
当たり判定の具体的なルーチンを知りたい
0268名前は開発中のものです。04/07/04 23:15ID:Tz1UlT+e
>>265
当方、Pen4 2.4CG :XPで
2100msぐらいだったかな。

timeGetTime と GetTickCount の両方で測っても変わらなかったけど。
0269名前は開発中のものです。04/07/04 23:34ID:QCSFfhv9
>254
当たり判定を細かくやってるみたいだけど処理落ちするってことは弾の量はかなり多めなんだよな
たぶん弾速はそれほど早くないと思うが速度の速い弾以外は1フレーム1回当たり判定で十分なんじゃないか?
0270名前は開発中のものです。04/07/05 00:12ID:vHkGkVbr
>>265
gettime x,5:gettime y,6:gettime z,7
print "" + x + "/" + y + "/" + z
repeat 10000000
A ++
loop
gettime x,5:gettime y,6:gettime z,7
print "" + x + "/" + y + "/" + z
stop
--
こんな感じで計測してみた。
Pen3 800MHz で 約4250ms でした。

…しかし、抜けると分かっててもwaitのないループをHSPで実行するのはちょっと気持ち悪い。
0271名前は開発中のものです。04/07/05 00:14ID:pTJ3lo22
Cel300MHz 7681ms
0272名前は開発中のものです。04/07/05 00:22ID:SDlmg/4R
Pen4 2.80GHz 1422ms
0273名前は開発中のものです。04/07/05 00:32ID:pTJ3lo22
地球シミュレータ 0ms

・・・ごめん、ネタがつまらんね('A`)


それはおいといて、パフォーマンスカウンタ使おうと思うと思ったら
LARGE_INTEGER・・・面倒くさいな。
0274名前は開発中のものです。04/07/05 00:39ID:K58VA1M5
AthlonXP1600+ 1.4GHz 1312ms
0275名前は開発中のものです。04/07/05 00:45ID:C/CG0pTe
AthlonXP 2.0GHz 953ms
0276名前は開発中のものです。04/07/05 04:54ID:qXVXjwAx
Pen4 2.4GHz
2047ms
・・・オーバークロックでもするかな。。。
0277名前は開発中のものです。04/07/05 09:28ID:3DSRAvMh
AthlonXP2600+(Barton) 1.92GHz 953ms
IDT Winchip 200MHz 17695ms

Winchipマシンの方が桁違いに金がかかってるんだけどな・・・。
0278名前は開発中のものです。04/07/05 09:45ID:9ti8XsbL
いつからここはベンチマークスレになったんだ?
0279名前は開発中のものです。04/07/05 13:02ID:+nEAs13D
265だが、これで計った。
#include "dsoundex.as"

timer
TIM1 = stat
repeat 10000000
A++
loop
timer
TIM2 = stat
RE = TIM2 - TIM1
mes RE
stop
gettimeより精度が良いらしい。
0280名前は開発中のものです。04/07/05 13:14ID:+nEAs13D
連レススマソ
>>267
A1 = 自弾Xと敵Xの差
B1 = 自弾Yと敵Yの差
A2 = (-自弾サイズX<A1)&(A1<敵サイズX)
B2 = (-自弾サイズY<B1)&(B1<敵サイズY)
if (A2&B2)=1 : 当たり
みたいな感じでやってる。確かどっかの
ページで解説したやつをパクった。

>>269
自機のサイズが2*2で、移動量が1フレーム2〜4ドットにしてるから、
敵弾のスピードが1フレーム1ドット移動ならOKだけど、
もぅ少し速い弾(をメインにする予定)だとたまに抜ける時があるんですわ。
でも、ある程度場に残って邪魔する弾なんか作ったときは
参考にさせてもらうんで助言感謝
0281名前は開発中のものです。04/07/05 14:46ID:axZG/CqA
描画と当たり判定のフレームを別にする。
当たり判定はするが描画しないフレームが存在するようにする。
0282名前は開発中のものです。04/07/05 15:10ID:KIC705X9
>>273
LARGE_INTEGERは基本的に64bit整数型
0283名前は開発中のものです。04/07/05 17:59ID:xyIT+t5Z
プラグインにある衝突判定命令使うほうが速いだろう。
すり抜けが嫌なら、弾のスプライトを進行方向逆に少し伸ばして長方形にすれば?
その場合回転使うと描画が重くなる可能性あるので16方向くらいで用意したほうが良いけど。
0284名前は開発中のものです。04/07/05 18:45ID:+nEAs13D
>弾のスプライトを進行方向逆に少し伸ばして長方形に
斜め長方形は無理でそ? 長方形で縦や横に大きく当たり判定が
取れたとしても、斜めだと正方形の当たり判定にせざるを得ないから、
こだわるとレイヤー作って色取得、みたいなことしなきゃならないっぽい。
0285名前は開発中のものです。04/07/05 19:01ID:c3p/S4A+
ごめん回転させないと無理だった
0286名前は開発中のものです。04/07/05 19:18ID:C/CG0pTe
>>282
誰も聞いてないし
0287名前は開発中のものです。04/07/05 19:27ID:roeLUvRh
しかし100位の描画と判定で重くなるって
スペック低いだけじゃないの?
0288名前は開発中のものです。04/07/05 19:35ID:zUjbqKss
そういえば最低動作環境ってどれくらいを想定して作ってる?
よほど古いPCじゃない限り2Dシューティングで重くなるなんてことないと思うが
0289名前は開発中のものです。04/07/05 19:47ID:FU0s4jcc
PenIII-800&GeForce2くらいで動きゃ良いかなとは思ってるけど、
前に作ったのはPenIII-500でも平気だった。

最近はDirectX自体がそこそこのスペック(CPU&VGA)を要求するから
DirectX使うならある程度切り捨てないとダメかもよ。
0290名前は開発中のものです。04/07/05 21:05ID:+nEAs13D
自弾(50個)vs敵(20匹)が画面上いっぱいで
弾移動が1フレームに5ドットの時の当たり判定の場合

repeat 50  ;自弾50個
   repeat 5 ;1ドットずつ5回動かす
   自弾の移動処理
   10命令くらい?
   当り判定サブルーチンへ
   loop
loop
*ATARI
  repeat 20 ;敵数20
  当り判定命令20くらい
  loop
  return
とすると、
50*((5*20*20)+10) = 100500命令
うちのPCでは、上のほうでやったベンチマークテストの方法だと、
100500命令実行するのに25〜30msくらいかかる。

今は大雑把にやって全然正確な値じゃないけど、
少なくとも60FPSを保つのに必須の1フレーム16msは大幅に越えて
しまうのよ。

(上のルーチンを見て、255が言ったように
 組み方が悪い! と言う人が居たら是非、
 もっと速く動く組み方を教えて欲しい!
 お願いします!)
0291名前は開発中のものです。04/07/05 21:21ID:T1MN9eXN
HSPを卒業して他の言語で組む
0292名前は開発中のものです。04/07/05 21:26ID:KiQiLVex
>>290
マシンスペックは?
0293名前は開発中のものです。04/07/05 21:34ID:+nEAs13D
>>292
セレロン1.7G
メモリは関係ないと思うけど、256ある
VRAMは16Mあるから、
わけわからんエフェクトつけない限り、
描画関連で遅くなることはまずないと思う。
0294名前は開発中のものです。04/07/05 21:52ID:MIzlaErt
>>290
最初に、5ドット進む距離を内包する正方形でも求めて、敵を絞り込んでから1ドットずつ絞り込んだ敵で判定しては?
その処理方法だとこれぐらいかな?
0295名前は開発中のものです。04/07/05 22:12ID:+nEAs13D
>>294
お?それというのは、
敵が回りにいないのに当り判定をするのは無駄だから、
近い敵だけ探して判定すると言うこと?

まじゴメン、バカで理解できんかった・・・(='ω`)トホー
0296名前は開発中のものです。04/07/05 22:16ID:9NpQ14pT
自機に近い弾だけ先に抽出するとか…。
つか少しくらいのすり抜け気にするな。
0297名前は開発中のものです。04/07/05 22:19ID:9NpQ14pT
ああすまん重複
0298名前は開発中のものです。04/07/05 22:20ID:MIzlaErt
>>295
そう。
5回、全敵に対してやるのはかなりの無駄だからなぁ・・・
できるだけ、絞り込まないと。
0299名前は開発中のものです。04/07/05 22:22ID:Kz1aLSou
295さんじゃないけど、同じくstg作っているものとして関心あります。
いや、295さんと違い、わたしは弾のすり抜け問題なぞここを見て初めて認識したのですが。
es_checkで済ませ、すり抜けることがありうるなんて考えてもいなかった…。

294さんのおっしゃるのは、たとえば透明な、実際の弾よりも大きめのスプライトを一緒に飛ばして
それで簡易に当たり判定。
もしも判定がイエスならば、細かくさらに判定ということでしょうか?
0300名前は開発中のものです。04/07/05 22:23ID:Kz1aLSou
すみません、書き込んでいる間に返事がありましたね…。
0301名前は開発中のものです。04/07/05 22:42ID:+nEAs13D
ふむ、なるほど。
場に弾が200個あって5回判定すると1000、
近いのだけ抽出すれば、200回強で済むわけか。
今まで考えもつかなかったなぁ。これでかなり
処理速度が向上しそうだ、助言マジ感謝!

>>296
ゲームとして成り立つなら
気にしなくてもOKだとは思うけどねw

299氏も同じSTG製作ガンバロナー
0302名前は開発中のものです。04/07/05 23:20ID:MIzlaErt
さっき思いついたが、1フレームにそれぞれ高々数ドットしか進まないと考えると、
ある一定距離以上の弾は数フレーム間は判定をはしょってもいいな、と。
けど、FPSが揺れるから微妙か・・・
0303名前は開発中のものです。04/07/05 23:24ID:Gm3z7601
http://ww22.tiki.ne.jp/~y-shirakawa/hsp/sokudo.txt
速度。
へんなテストばっかりだが。
0304名前は開発中のものです。04/07/05 23:26ID:kc0/J2bA
アセンブリに落とせれば凄く勉強になるのになぁ。
0305名前は開発中のものです。04/07/05 23:27ID:ob4Ta5mK
ま、弾幕シューティングなら敵弾はゆっくり飛ばそうぜってことだな。
0306名前は開発中のものです。04/07/05 23:29ID:+nEAs13D
それは、敵弾と自機との距離の差を求めて、
一定範囲内に入ったら細かくするってこと?
なんかこのスレの方々は、優しくレスくれて涙が出るよ、ありがとう!

@弾を中心に範囲を決めたレイヤーを打ち出し、
 レイヤー内に対象が入ったら細かく判定する。
A弾と対象の差を求めて、対象と近づいた値のものだけを
 判定する。
どちらの方法も 大雑把→詳細 と、2重の判定を
するってことになるね。ふむふむ。
Aで差を求めたほうが簡潔でいいかなぁ?
0307名前は開発中のものです。04/07/05 23:42ID:MIzlaErt
>>306
あー、302のことは、一定距離以上の弾は、初めから判定を数フレームやらないという意味ね。
説明しにくいけど
1フレームにnドット進むならmフレーム進むのはその弾中心の円内(半径mnドット)にいるはず。
逆に、自機も同じようにその自機中心の円内にいるはず。
とすると、円同士が重ならなかったら、mフレームはその弾との判定はしなくてもいい。
・・・って感じなんだけど、実装するとなるとちょっとめんどくさそうだ・・・
それに計算で逆に遅くなっても意味ないし、バグの原因を作りそうだな・・・
あんまり効力はなさそうでメンゴ(汗
0308名前は開発中のものです。04/07/06 00:43ID:IGUAa5VB
>281
のやり方でいいんでない?

描画1フレーム中に「座標更新〜当り判定」を2回以上にする。
0309名前は開発中のものです。04/07/06 00:45ID:IGUAa5VB
そもそも弾幕ゲーのお約束として

遅い弾は小さくて大量
速い球はデカイor長くて小量

だし。
0310名前は開発中のものです。04/07/06 01:22ID:7+H5IcQB
軽くで良いからx軸y軸でソートしておく。
そうすると当たり判定が一気に省ける。
弾幕系は当たり判定に関係ない弾が多いから。
0311名前は開発中のものです。04/07/06 03:10ID:e7tYRum6
あれ?
もう一つのPC Duron 800MHz : Meで測ったら、2400msぐらい・・・
>>268とあんまり変わらない・・・
そういえば、前作ったシューティングゲー(DirectX無し)も>>268のPCより、Meの奴のほうがFPS出てるんだよね・・・
なんか、泣けてきた・・・
0312名前は開発中のものです。04/07/06 07:32ID:TMdzeQ9w
>>308
それをやってるから処理速度が追いつかなくなる、
という話題なのだが・・・。
当り判定が突き抜ける問題はいくらでも克服できるようになったよ。

>>310
すまそ相変わらずバカで理解できなかった・・・。
詳しくお願いしま。
031330804/07/06 08:18ID:IGUAa5VB
>312
スマソ.斜め読みしてた。
0314名前は開発中のものです。04/07/06 21:28ID:7g+fejGr
>312
310ではないけど例えば弾のX座標を取得して10,2040,50,80,100という風にソートしておいて
自機+-10以内に入ってる弾だけ当たり判定をするっていう事かな
やり方は違うけど弾幕の場合どの方法でも自機に近い弾だけを当たり判定するって考え方は同じかと
0315名前は開発中のものです。04/07/06 21:57ID:TMdzeQ9w
>>314
なるほど理解した
みんなのおかげで、自機に近い弾だけ判定するというのは
かなーり理解しました、マジ感謝、頭が上がらんよ
310(314)氏のも参考にして、時間はたっぷりあるので
簡易判定を飛ばす、差を求める、ソートする
の3つは全部試してみまつ

俺、暗算とか頭で考えるの苦手だから
実際に動かしてみないと理解できないんだよね
(プログラマにとって致命的だな)
試して、一番速いのを実装することにしまw
0316名前は開発中のものです。04/07/06 22:18ID:FsblUBdJ
ソートするなら、めんどくさい(高度な)ソートルーチン組まないと逆に低速化するだろう
と予言
0317名前は開発中のものです。04/07/06 22:39ID:eF+CU01H
正確にはソートというより並び替えだね。
大抵は前後の順番が入れ替わるだけだから。
弾を発射するときだけ重くなるけど他は大して重くならないと思う。
毎フレーム比較するんじゃなくて各フレームで部分部分比較すれば
そんなに誤差でないと思うし。
0318名前は開発中のものです。04/07/06 23:21ID:7Csr8IqI
当方のHSPがおかしい・・・
OS(XP pro)なんだが、await 1がどうみてもwait 1になってる・・・それもawait 10までwait 1。
でも、ソースによってはwait 1扱いにはならない。
なんだよ、これ・・・OTL
0319名前は開発中のものです。04/07/06 23:21ID:IwrX1p6y
goto命令で、
ラベル名に変数を使うのは仕様上無理らしいんですが、
他の方法でそれに近いことをするのは出来ませんか?
ないなら諦めて、地道に名前書きますが・・・
0320名前は開発中のものです。04/07/06 23:38ID:FsblUBdJ
>>319
onで実現できるように書いたら
0321名前は開発中のものです。04/07/06 23:43ID:KeokYOn1
on gotoでは駄目?
0322名前は開発中のものです。04/07/06 23:55ID:7KCQMY1y
>>315
速いソートルーチンを組んでおくと
ゲームを作る上でめちゃめちゃ便利なので
(ハイスコアのソートとか、ホーミング武器の標的選択順とか)
面倒でも手をつけておくことをおすすめする。
0323名前は開発中のものです。04/07/06 23:58ID:IGUAa5VB
>315
水を差すようで悪いが
労力の割にはあまり報われない気が…

自機当り判定が2*2ドットでも敵弾の最小8*8(東方の最小弾が見た目上はこの大きさ)が貫通するのに
相対速度が最低でも10ドット以上(敵弾の判定も見た目より小さいのかもしれないけど)

8*8の弾なんてせいぜい1フレームあたり6〜8ドット移動ぐらいまでだと思うし
1フレーム1〜2回くらいの当り判定計算でも十分な希ガス。
いくらなんでも1ドット動くごとに判定してやる必要はないと思う。

もっと小さい敵弾を想定しているならある程度仕方ないけど。

HPS製の飛翔鮎(体験版しかやったことないけど)みたいに思いきって最小敵弾16*16にするとか。
東方を久しぶりにやってみたら速い弾は16*16で8*8の弾は遅いし。(意外と16*16の弾がメインだった)
案外1フレーム1回しか計算してないのかもしれない。

032431904/07/07 00:11ID:dPzWJtlV
onですか・・・
分岐が数百個なので結構面倒ですね・・・。
文字が横に伸びてしまうのがちょっと難点ですが
それで頑張ってみることにします。
ありがとうございました
0325名前は開発中のものです。04/07/07 00:15ID:lBWiEqny
>>324
本家より引用
> on a goto *00,*01 ・・・ *09
> on a-10 goto *10,*11 ・・・*19
> on a-20 goto *20,*21 ・・・
0326名前は開発中のものです。04/07/07 00:21ID:du4anfvD
まあ、ラベル多いのが嫌ならラベル使わないような書き方にするしかないな。
if文が多くなりそうだけど。
0327名前は開発中のものです。04/07/07 00:41ID:+Z9KVqsR
>>323
うむ、それについては俺もさすがに考えた(X*Y弾がAドット移動して云々とか)
でも8*8の弾が5ドット動いて、自機が4ドット動けば9ドット
突き抜ける可能性があるのよー。あと、判定は特殊なことしない限り四角形だから、
カドに斜めに入っていったときは判定の幅が小さくなってしまう。

それから、8*8で円形を描くとカドが空くでしょ?
空いたところまで判定入れるの変だな、って思うから、
自分は8*8の弾だったら、判定は6*6or5*5にしたいのよ。

飛翔鮎はやったことないけど妖々夢はある(体験版だけど)
妖々夢の場合は弾遅いけど、怒首領蜂やケツイみたいなのだと
これスゲーなってのが良くある(と思わない?)
ま、そういう有名な弾幕STGを
パクろうってのは無理だけどね(汗
032832704/07/07 00:45ID:+Z9KVqsR
すまそ、よく見たら被った内容多かったね・・・
0329名前は開発中のものです。04/07/07 01:14ID:+Z9KVqsR
TMAX = 50:dim TX,TMAX:dim TY,TMAX:dim TF,TMAX:dim TH,TMAX
dim TSIZEX,TMAX:dim TSIZEY,TMAX:ZX = 30:ZY = 200
screen 0,300,300
*MAIN
redraw 1:redraw 0:color 255,255,255 : boxf:stick KEY,15
if KEY&1 : ZX -= 4
if KEY&2 : ZY -= 4
if KEY&4 : ZX += 4
if KEY&8 : ZY += 4
color 0,0,0 : boxf ZX,ZY,ZX+2,ZY+2:COUNT++:COUNT2++
repeat TMAX : if (TF.cnt=0)&(COUNT>=10):TF.cnt = 1:TX.cnt = 30:TY.cnt = 20:TSIZEX.cnt = 8:TSIZEY.cnt=8:TH.cnt=1:COUNT = 0
if (TF.cnt=0)&(COUNT2>=10):TF.cnt=1 : TX.cnt=30:TY.cnt=20:TSIZEX.cnt=8:TSIZEY.cnt=8:COUNT2=0:TH.cnt=2
if TF.cnt { if TH.cnt=1:TY.cnt += 7
if TH.cnt=2:TY.cnt += 5 : TX.cnt += 5
color 0,0,0 : boxf TX.cnt,TY.cnt,TX.cnt+TSIZEX.cnt,TY.cnt+TSIZEY.cnt
HX1 = TX.cnt-ZX : HX2 = (-TSIZEX.cnt<HX1)&(HX1<2):HY1 = TY.cnt-ZY : HY2 = (-TSIZEY.cnt<HY1)&(HY1<2)
if HX2&HY2 : color 180,0,0 : boxf : TF.cnt = 0
}
if TY.cnt>=300:TF.cnt=0
loop:await 16:goto *MAIN
ちょっと試してみたけど微妙だね・・・
向かって動くと抜ける、
カドは場所によって抜ける
033032304/07/07 01:26ID:f8rNee75
>.327
自機が2*2で敵弾が5*5なら貫通に必要な相対速度が7ドット以上やね。
自機が4ドット速度で5ドット速度で向かってくる敵弾に突っ込めば相対速度は9ドット。
貫通しちゃうね。

自機2*2って小さすぎないかな?(他の弾幕ゲーはどうなんだろ)
上の例なら、自機5*5なら相対速度9ドットでも貫通しないし。

すまそ
怒首領蜂やケツイはやったことないや。

飛翔鮎(hspdx+α)体験版 まだあった。
ttp://www.h7.dion.ne.jp/~tenkuu/

…なんて書いてたらテストサンプルが書きこまれてるのでやってみて寝まつ。
0331名前は開発中のものです。04/07/07 02:43ID:bXVEuOsH
飛翔鮎の2周目?って鬼のように弾速いけどすり抜けないのかな。
0332名前は開発中のものです。04/07/07 02:45ID:h5g+gru7
速すぎて、すり抜けたことが分からないとかw
0333名前は開発中のものです。04/07/07 04:04ID:BWy2IZPg
CAVEシューは確か弾は大きいのも小さいのも全て1ドットで自機は結構大きめだったような
弾幕シューだと一般的に弾か自機どちらかの当たり判定が極小でもう一方は見た目通りかな?
0334名前は開発中のものです。04/07/07 05:28ID:bXVEuOsH
でも怒蜂や大往生よりガルーダのほうが判定小さく感じるな。
0335名前は開発中のものです。04/07/07 07:19ID:f8rNee75
>333
敵弾のほうが小さいケースもあるのか。STGあんまりやらないからシランカッタ。
まぁ両方小さかったらほとんど当らなくなるだろうけど。

個人的にはSTGに限らずアクションゲームの当り判定は見た目どおりのほうが落ち着くな。

ところでリプレイ機能ってどうやってるんだろう?
全ての自機、敵、弾のフレーム毎の位置を記録してるのかな?

ランダム要素が一切なくて入力ログだけをとってるとか?
0336名前は開発中のものです。04/07/07 07:33ID:du4anfvD
>>335
ランダムがあろうとなかろうと関係ない。
なぜなら、乱数の時に自分でシード指定すれば
おなじ、ランダムを再現できるから。
0337名前は開発中のものです。04/07/07 08:33ID:f8rNee75
>336
なるほど。
なんにせよ敵も味方も座標ではなくて
挙動を再現する方法になるな。
0338名前は開発中のものです。04/07/07 08:45ID:du4anfvD
1フレーム単位で全部保存していったらとんでもない量になる。
まあ、せめてタイミング(敵&弾を出す)を覚えさせくぐらいにしないと。
でも、プログラムがめんどくさくなるからランダム再現が一番楽だと思う。
0339名前は開発中のものです。04/07/07 13:02ID:+m8/f1N8
フレームごとのキー入力再現で良いのでは…。
0340名前は開発中のものです。04/07/07 14:36ID:SnTIiwPj
>>339
敵の動きが毎回完全に一致ならね。
ランダム要素使ってるのにキー入力だけでやったらおかしなことになる。
0341名前は開発中のものです。04/07/07 16:22ID:goM21MnB
乱数シードもいっしょに保存しておけば1対1に対応するんじゃないか?
HSPの乱数がどうなってるか知らないけど。
■ このスレッドは過去ログ倉庫に格納されています