■GetEnemyDat実装

 いつのバージョンからだか忘れましたがGetEnemyDatという関数があって、その関数ポインタがpdat->fpackのなかに入ってるハズだったのですが、どうやら関数ポインタをセットするのを忘れていたようです。やれやれ。というわけで今はちゃんと使えるようになりました。
 第一引数に自分のキャラクターID(pdat->cid)、第二引数にCHARACTERINFO2構造体へのポインタを渡します。関数を実行するとCHARACTERINFO2構造体にそのときの相手の情報が入ります。

■喰らい動作に叩き付け追加

 ATTACKINFOのhitメンバに立てるフラグが増えました。
・ACTID_TATAKITUKE1A 攻撃を喰らった敵は真下に叩き付けられる。地面に達すると1回バウンドする。
・ACTID_TATAKITUKE1B 〃、バウンドしない。
・ACTID_TATAKITUKE2A 斜め下に叩き付けられる。バウンドあり。
・ACTID_TATAKITUKE2B 〃、バウンド無し。
てことで。結構上のほうから叩き付けないといまいち動作が分かりにくいかもです。(いきなり地面に寝てるように見える)

■飛び道具の自律行動

 今回の1番の目玉、かな?
 BULLETINFO_A の type メンバにBULLETA_JIMAESYORIフラグをたてて、info_bメンバにBULLETINFO_B構造体のポインタを指定します。
 自律型飛び道具にすると、自動飛び道具(?)のときには効いていた仕様がいくつか適用されません。以下適当に説明

〜〜BULLETINFO_Aの各メンバ〜〜

・飛び道具の位置を指定します
double x;
double y;

BOOL muki; 飛び道具の向きを指定します
ATTACKINFO atk; その飛び道具がもつ攻撃力情報です

DWORD cid; その飛び道具を発したキャラクターのID(pdat->cid)

DWORD type;以下のフラグ。自律飛び道具の場合はいくつか無効なものがあります
  BULLETA_VSHUMAN 相手キャラクターに当たる(有効)
  BULLETA_VSBULLET 相手の出した飛び道具と当たる(有効)
  BULLETA_DONOTDIE 衝突時も消滅しないで飛んでいく(無効)
  BULLETA_DRAWBACK 人物よりも後ろに描画する(有効)
  BULLETA_DRAWMIDDLE キャラクター・ヒットマーク間に描画(有効、ただしもともとバグでうまく動作しない)
  BULLETA_XJIMENN 地面に落っこちると消滅する(無効)
  BULLETA_XGAMENGAI 画面外に達すると消滅(無効、もともと未実装)
  BULLETA_JIMAESYORI info_bメンバが有効であり、処理を自前で行う(有効)
  BULLETA_DISPZAHYO 座標指定はディスプレイ上の座標。ステージ上の表示位置に左右されない(有効)
  BULLETA_DONOTSTOP 超必等でstopエフェクトがかかっていても描画が止まらない(有効)

・使用されません
int dur;
int *cell_run;
int *cell_dis;
DWORD spd_run;
DWORD spd_dis;
DWORD cnow2;

・使用されません。が、この値を勝手に使っていいです。
double vx;
double vy;
double ax;
double ay;
DWORD counter;

・上2バイトのみ有効です。
DWORD state;
 BULLETASTATE_ATTACK フラグを立てておくとその飛び道具は攻撃力を持つことになります。他にもシステムで定義するフラグを作成するときのために上2バイトは弄らないで下さい。下2バイトはユーザーが勝手に弄って結構です。

・表示するセルの番号を指定します
DWORD cnow;

・BULLETINFO_B構造体へのポインタを指定します
BULLETINFO_B *info_b;

〜〜BULLETINFO_Bの各メンバ〜〜

・ユーザーが勝手に使えます
DWORD id;

・1フレームに1回呼ばれる関数です
PFUNC_BULAACTION pf_action;

・何かにぶつかったときに呼ばれる関数です
PFUNC_BULAHIT pf_hit;

〜〜 pf_actionのつくりかた 〜〜
 1フレームに1回呼ばれます。キャラクターのAction()みたいなもんです。この中で飛び道具の移動や表示セルの変更などを行ってください。(引数にその飛び道具のBULLETINFO_A構造体のポインタが与えられるので、そのなかの変数を弄ればOKです。)
 stateメンバの下位2バイトに飛び道具の現在の状態を記録しておいて、それでswitchして行動させればキャラクターみたいに動かすことも可能・・・かも(スタンド?)
 飛び道具に攻撃をさせたいときには state メンバにBULLETASTATE_ATTACK フラグを立ててください。

 自律飛び道具は衝突や時間切れなどで消滅することはありません。自前で消滅処理をやってください。やり方は2種類で、↓で説明してるpf_hit(なにかにぶつかったときに呼ばれる関数)の戻り値に0でない値を返すか、FUNCTIONPACK構造体(pdat->fpack)に新しく入ったpf_destroybullet関数を使うかしてください。この処理を怠ると飛び道具がいつまでも飛び回ることになります。

〜〜 pf_hitのつくりかた 〜〜
 何かにぶつかったときに呼ばれます。0を返せばそのままその飛び道具は消滅せずに生き残りますが、0以外の値を返すとその飛び道具はおしまいです。


 まあ、こんなとこですか。基本的にしぃのmissile.cppあたりを参考にしてください。
わかんなかったら遠慮なく掲示板で聞いてください。