序論

どうでもよさそう…。

ギガチュウ: 正しいコード…
ギガチュウ: 今はこの、にとりの河登りのソースコードを参考にしていますけど……
yappy: ざわ…
yappy: おれもあまりC++コードは見る機会がないけど…
yappy: Brightmoon - Touhou Archive Extractor

    • Brightmoon?

東方Project作品(と幾つかの別作品)のアーカイブファイルを閲覧、抽出することが
出来るGUIアプリケーションです。
みょんなエラーが出るかもしれませんが、そこはご愛嬌ということで……
yappy: これとかどうですかね
ギガチュウ: お、ニコ動投稿者御用達のアレですね
yappy: -- src.zip?
Brightmoonのソースコードをzip圧縮したものです。ビルドにはboostが必要です。
ギガチュウ: くそいー
yappy: ソース読むだけなので…
yappy: 少々危険ですが確か私の評価は高かったはず
ギガチュウ: 全ゲ連のBoost紹介講演のスライド見てるんですけど
ギガチュウ: この講演の対象

◎Boostを使ったことがある
STLを使ったことがある
○テンプレート含むC++の言語機能をある程度理解できる
C++でプログラムを書いている
×C++は書かない

多分こんな感じ
yappy: 残当
ギガチュウ: って書いてあって完全に△だった…
yappy: 下の方への話ってしてても自分が面白くないですからね…
yappy: ぱっと見boostへの依存は多くなさそうですよ
yappy: つーかどこに使ってるんだ…
yappy: あーscoped_arrayか
まだ0xでなかった頃のスマートポインタだけは使いたかったパターンですね…
ギガチュウ: スマートポインタ…
ギガチュウ: ポインタは今のところ一箇所しか使ってないです
ギガチュウ: int WINAPI WinMain( … )
{
Game *game;
game = new Game;
game -> mainLoop();
delete game;
return 0;
}
yappy: それにとりっていうんですよ…
yappy: 弱キャラです
ギガチュウ: ^^^^^^^^^^^^^^
yappy: Game game;
game.mainLoop();
return 0;
yappy: これがアリスです
ギガチュウ: あ、それ!
ギガチュウ: 最初はそう書いてたんですよ
yappy: Game game;
でコンストラクタ呼ばれるんですよ
yappy: WinMainからリターンするとデストラクタ呼ばれるんですよ
yappy: おわり
ギガチュウ: Game *game = new Game;
だとそういうのは呼ばれないんですか
yappy: 呼ばれますよ
ギガチュウ: deleteのタイミングで呼ばれるとkかですか?
yappy: newはそのクラス(構造体)の大きさのメモリを確保して、その後そこに対してコンストラクタを呼びます
yappy: deleteはそこに対してデストラクタを呼んだ後、さらにメモリを解放します
yappy: メモリの動的確保と解放は重いからむやみに使うのは厳禁ですよ
ギガチュウ: そうなんですか…
ギガチュウ: 僕の手元にある『これならわかるC++』には「実は、newとdeleteをきれいに使いこなすことは、C++屋の腕の見せ所のひとつなのです。」って書いてあったので…
ギガチュウ: てっきりnewを使ったほうが賢いのかと…
yappy: newとdeleteは使えば使うほどメモリリークのバグを増やすので
yappy: スマートポインタを使うというのが闇の軍団のセオリーですね…
ギガチュウ: new→メモリ確保→コンストラクタ呼び出し
delete→デストラクタ→メモリ解放
ギガチュウ: という流れはわかりましたけど、
ギガチュウ: Game game; だとどういう流れになるんですか?
yappy: まずは int とか struct とかと同じ感じで捉えてください
yappy: まずはメモリっすね
ギガチュウ: 型 ってやつですか…
yappy: ローカル変数ならスタックに、グローバル変数なら静的領域とかなんとかいうところに取られます
ギガチュウ: でたーメモリの領域
ギガチュウ: ちょっと待って下さいね…
yappy: ローカル変数 int i; がスタック上に4バイトと同じ感じで、自作クラスのサイズで取られるってことです
yappy: 最初からほとんど場所が決まっているようなものなので、
yappy: 実行時にnew用のヒープ領域からNバイト連続して空いているところを検索するnewとはえらい違いですね…
ギガチュウが2013-02-23 23.03.20-1.jpgを送信しました
ギガチュウ: これ
yappy: デター
ギガチュウ: 『14歳からはじめる わくわくC言語ゲームプログラミング教室』
yappy: ばろす
ギガチュウ: 高校時代からページを開いてはあまりのクソさに本を投げ捨てるのを6年間繰り返す程度には愛読ています
yappy: やはり知っているとかなり違うから説明しておくか…
ギガチュウ: おにゃしゃす><


なんやこの意味のないdisり
newとdeleteの練習は必要ですよ

team introduction

	icp.py is the 5th icp.* team family. You can pronounce it
as you like, for example, i, c, p, dot, p, y, as the file name
and extension.

	Anyway, we study Hokuto, well known as sports action game. Its study
started in 1995, but about 2 years later, it had changed completely.
The study of Hokuto includes many sub areas; bounding physics,
one chance game theory, accumulation theory, and so on. Bounding physics
analyzes the relations of the gravity and a hit count, and it reveals
that humans can be bounding. This study is very helpful for solving
problems based on the real world. One chance game theory shows that
the winner is determined with only one chance. This theory is very useful
at a pointing game, such as the programming contest. It is known that
accumulation phenomenon happens at a pointing game, accumulation theory
is also very important. In addition, a new study appeared recently:
seikimatsu marketing.

	We believe that many of these studies help us challenge the contest.
In fact, we introduced Hokuto disk onto our workspace at the contest
last year and we had a good result. We promise that we will do our best
and show the correctness of our theory.


追記: 年号に誤りがありました。
誤: 1995
正: 2005

マジキチ納得ニュース

納得がしたい方は、金曜日の、午後7時くらいになってしまうかもしれませんが、いつもの場所にお集まりください…!
なお、当日は早朝から北斗の救助に行ってくるので夜はあまり動けないかもしれません。

トキのメモ

ひょんなこと(笑)からメインキャラになっちゃいましたけど、やはりどんなキャラもちょっとやろうとすると…ね。


ピヨり確認…なるべく星を取りつつ素早く落とす
受身無視で落とす早さ重視に使いやすいチェーン

  • 2C > バニ
  • 2CC > 空キャンバニ (2CC>[2D]>バニ、2CCの後2を入れながらC+Dを2連打)
  • 近D > バニ
  • グレ > JB > 天翔(1) > 降りナギ > バニ


気絶時のコンボ選択
上のコンボで素早く落としつつ相手の体力・相手のゲージ・自分のゲージを確認
相手のゲージ
トキのブーストと相手のブーストを比べると相手のブーストの方が価値が高い。特にレイユダあたり相手ではものすごく高い。
相手のブースト
1.0未満 << 1.0 << 1.2 < 1.5 < ...

  • 0(→1): 2Dからノーゲージで死ぬ
  • 1(→2): 2Dからブースト1本あれば(星2一撃ができれば)死ぬ
  • 2(→3): セッカツがCHすると死ぬ

あと、1本目の場合次ラウンド何もできずに死んだ時さらに+1。最悪でも+1。
自分のブースト・オーラ
上のものを優先した上でできるだけ欲しい。ブーストは差し合い・確反のほか隙のない固めができるようになったり、あとオーラは溜まりやすいけど0に近いと1.0ないと結構防御面は怪しいところも。

蓄積
ピヨると蓄積乗りっぱなしなのでオーラもブーストもよく溜まる。相手の増加量はそのまんま。ゲージ使用後の増加ゼロ時間の影響は受ける。蓄積乗りっぱなしでピヨってるのか蓄積切れたけど気絶値が溜まってピヨったのか判別できるといいかも。
壁コン
ニコンだとブーストを吐いているため見えないが、ブーストがお互いに非常によく溜まる。トキだと投げが該当。
普通のコンボ
ブーストがあまり溜まらない。オーラがよく溜まる。
グレコ
よくわかんないけど多分ブーストがほとんど溜まらない。
投げ > ...
ブーストがよく溜まる。相手にもよく溜まる。使いどころは相手のブーストがMAXに近くて自分はあんまりないときくらい。
ダッシュ > ブースト > 投げ ...
ブースト0.2本消費。ブースト使用後はお互いに一定時間ブーストが溜まらない。ニュートラルからのブーストではなくダッシュモーションからブーストすると投げられる(別件でも有用)。ブーストを溜めさせたくなくて火力が必要なとき。
バニ > 自動ブースト > ...
ブーストを溜めさせたくなくて星重視
バニ > セッカツ
バニからはノーキャンセッカツがダウン追い打ちでヒット数も少なくダメージ大
近C > 近D > 遠D > バニ > ...
高火力始動。残り体力に応じて最初の方を省略可能。地上コン部分で蓄積つきの両ゲージ回収かつ相手のブーストはあまり溜まらない。サウザーハート様には遠Dバニはつながらない。
近C > 近D > 遠D > 6D > ...
高火力始動から通常のグレコンへ。壁コンでないので相手のブーストがあまり溜まらず、蓄積で両ゲージをたくさん回収。オーラモリモリ。体力を調整して断迅やセッカツでKO。


固めと割りどころ

  • アジリティーディフェンス: ガード硬直-5F
  • オーラガード: ガード硬直+5F
2A > 2C
連ガ。2Aアジガで連ガが切れる。アジガのあと無想をとりあえず入力して読みが外れてもひよらない感じの対応をされると怖い。あとはだいたい一点読みに近い無敵技か。無強化チョップがきれいに刺さる。また、密着で2Cをすかせる1F(?)低姿勢技でも可。シンの2Bとサウザーの2C。
2C > 2D
2Cをガードさせるとこれが連ガになる。
2D > Bナギ > 2A
ノーマルガードだと(多分)2Fくらい空く。2Dアジガだと相手側有利で割り込まれる。Aナギで逃げるくらいしかない。
  • 2A > 2C > 2D > Bナギ > 2A...
    • 2Aアジガ後2A>2Cのところで何かやるかBナギ>2Aで何かする。
  • 2A > 2A > 2C
    • 初段2Aアジガ警戒。オラガに2Aを2発当てると2Cが届かなくなる。2C空振るといろいろ確定。
  • (2A >) 2A > 2D
    • 2Aノーマルガードから2Dは非連ガで無敵割り込み・2Dをアジガ可能。しかし2Aをオラガすると2Dが連ガ。

現代のトキはオラガ確認から2Dを連ガにして2D>Bナギで最密着できるようになるとよい。一応2A(オラガ)>2A(ノーマルガード)>(オラガ確認)2D(アジガ)で(爆笑)のつく理論上の読み合いが可能。
安全にゲージを溜めつつ勝手に動いて引っかかってくれるのを待っている(固め)だけなので、これを割られるプレッシャーをかけることで相手に崩しを急がせることができる。するとトキの崩しはリスクのあるものが多いので最速暴れ擦りを行うことでワンチャンが生じる。そこまでやらなくとも固めは緩くなるはずなので適度なオーラジャンプ等いろいろ試してみよう。

いろいろなところでガーキャン
マジキチな割り方は(ゼロではないくらいに)たまに見せて基本これでかえすくらいがバランスがいいと思う。ゼロだとガーキャンだけガン見して当身準備つき2A>2C>2Dループになってしまうかも…。
ユダを使ってダガキャンする

北斗見に行きます

(※やっぱり横幅が狭すぎる気がしたのでデザインを変えてみました。)


ゲームサマーフェスティバル2012
8/5 11:50〜『北斗の拳』世紀末救世主再臨エキシビジョンマッチ
なんか一日券で4500円したのですが、マジキチしました。


8/4〜8/5

  • 闘劇2012 全国決勝大会
  • 音撃 Game Sound Impact 2012
  • わっしょい 2012夏
  • ゲームエクストラステージ←ココ!

今年の闘劇は他のイベントと同時開催で色々やるってことらしいです。音楽ライブとかシューティングゲームとかもやってるみたいです。北斗はエクストラステージでやっているので、来れない人もどこかで中継してるかもしれません。
http://www.tougeki.com/


あと、ついでに天則の大会もやるそうですが、北斗の妨げになるなら出場辞退します。
http://hydragp.info/toutenso2

USBコントローラのドライバメモ

誰得

  1. USBコントローラとメモリバスをつないだ論理をFPGAに焼いてもらい、プロセッサからメモリアクセスでUSBコントローラのレジスタにアクセスできるようにしてもらう。(要: 約1年)
    • ほんとは割込み線もつないでもらうのだが、無くても耐える(爆笑)のと外部割込みは2本しかなくてほんとにUSBから正しく割込みがかかっているのかよくわかんないためスルー(爆笑)。
  2. そのうちに、各種調査を進める。
    • とりあえずUSBコントローラのマニュアルをガン見。レジスタアドレスに#defineで名前を付けてヘッダに書いておく。あと抜き差しバスリセットあたりの分かりやすい割込みハンドラを書いておく。
    • 量はマジキチだがとりあえずUSB2.0の仕様書をダウンロード。
    • インタフェース*1のUSBでのシリアルポート実装事例を読む(←重要(笑))。
    • シリアル通信の標準クラスはCommunication Device Class(CDC)というらしい。メリット: これに従うと、PC側のドライバを書く必要がない(OSに標準で用意されている)。OSごとにそのOS用のドライバがある←ドライバとかどう考えても互換性が残当なので重要。デメリット: ただのシリアル通信と言ってもなんやかんやで仕様がしっかりしててちょっとめんどくさい。
    • 記事に従ってCDC1.2の仕様書も持ってくる。なんかエラッタとか書いてあって右に修正点を書くスペースが入ってて印刷するとメインエリアが小さくなって納得がいかない。
  3. USBのケーブルを買ってきて、つないでみる。
    • 割込みがかかるので、マニュアルの通りに状態遷移させてやるとPCからコントロール転送が飛んでくるのをキャッチできる。
  4. コントロール転送はエンドポイント0(EP0)で行う。要はEP0からの割込みをハンドリングする。
    • USBの通信は(多分全てが)ホスト主導で行う。なのでペリフェラル側はイベント駆動コードだけでいいのできっと楽な方。
    • ホストからのコントロール要求を受信するとEP0から割込みがかかる。コントローラのレジスタ(16bit)4つに受信データが入っているのでデコードする。
      • bmRequestType(8bit): 転送方向とかそういうの。bRequestからでも判断できちゃいそうではある。
      • bRequest(8): リクエスト番号。最重要。
      • wValue(16): パラメータ。bRequest依存。
      • wIndex(16): パラメータその2。bRequest依存。
      • wLength(16): データ長。
  5. 上記のリクエストを出力してPCのドライバが何を送ってきているかを確認し、その意味を調べ、適切な応答をする。以下繰り返し。

*1:そういう雑誌。

続きを読む