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

シューティングゲーム製作技術総合 4機目

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。04/08/09 19:53ID:oKoFsB2n
ゲームプログラマなら誰もが通る、もしくは、通った道。青春の香り?
それは「シューティングゲーム製作」・・・。

このスレでは、そんなシューティングゲームの製作技術や技術の検証、成功談
失敗談笑い話、難易度の設定方法論、多弾の是非などについて語り合いましょう。
もちろんBulletMLなどで弾幕を作成してみたり、自分の作ったシューティングを
晒してみたり、プロジェクトをはじめてみるなどもOK!

ただし、シューティングの未来とか既存のゲームの話題などは、関連する他の
スレでやってくれ。

■前スレ
シューティングゲーム製作技術総合 3機目
http://pc5.2ch.net/test/read.cgi/gamedev/1087339516/l50
0529名前は開発中のものです。04/09/15 20:37:05ID:m9TW7yZ5
完全に狙うなら角度にこだわる必要は無いと思う。
単位ベクトル求めれば良いだけの話でわ。
0530名前は開発中のものです。04/09/15 20:37:09ID:Wff+Y3n9
>>527
うるせーバカ。

最近やったいろんな同人シューやってみての経験談でつ。
アーケードでもあったなw
0531名前は開発中のものです。04/09/15 20:44:32ID:dTc45Y+D
>>530
なんだ自分の実装したゲームの話じゃないのか
手抜きや技術不足も演出の一部と思って遊んだ方が楽しいよ
0532名前は開発中のものです。04/09/15 20:45:07ID:Wff+Y3n9
>>528
いや、それとは全然ちゃうケースだと思いまつ。
ファミコンの斜め弾が速いのは、多分スターフォース。
0533名前は開発中のものです。04/09/15 20:47:09ID:Wff+Y3n9
>>531
自分のじゃないよ。ヘンだな〜?
と思ったら、そうならない様にするでしょ。
0534名前は開発中のものです。04/09/15 20:50:43ID:Wff+Y3n9
なぜか途中で送信してしまっつ。

>演出の一部
グラIIの赤いレーザー安地とか美しいでつね。

連投スマソ、>>527もごめん。怒らないでねっつ。
0535名前は開発中のものです。04/09/15 20:50:54ID:M4L32DN2
完全に狙ってると言われてもスターフォースくらいしか思い浮かばない。
0536名前は開発中のものです。04/09/15 20:53:15ID:Ad6nAFeR
256度で荒いとか言ってるヤシは多分自分でゲーム作ったこと無いんでないかと…
0537名前は開発中のものです。04/09/15 21:08:05ID:8jBB4L1H
(自機の当たり判定半径)+(最小の弾の当たり判定半径)以上の誤差を持つのはチョト辛い。
だから640x480サイズだと、当たり判定の大きさによっては256じゃ辛い場合も出てくると思う。

そういやWindowsに移行してからテーブル使ってないや。
0538名前は開発中のものです。04/09/15 21:31:41ID:dTc45Y+D
ちょっと気になって去年作ったショボいシューティングのソースを見てみた
   sin = new int[360];
   cos = new int[360];
   for(n=0;n<360;n++)
   {
     sin[n] = (int)(Math.sin(n*Math.PI/180)*256);
     …

俺も小学生(´・ω・`)?>>503
0539名前は開発中のものです。04/09/15 21:52:54ID:aySmI8wo
|ω・)ノシ 俺も小学生かも
0540名前は開発中のものです。04/09/15 22:05:01ID:P+UMdyOa
誰でも昔は小学生、経験を積めばいつか卒業できるときがくる...ハズ?
0541名前は開発中のものです。04/09/15 22:10:34ID:XqVXCPyL
>>536
だから東方の弾密度は256分割では無理、
って何度も出てるのに無視すんなって。
0542名前は開発中のものです。04/09/15 22:28:12ID:cXPm3Dea
SRDも正確だった覚えが
0543名前は開発中のものです。04/09/15 22:30:08ID:Ad6nAFeR
そんな同人シューに基準を置かれてもな
0544名前は開発中のものです。04/09/15 22:32:59ID:XEGxeqWN
かといってケイブシューに基準を置かれてもなぁ
0545名前は開発中のものです。04/09/15 22:39:38ID:s2UvXm49
>東方
基準におく必要はないけど、実際に256度で再現不可能なゲームがある、
そしてそれがPC同人シューティングでは一番プレイ人口が多いと思われる、
といった点を無視して話すのもどうかと。
0546名前は開発中のものです。04/09/15 22:39:40ID:t/0s0Y9M
256度が荒いと言わないヤシは多分自分でゲーム作ったこと無いんでないかと…
0547名前は開発中のものです。04/09/15 22:54:46ID:kDXNVxjY
>529
俺もそう思っていたんだが、よく考えると、
単発ならいけるけど狙いnWayが撃てない。
0548名前は開発中のものです。04/09/15 22:56:20ID:rDTS+Uxx
作ってるゲームによるだろ
0549名前は開発中のものです。04/09/15 22:56:33ID:0OsHBWyP
メリットがあるとと感じない部分は大ざっぱに作るけどな、漏れは。
ヘタレシューターだし。
055054704/09/15 23:01:05ID:kDXNVxjY
いや、撃てるか。
単位ベクトルの90度回転ベクトルは簡単に作れるから、sinとcosの比率で足せば。
0551名前は開発中のものです。04/09/15 23:05:31ID:L1jfflUJ
やりたいヤツは好きなだけ方向細かくして、好きなだけ憧れのゲームをパクればいいじゃん
誰に強制されることも無いでそ
0552名前は開発中のものです。04/09/15 23:14:38ID:rDTS+Uxx
なに怒ってるの
0553名前は開発中のものです。04/09/15 23:15:39ID:t/0s0Y9M
つうか散々言われてるけど、テーブルなんか使わなければ解決だって
0554名前は開発中のものです。04/09/15 23:20:09ID:799AxoX8
>>550
角度で管理したほうが楽じゃね?(´ω`)
0555名前は開発中のものです。04/09/15 23:22:28ID:SOZJtiAp
特定の点を確実に通過させるにはBresenhamしかない。
0556名前は開発中のものです。04/09/15 23:34:20ID:+5QfUIc9
Sin,Cos,TanをPentium4-2.4BGHzで10000回ループで実行させるとそれぞれ
222万、143万、260万クロック前後だった。平方根は44万クロック前後。
Windowsでスレッドの優先順も変えずにやってるベンチなので、1割は誤差が
あると思うけど。

4096度系のテーブル使って二次元ベクトルの回転するのに35万クロック程度
なので、キャッシュを汚すことを考えなければテーブルの方が依然として
10倍は早い。

ただ、画像の一ピクセル毎をソフトウェアで回転とかでもなく、一キャラに
つき数回計算される程度である回転用のSin,Cosの速度に拘っても仕方ない気
はするけどね。一直線に飛ぶ弾だったら、生成時に一回計算するだけだし。
055754704/09/15 23:39:14ID:kDXNVxjY
>554
いやまあそうだけど、あくまで角度で狙えない位置を正確に狙う時に出来るかどうか話。

そもそも単位ベクトルを求めるのに、平方根を求める必要があるからなぁ。
まあ、角度で狙う場合もアークタンジェントが要るからどっちもどっちか。
0558名前は開発中のものです。04/09/15 23:50:26ID:tLpbhbos
ヒマなんで昔の自作ライブラリこねてみた
http://cgi.2chan.net/up2/src/f62638.zip

画面はアーケードライクに240x320
左上を原点として8x8ピクセルの弾(つっても数字の"0")を真下から
反時計回りに32度分流してみた
8x8ピクセルはちょうど敵弾サイズだからイメージつかめやすいかと
弾の隙間がかなり下にいかないと空かないのがわかる

なおちょっとガタついて見えるのはFlip時に同期を取ってないからだから気にするな
0559名前は開発中のものです。04/09/15 23:54:36ID:tLpbhbos
参考資料
http://cgi.2chan.net/up2/src/f62644.png

発射直後と広がった後の扇弾の並び具合に注目
0560名前は開発中のものです。04/09/16 00:04:19ID:QUfl3PDl
こんなんじゃダメ? > 特定の場所を通過する弾
# 検証してない擬似コードなんで間違いがあるかもしれんが、察してくれ

class Bullet {
const Vec2d from;
const Vec2d vec;

Vec2d pos;
float timer;
public:
// fから発射して、tを通過する。sはスピード
Bullet(const Vec2d& f,const Vec2d& t,float s) :
from(f),vec((t - f) / (Distance(f,t) / s)),pos(f),timer(0) {}

void Update() {
timer += GetDt();
pos = from + vec * timer;
}

const Vec2d& GetPos() {return pos;}
};
056155804/09/16 00:20:32ID:u12e8KYs
むぅ、速攻で消えたか
適当なうpろだ無いかね?
0562名前は開発中のものです。04/09/16 00:28:23ID:7K02SohA
>560
それは単に>529をコード化しただけだな。
しかし、例でそのUpdate()の仕方は……まあ個人の自由だけど。

>561
http://gamdev.org/up/
ここでもいいんじゃね?
正直、ソースも付いてないし、具体的に何をしているかも書いてないから、
たいして参考にならんかったけど。
056355804/09/16 00:31:36ID:u12e8KYs
んじゃ止めとくわ
単に256度の精度でも十分だって事を示しただけだからな
0564名前は開発中のものです。04/09/16 00:43:55ID:dHi+CclS
間隔がどれだけかってのはわざわざコード書かなくても2*PI*r/(分割数)で分かるだろ……

自分がやりたいこと、表現したいことで最適なテーブルサイズは異なるのに
なんで共通の最適値があると思い込むんだろうか?
0565名前は開発中のものです。04/09/16 00:47:39ID:PmHo7pHK
昔のゲーム知ってりゃ一周64度でも十分なことくらいは判る。
でも十分じゃないゲームを作りたい人もいる。
なぜそれが判らんのか。
0566名前は開発中のものです。04/09/16 01:11:52ID:btdeDeo+
弾幕シューだけがstgだと思ってる坊やばっかだからさ。
0567名前は開発中のものです。04/09/16 01:25:41ID:i2lv27Z3
裏を返せば、
自分にとって最適化されていないコードを許容できないジジイがいるから、
とも言える。
0568名前は開発中のものです。04/09/16 01:27:16ID:+LjglWi2
東方東方言ってるのはじじいじゃなような気が
0569名前は開発中のものです。04/09/16 01:33:59ID:i2lv27Z3
>>568
いやだから、ジジイと坊やの間で話がかみあってないだけだよ、と言いたかった。
0570名前は開発中のものです。04/09/16 02:09:40ID:UgkrnhBb
こんなところにもジェネレーションギャップが…
0571名前は開発中のものです。04/09/16 02:21:13ID:PmHo7pHK
レトロチックな非弾幕系作りたければ1周64度でも十分。
東方みたいなのだったら256でも足らない。
自分の作りたい内容で解像度を決めれば良い。
これだけの話で何故もめるのか…。
0572名前は開発中のものです。04/09/16 02:30:23ID:bp4dF4p6
>>571の発言の具体例を書きまくってたけど思いっきりまとめられてしまったw
要するに作りたいゲームに合ったものを使えばいいんですよ。適所適材
0573名前は開発中のものです。04/09/16 08:41:43ID:dOIIsKJL
いや、テーブルはもう適した場面無いって
0574名前は開発中のものです。04/09/16 08:49:52ID:2GihEWfg
>>573
蒸し返さない。>>571でFA。
0575名前は開発中のものです。04/09/16 09:36:05ID:aWVODxbw
ま、画面サイズが240x320だったり
固定小数の精度が8bitだったりするのにもかかわらず
テーブルサイズが65536とかなら突っ込みたくなる気持ちもわからんでもない

1度の差が(最大)0.5ビット未満って精度はいらないだろ、と
0576名前は開発中のものです。04/09/16 09:43:28ID:aWVODxbw
×0.5ビット未満
○0.5未満

なんかいらないものが入った
0577名前は開発中のものです。04/09/16 13:13:55ID:j6PM2+at
綺麗にまとまったな。501はいい話題を提供してくれた。
0578名前は開発中のものです。04/09/16 13:43:02ID:UN7Y5Viu
>>573
そんな、ワンダースワンじゃ重すぎて使えないよ!
…ワンダーウィッチでがんばってたけど、上には遥か上がいると嫌でも知らされるな、こういうハード。
0579名前は開発中のものです。04/09/16 14:21:04ID:UN7Y5Viu
三角関数が抜けてた。

「覚えてなきゃ死ぬ」攻撃の理想的な含有率ってどのくらいなんだろう、とか考えたけど
世間の面白いといわれるSTGを観察すりゃ終わる話だしなー。

1つの難易度で初心者も上級者も楽しめるSTGの方法論ってのも無理があるかしら。
0580名前は開発中のものです。04/09/16 14:25:51ID:bp4dF4p6
1面から最終面にかけて徐々に難しくしていけばよい話だと思うんだけれど、
ただ1面は稼ぎシステムが有効に使えないと上級者が飽きる。
俺はその点でガルーダはかなり上手いと思ったなぁ
0581名前は開発中のものです。04/09/16 14:55:24ID:pWOZRsF+
憶えといっても
・来るとわかっていれば大丈夫なもの
・来るとわかっていても解法がわからないうちは安定しないもの
・解法の有無で難度が激しく変わる場合と、安定度が多少増す程度に収まる場合
・解法の知識ではなく、体得が必要なもの (解法がわかっただけでは実行できないもの)
いろいろあるな
こんな抽象的ではダメでもう少し具体的に書くべきかな
どの面白さもバランス良く含むのが理想、しかしいろいろな要素を入れてもそれぞれがつまらなければ失敗、
と書くのは簡単なんだが…
0582名前は開発中のものです。04/09/16 19:23:40ID:qRU84G2z
とりあえず開幕極太レーザーは何も面白さを感じない。
0583名前は開発中のものです。04/09/16 19:33:48ID:7K02SohA
引っ張ってスマンが、一周N度方式を使うとき、atanの実装はどうするの?
0584名前は開発中のものです。04/09/16 19:41:39ID:v0V6lAzn
atanテーブル作るけど?
0585名前は開発中のものです。04/09/16 19:43:41ID:dHi+CclS
>>583
パワーに余裕があれば素直にatan使う。
無ければ>>205のみたいなテーブル使うかな?
(テーブルのサイズはNの大きさによって変える必要はあるけど)
0586名前は開発中のものです。04/09/16 22:49:29ID:uwVQc3HT
しばらくスレ見てなかったけど
一応言っておくと

紅魔郷はおそらく256分割
敵から離れた所にいれば、自機狙いがよく当たらなかったりするよ

紅魔郷以降の作品は知らないけど
0587名前は開発中のものです。04/09/16 23:35:12ID:AQNYTVA4
>>586
>>520
0588名前は開発中のものです。04/09/16 23:55:24ID:v0V6lAzn
>>587
必死なのは結構だがヨソでやれや
うぜぇ
0589名前は開発中のものです。04/09/17 00:03:02ID:a0f2gCix
喧嘩でも始めますか?
0590名前は開発中のものです。04/09/17 00:07:01ID:jqWr+HpC
>>588
>>588
0591名前は開発中のものです。04/09/17 00:49:12ID:x/3CeNl1
狙撃弾が少々ずれる程度で大騒ぎしてるバカは余程凄いゲーム作ってるんだろうなぁ
試しに公開してみ?
それが出来なきゃおとなしくすっこんでろと
0592名前は開発中のものです。04/09/17 01:29:21ID:DdU/gByT
>>591
>>588
0593名前は開発中のものです。04/09/17 01:50:55ID:P7DuapJi
争ってる奴らが作品で勝負してくれるのが一番なんだがな。

  テーマはボス戦の弾幕。
     期限は一週間。
      はじめぃ!

みたいなノリでw
0594名前は開発中のものです。04/09/17 02:32:24ID:tAYORpB7
>587>590>592
あーいえばこーいう
ガキ
うざ

東方が256度と指摘されて逆ギレした>520が暴れてる?
0595名前は開発中のものです。04/09/17 02:52:31ID:zgGvzeTw
593がいいこと言った
ボス戦だけとはいえ1週間で1から作るのは骨だけどな
0596名前は開発中のものです。04/09/17 02:57:12ID:eZO96wmL
ゲーム作るまでには至らなくとも弾幕1パターンのモデルだけとかなら実現性はあるな
要は弾の”模様”だけとか
それでも結構面倒だが
0597名前は開発中のものです。04/09/17 03:07:52ID:eZO96wmL
自分で書いといてなんだが、白い弾幕くんと変わり映えしないから意味ないか
0598名前は開発中のものです。04/09/17 03:30:12ID:E8yVXE9A
>>594
> 東方が256度と指摘されて逆ギレした>520が暴れてる?
>>520ではないが、ちょっと意地になって検証してみた。
http://gamdev.org/up/img/1248.png

オレの結論は、「東方は256分割ではない」だ。
0599名前は開発中のものです。04/09/17 03:38:09ID:eZO96wmL
…まだやんのかよ
0600名前は開発中のものです。04/09/17 04:34:33ID:/tWOv2rK
どうでもいい。

ちなみに、等分じゃないと方向弾が撃てないわけじゃないと思うよ?
方向なんて計算で出してるんだからさ。
for(cnt=0;cnt<88;cnt++){
angl = (cnt*ANGLE_MAX)/88 ;
とかやってるんだからさ。

なんか、真新しい感じのアイデア出そうと考えてくると、
どんどんアクションゲームっぽいまとまりになってくる。
アクションっぽいシューティングってどうだろうか。
0601名前は開発中のものです。04/09/17 06:21:48ID:YZKIDf8P
>>600
素直にアクションゲームにしとけ。
漏れはアクション作成がメインで、シューティングは試作。
0602名前は開発中のものです。04/09/17 07:23:01ID:FK4qcDZi
プレイヤーは既存のシューティングという枠でものを見がちなので
あまり既存の文脈に通じてない「新しい」ものをリリースしたいなら
アクションと銘打つほうが余計な先入観なく受け取ってもらえるかもな
0603名前は開発中のものです。04/09/17 08:05:56ID:8qMx6btT
シューティングと銘打つと、シューティングとしても文法にある程度沿ったもの
じゃないと取っ付きが悪くてやってもらえない可能性大。
060460304/09/17 08:06:37ID:8qMx6btT
書いてる途中に直したら602と同じこと言ってるだけになったorz
0605名前は開発中のものです。04/09/17 09:03:26ID:HvyruFW0
アクションっぽいシューティング → アクションシューティングで木鞠
0606名前は開発中のものです。04/09/17 09:09:47ID:shGsgpdw
>>600
ここで問題なのは、nWay弾が等分じゃないと撃てないかどうかじゃなくて、
SSの88Way弾が見た目に綺麗に88等分になっていることだろ。
1周256度のテーブルで88Way弾を撃ったら、
間隔が2度と3度のところが混ざって綺麗な88等分に見える軌跡にはならない。
0607名前は開発中のものです。04/09/17 09:16:58ID:5H4xPSKF
256分割で88wayだと角度が3の場所と2の場所が9:1で混在することになるね。
だから、間隔が他に比べて66%の場所が10個に1つ現れるはず。
でも、十分に広がった後の弾間隔を見てみても
66%になってる場所があるようにはちょっと見えない。
(実は196段階や88段階だったって可能性もあるけど)

でもこれは東方がその精度が必要だっただけ。
自分が作りたいSTGで必要な精度を用意すればいいだけなのに
なんで256って数字にこだわるんだろう?
0608名前は開発中のものです。04/09/17 09:30:46ID:GTadB0Hq
弾の方向数の多さが、そのまま自機を正確に狙い撃ち
ではないところが・・・。
例えば動いてもいないのに、自機と正反対の方向へ弾を撃ってたり。
萎えるね。パッターンな弾幕に多いんだなーこれがw
いいかげん、そろそろ作業ゲーは勘弁!
0609名前は開発中のものです。04/09/17 09:33:30ID:GTadB0Hq
だいたい段階を増やすだけなら、いくらでも出来るだろ( ´_ゝ`)
0610名前は開発中のものです。04/09/17 09:35:03ID:eZO96wmL
当たり判定が1ドットしか無いワケじゃあるまいし

不毛すぎる
0611名前は開発中のものです。04/09/17 09:40:07ID:eZO96wmL
しかし88wayってめちゃくちゃ半端な数だな
作った人は何で"88wayにしよう"と思ったんだろうか
0612名前は開発中のものです。04/09/17 09:48:16ID:5H4xPSKF
>>611
1.テーブルサイズが88の倍数
2.何か元ネタがある
3.バランス調整のために増減してたらそうなった

たぶん3.だろうけど2.の可能性も捨てきれない。
0613名前は開発中のものです。04/09/17 10:20:48ID:vCq6kiU0
まだやってんの。
ここの住人ならそれほど語るレベルの話じゃないと思うんだが…。
0614名前は開発中のものです。04/09/17 10:21:41ID:kcMH00kT
よく分からんが東方の世界では意味のある数字とかかもしれないな
作者はいろいろ設定みたいなのも考えてるみたいだし
0615名前は開発中のものです。04/09/17 11:31:44ID:GTadB0Hq
88と言ったら神聖なるエリア88だろ。
東方なんてとんでもねー話だ!(大げさだが)
0616名前は開発中のものです。04/09/17 12:17:36ID:vCq6kiU0
エリ8を神聖視するのはどうかとw
0617名前は開発中のものです。04/09/17 13:02:49ID:nP12VnTm
>607
>なんで256って数字にこだわるんだろう?

おそらく、角度を保持する変数が1Byteに収まるからでは。
まあ今どきのPCではこんなメモリ節約意味ないけど。
0618名前は開発中のものです。04/09/17 13:34:26ID:eZO96wmL

大量の実数演算の使用に抵抗が無いハードウェア能力に頼った富豪プログラミングか、
旧来の手法(つっても現役の技術だが…)を駆使し、実数演算を排除して最適化を優先
するか。
宗教論なんだよな。
0619名前は開発中のものです。04/09/17 13:55:07ID:zlFo7GKl
ラクチンなほうがいいなあ。
0620名前は開発中のものです。04/09/17 14:29:38ID:nHq002fK
メモリアクセス速度も結構馬鹿にならないから
マクローリン展開で求める方法もあるというのを
Gemsだったかどっかで見たような…
ただ収束半径の問題であまり大きな範囲の値を使えないってのはあるけれど
2Dシューなら普通に-PI〜PIの間に収まるから結構いいんでない?
もちろん256分割どころじゃなくFPU並みの精度で求まる
0621名前は開発中のものです。04/09/17 15:31:10ID:5H4xPSKF
メモリをあまり喰わない方法としては
おおざっぱなテーブル+隙間は線形補間って手もあるね

ただ、今の計算機だと有効的に使える状況はほとんど無さそうだけど。
0622名前は開発中のものです。04/09/17 15:39:46ID:EUkBE/QY
もうメモリとか気にするのは
へぼハードぐらいか
0623名前は開発中のものです。04/09/17 16:09:58ID:3EFz6gTJ
>>622
携帯JAVA
0624名前は開発中のものです。04/09/17 16:22:09ID:eZO96wmL
携帯のCPUだとFPUとかは期待できないんで自然とテーブル+固定小数を使った
手法に限定されるんだろうな

あんなんでシューティング作るケイブも相当なもんだな…
0625名前は開発中のものです。04/09/17 21:12:31ID:lNpq1J0V
>>620
マクローリン展開なんて・・・

「こんなもん覚えたって一生つかわねぇよ!」

なんて言いつつ昔公式覚えた記憶が。
まさかこんなところで再び聞くことになるとは・・・

当然「まくろーりん展開」がなんだったのかさえ、既に記憶の
彼方なのは言うに及ばず。
テーラー展開とセットで覚えた記憶はあるんだけど _| ̄|○
0626名前は開発中のものです。04/09/17 21:22:27ID:MYym9y6y
>>620
> メモリアクセス速度も結構馬鹿にならないから
> マクローリン展開で求める方法もあるというのを
> Gemsだったかどっかで見たような…
自由に使える実装どっかにある?
何となく試してみたいな〜、と思ったりしたのだが。
0627名前は開発中のものです。04/09/17 21:34:00ID:nHq002fK
いや、至って普通のマクローリン展開でしたよ(;´Д`)
sin(x)=x - x^3/3! + x^5/5! - x^7/7! +... って奴ですな。

templateを使ってループをインライン展開すると爆速だって話もあったかな?
ただIntel系CPUの場合はアキュムレータでループさせたほうがいいとかなんとか。
まあ詳しいことはGemsに書いてあるはず。俺は持ってるわけじゃないので…。
0628名前は開発中のものです。04/09/17 21:48:58ID:MYym9y6y
>>627
そうですか。情報thx。
■ このスレッドは過去ログ倉庫に格納されています