#ifndef GAMEMAINh #define GAMEMAINh //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− // define定義 //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− //オブジェクトとは、ポリゴン物体の最小単位 //現時点では、毎回オブジェクトにモデリングデータを割り付けて表示している。 #define OBJ_MAX 64 //最大オブジェクト表示数 #define OBJ_SYU_MAX 64 //最大オブジェクト種類 #define TPAGE_MAX 32 //最大テクスチャー数 #define PROJECTION 512 //投影面の距離 #define VH_NAME "\\DATA\\SOUND\\STD0.VH;1" #define VB_NAME "\\DATA\\SOUND\\STD0.VB;1" #define AMBIENT 560 #define MANOBJ_MAX 15 //してん  #define VIEW_NOMAL 0 #define VIEW_NOMAL2 1 #define VIEW_SIDE 2 #define VIEW_UP 3 #define VIEW_FRONT 4 #define VIEW_THROW 5 #define VIEW_SELECT 6 //オーダリングテーブルの深さ #define OT_LENGTH 14 //計算用π #define PI 3.141592 //真偽値 #define BOOL int #define FALSE 0 #define TRUE 1 #define ATK_NO 0 //技が出てない #define ATK_TUUJYOU 1 //通常技が出た #define ATK_HISSATU 2 //必殺技が出た #define BYTE char #define WORD short #define DWORD long //左右のむき #define LEFT 0 #define RIGHT 1 #define FLG_1P 0x01 #define FLG_2P 0x02 #define FLG_ALL FLG_1P | FLG_2P #define FLG_NOSOUSAI 0x04 #define FLG_NGD 0x08 //コマンド入力受け付けの受け付けフラグ //コマンドが入力されている間フラグに入る #define COM_ON -1 //最大値 #define BGM_MAX 32 #define BG_MAX 128 #define MARK_MAX 20 #define MOJI_MAX 8 #define FLY_MAX 40 #define OTHER_MAX 8 #define X_MAX 24000 #define Y_MAX 12000 #define MAX_HP 138 /* //最大値 #define BGM_MAX 12 #define BG_MAX 8 #define MARK_MAX 8 #define MOJI_MAX 8 #define FLY_MAX 32 #define OTHER_MAX 8 #define X_MAX 24000 #define Y_MAX 12000 */ #define GAGE_MAX 8000 //床がない場合 #define YUKA_NO 65536 //重力 #define G_POINT 11 //ステージNo #define STAGE_TITLE 0 #define STAGE_SELECT 1 #define STAGE_FIGHT0 2 #define STAGE_FIGHT1 3 #define STAGE_FIGHT2 4 //MODE No #define MODE_VS 0 #define MODE_COM 1 #define MODE_SURVIVAL 2 #define MODE_WATCH 3 //モデリングデータNo #define OBJ_CH0_0 0 #define OBJ_CH0_1 1 #define OBJ_CH0_2 2 #define OBJ_CH0_3 3 #define OBJ_CH0_4 4 #define OBJ_CH0_5 5 #define OBJ_CH0_6 6 #define OBJ_CH0_7 7 #define OBJ_CH0_8 8 #define OBJ_CH1_0 9 #define OBJ_CH1_1 10 #define OBJ_CH1_2 11 #define OBJ_CH1_3 12 #define OBJ_CH1_4 13 #define OBJ_CH1_5 14 #define OBJ_CH1_6 15 #define OBJ_CH1_7 16 #define OBJ_CH1_8 17 #define OBJ_CH2_0 18 #define OBJ_CH2_1 19 #define OBJ_CH2_2 20 #define OBJ_CH2_3 21 #define OBJ_CH2_4 22 #define OBJ_CH2_5 23 #define OBJ_CH2_6 24 #define OBJ_CH2_7 25 #define OBJ_CH2_8 26 #define OBJ_CH3_0 27 #define OBJ_CH3_1 28 #define OBJ_CH3_2 29 #define OBJ_CH3_3 30 #define OBJ_CH3_4 31 #define OBJ_CH3_5 32 #define OBJ_CH3_6 33 #define OBJ_CH3_7 34 #define OBJ_CH3_8 35 #define OBJ_KAGE0 36 #define OBJ_BG0_0 37 #define OBJ_BG0_1 38 #define OBJ_BG0_2 39 #define OBJ_BG0_3 40 #define OBJ_BG0_4 41 #define OBJ_BG0_5 42 #define OBJ_TEM0 43 #define OBJ_FIREGUN OBJ_TEM0+1 #define OBJ_BOX OBJ_TEM0+2 #define OBJ_BOOM OBJ_TEM0+3 #define OBJ_GRE OBJ_TEM0+4 //モーションデータフラグ #define MOV_END 0x0001 #define MOV_STAND 0x0002 #define MOV_SIT 0x0004 #define MOV_JUMP 0x0008 #define MOV_DASH 0x0010 #define MOV_UKI 0x0020 #define MOV_DOWN 0x0040 #define MOV_DMG 0x0080 #define MOV_GUARD 0x0100 //ガード中 #define MOV_MUTEKI 0x0200 //無敵 #define MOV_THROW 0x0400 //投げ可能 #define MOV_NOTHROW 0x0800 //投げられない(現在は未使用) #define MOV_GET 0x1000 //拾い判定 //攻撃判定フラグ //判定の高さ(ほぼ未使用状態) #define HF_HI 0x0001 #define HF_HI_S 0x0002 #define HF_MID 0x0004 #define HF_LOW 0x0008 #define HF_NGD 0x0010 #define HF_JUMP 0x0020 //ヒット効果 #define HF_JYA 0x0040 //弱(腹抱え、物落とさず) #define HF_TYU 0x0080 //中(頭後ろ、物落とす) #define HF_KYO 0x0100 //強(ふらつく、物落とす) #define HF_YRO 0x0200 //よろける(未使用) #define HF_UKI 0x0400 //浮き音で浮く #define HF_TYUUKI 0x0800 //ヒット音普通で浮く #define HF_FUKITOBI 0x1000 //派手なヒット音で吹き飛ぶ //他 #define HF_NOTODOME 0x2000 //止めがさせない #define HF_NOCOUNT 0x4000 //ヒット数カウントせず #define HF_GBREAK 0x8000 //ガードブレイク #define HF_HITM0 0x000010000 //ほのお #define HF_HITM1 0x000020000 //ほのお #define HF_HITM2 0x000040000 //ほのお #define HF_HITM3 0x000080000 //ほのお #define HF_HONOO 0x000100000 //ほのお #define HF_BAKUHATU 0x000200000 //爆発 #define HF_NOSYUUSEI 0x00040000 //ダメージ修正無し //攻撃判定フラグ #define THROW_NO 0 #define THROW_PUT 1 #define THROW_ON 2 #define THROW_DMG 3 //攻撃ヒットフラグ(現在の攻撃状態) #define HH_NO 0 #define HH_HIT 1 #define HH_GRD 2 #define HH_MUTEKI 3 //防御状態フラグ(現在の攻撃状態) #define GRD_NO 0 #define GRD_ON 1 #define GRD_AFTER 2 #define GRD_OBJ 3 #define GRD_AFTER_OBJ 4 //ヒットマーク番号 #define MK_HIT0 0 #define MK_HIT1 1 #define MK_HIT2 2 #define MK_HIT3 3 #define MK_HIT4 4 #define MK_HIT5 5 #define MK_BOMB0 6 #define MK_BOMB1 7 #define MK_KEMURI 8 #define MK_FLYOBJ 9 #define MK_NUM 10 #define MK_YUKI 11 /* //効果音音色データ #define L_TONE 0 #define L_NOTE 60 #define L_VOL 39 #define H_TONE 1 #define H_NOTE 68 #define H_VOL 48 #define U_TONE 0 #define U_NOTE 70 #define U_VOL 48 #define BOM_TONE 2 #define BOM_NOTE 60 #define BOM_VOL 53 #define GR_TONE 3 #define GR_NOTE 60 #define GR_VOL 48 */ //効果音音色データ #define L_TONE 0 #define L_NOTE 60 #define L_VOL 38 #define H_TONE 1 #define H_NOTE 63 #define H_VOL 63 #define U_TONE 1 #define U_NOTE 72 #define U_VOL 58 #define BOM_TONE 2 #define BOM_NOTE 58 #define BOM_VOL 83 #define GR_TONE 3 #define GR_NOTE 64 #define GR_VOL 46 //効果音番号データ #define SE_GRD 0 #define SE_JYA 1 #define SE_TYU 2 #define SE_KYO 3 #define SE_UKI 4 #define SE_BOM 5 //あいてむふらぐ #define HOLD_NO -1 #define HOLD_FIREGUN 0 #define HOLD_BOX 1 #define HOLD_BOOM 2 #define HOLD_GRE 3 //なげ状態番号 #define CH_NAGE0 256 #define CH_NAGE1 257 #define CH_NAGE2 258 #define CH_NAGE3 259 #define CH_NAGE4 260 #define CH_NAGE5 261 #define CH_NAGE6 262 //床ヒットフラグ #define CHK_NO 0 #define CHK_WALL 1 #define CHK_GR0 2 #define CHK_GR1 3 #define CHK_GR2 4 #define CHK_GR3 5 #define CHK_GR4 6 //爆発カウントスピード #define COUNT_SPPED 30 //暗転フラグ #define ANTEN_NO 0 #define ANTEN_ON 1 #define ANTEN_YUKA 2 #define ANTEN_KAGAMI 3 #define ANTEN_CRED 0x1000 #define ANTEN_CBLUE 0x2000 #define ANTEN_CGREEN 0x4000 #define LIGHT_OFF 0x00 #define LIGHT_R 0x01 #define LIGHT_G 0x02 #define LIGHT_B 0x04 #define LIGHT_FADE 0x10 //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− // 構造体定義 //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− //オブジェクト表示用構造体(スプライト構造体のようなもの) typedef struct { GsCOORDINATE2 co; //オブジェクトの座標変換行列構造体 VECTOR mov; //オブジェクトの平行移動量(基本値) // int no; //オブジェクトのキャラクタ(モデリングデータ)番号 GsDOBJ2 obj; //表示用オブジェクトハンドラ(p17) } OBJ; typedef struct { short vx,vy,vz; } VEC; typedef struct { int no; char syu; int height; OBJ op; } BGPARTS; typedef struct { BGPARTS pt[BG_MAX]; int width; } BG; //3Dスプライト構造体 typedef struct { GsCOORDINATE2 co; //位置情報用構造体 GsSPRITE sp; //絵のデータ保存用スプライト構造体 int size; //元絵のサイズ比 } SPRITE3D; //エフェクト構造体 typedef struct { int syu; BYTE flg; //状態フラグ int cnt; SPRITE3D s3; //3Dスプライト構造体 } MARK; //飛び道具構造体 typedef struct { int syu; int flg; //状態フラグ int face; //向き SVECTOR pl; //速度 int cnt; //消滅カウント SPRITE3D s3; //3Dスプライト構造体 } FLYOBJ; //3Dその他物体構造体 typedef struct { int syu; BYTE flg; //状態フラグ int dat1,dat2,dat3,dat4,dat5,dat6,dat7,dat8,dat9; OBJ obj; //オブジェクト構造体 SVECTOR r; //回転角 } OTHER; //文字構造体 typedef struct { u_char syu; BYTE flg; //状態フラグ int cnt; GsSPRITE sp; //3Dスプライト構造体 } MOJI; //#define SVECTOR VEC //人物モーションデータ構造体 typedef struct { VEC pl; //平行移動量 VEC r[15]; //各間接の回転量 } MDATA; //あたり判定データ構造体 typedef struct { int hit_flg; //判定フラグ int p_num; //判定のあるパーツ番号 int xsize,ysize; //判定の大きさ int px,py; //吹き飛び時、空中ヒット時の移動量 int hit_cnt,grd_cnt; //ヒット硬直、ガード硬直 int hit_stop; //ヒットストップ時間 int noukemi_cnt; //受け身不可時間 int dmy; //予備領域 int damege; //攻撃のダメージ } HITDATA; //動作データ構造体 typedef struct { MDATA *mdat; //モーションへのポインタ int px,py,pz; //次モーションまでの移動量 int frame; //次モーションまでのフレーム数 int flg; //動作のフラグ(立ち、しゃがみなど) HITDATA *hf; //あたり判定へのポインタ } MOVDATA; //人物構造体 typedef struct { OBJ obj[15]; //表示用のオブジェクト構造体 MDATA mdat; //現在のモーションデータ MDATA d_dat; //モーションデータ増分値 SVECTOR d_pl; //モーションによる平行移動量増分値(パンチによる前進などに使用) SVECTOR g_pl; //重力による平行移動量増分値(ジャンプ時などに使用) GsCOORDINATE2 co; //オブジェクトの座標変換行列構造体 VECTOR pl; //キャラの平行移動量 SVECTOR r; //キャラの方向 MOVDATA *mv; //現在の動作データへのポインタ int m_no; //現在のモーション番号 int m_cnt; //次モーションまでのカウント int face; //プレイヤーの向き(LEFT,RIGHT) int st; //プレーヤーの状態フラグ int hit_stop; //ヒット硬直時間 int grd_stop; //ガード硬直時間(食らい硬直時間にも使用) int ukemi_cnt; //受け身不可時間 BOOL hit_flg; //現モーションで技がヒットしたか BOOL grd_flg; //現モーションで技がヒットしたか BOOL conbo_num; //食らった連続ヒット数 int syu; //キャラ種類(0−2) int zero; //地面に立っているときの高さ int walk_sp; //移動速度 int jump_sp; //ジャンプ初速 int turn_sp; //回転速度(もしかして不要?) int hit_size; //食らい判定の大きさ int hold; //もっているあいてむ  OTHER *hold_pt; //もっているあいてむpointer int max_hp,hp; //最大体力、残り体力 int c_hp; //conbo体力 int gage; //飛び道具ゲージ int gage2; //超技ゲージ long cont,trg,b_trg,b_cont; //コントローラーデータ int LB_flg,HB_flg,FB_flg,PB_flg,GR_flg; int LB_cnt,HB_cnt,FB_cnt,PB_cnt,GR_cnt; //弱、強ボタン判定用 int Ldash_flg,Rdash_flg; //ダッシュコマンド判定 int Ldash_cnt,Rdash_cnt; int Lhd_flg,Rhd_flg; //波動件コマンド判定 int Lhd_cnt,Rhd_cnt; int DD_flg,DU_flg; //下下、し田植えコマンド判定 int DD_cnt,DU_cnt; int throw_flg; //なげフラグ int throw_syu; //なげsyu int throw_distance; //なげ間合い OBJ kage; //影表示のオブジェクト構造体 int light_flg; int com_flg; int dat1,dat2,dat3,dat4,dat5; //汎用フラグ } MAN; typedef struct { unsigned long attribute; unsigned short w, h; unsigned short tpage; unsigned char u, v; short cx, cy; u_char mx,my; } TXDAT; //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− // 関数プロトタイプ宣言 //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− long SIN(int x); long COS(int x); int ATAN(long dx,long dy); int MainLoop(); //メインループ(毎回呼ばれる、ゲームの処理をする関数) //返り値==0で終了 //初期化系関数 void InitGame(); //すべての初期化処理 void InitView(); //視点初期化関数 void InitLight(); //光源初期化関数 void InitModel(); //モデリングデータ初期化関数 void InitCoord(); //モデリング座標データ初期化関数 void InitSe(); //SEの初期設定(データ転送) void InitBGM(); //BGMの初期設定(データ転送) void InitTexture(); //テクスチャーデータの転送 void InitBGCoord(); //表示関連 void SetManData(MAN *p);//人物データの設定、表示 //効果音関連 void PlaySE( int n ); //指定番号のSEを鳴らす //設定関連 void SetObj(OBJ *op); //オブジェクトの表示 void SetView(int vmode); //視点設定関数 void SetTxDat( GsSPRITE *sp, TXDAT *tp ); //スプライトの絵のセット void SetHitMark( int syu,MATRIX *m,int cnt, int size );//ヒットマークのセット void SetFlyObject( int syu, MATRIX *m, int flg, int face, int px,int py, int pz, int cnt, int size ); //void SetFlyObject( int syu, MATRIX *m, int flg, int face, int px, int py, int pz, int cnt ); void SetOther( int syu, int vx, int vy, int vz,int rx, int ry, int rz, int dat1,int dat2, int dat3, int dat4, int dat5 ); void SetBGVram( int no ) ; void Other0Move(OTHER *op); void PutOther(); void SetMoji( int syu,int x,int y,int cnt );//mojiのセット void PutMoji( );//mojiのセット void ClearNumber(); void PutSPRITE( GsSPRITE *sp ); void PadRead(); //パッドデータ読み込み void SetMdata( MAN *p, MOVDATA *mvp, int m_num ); //瞬時に指定したポーズに強制移行 void SetNewMotion( MAN *p, MOVDATA *mvp, int m_no ); //モーションを始める int MoveNextMotion( MAN *p ); //モーションを進める int GetGrandHeight(int x); //指定座標の床の高さを求める int GetGrandXpoz(int x); //引数座標の床の中心x座標を求める int GetGrandSyu(int x); //引数座標の床のSYUを求める BOOL ChkWallIn(int px,int py); //壁判定(壁の中ならTRUEを返す) BOOL ChkWallRefrect(int px,int py);//壁判定(反射フラグを返す) BOOL ChkWallHitInJump(MAN *p); //壁判定ジャンプ中バージョン(壁についていたらTRUEを返す) BOOL ChkWallHit(MAN *p); BOOL ChkGrandHit(MAN *p); //地面判定(地面についていたらTRUEを返す) void GetCommand( MAN *p ); //コマンド入力判定 void ChFireMove(MAN *p,MAN *e); //かえんほうしゃ void ChBoomMove(MAN *p,MAN *e); //BOOM void SetCh0Coord(MAN *m); //0番キャラクタ初期設定関数 void Ch0Move(MAN *p,MAN *e); //0番キャラクタ移動ルーチン void SetCh0JYA( MAN *p ); void SetCh0TYU( MAN *p ); void SetCh0KYO( MAN *p ); void SetCh0YRO( MAN *p ); void SetCh0UKI( MAN *p ); void SetCh1Coord(MAN *m); //0番キャラクタ初期設定関数 void Ch1Move(MAN *p,MAN *e); //0番キャラクタ移動ルーチン void SetCh1JYA( MAN *p ); void SetCh1TYU( MAN *p ); void SetCh1KYO( MAN *p ); void SetCh1YRO( MAN *p ); void SetCh1UKI( MAN *p ); void InitBGCoord(); void InitOther(); void InitFlyObj(); void ComMove( MAN *p, MAN *e ); void SetLight( int no ); //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− // 共通グローバル変数  //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− extern u_long *dop[OBJ_SYU_MAX]; //オブジェクトデータへのポインタ extern u_short tpage[TPAGE_MAX]; //テクスチャーページ番号 extern int vmode; //視点モード extern BOOL end_flg; //終了フラグ extern MAN man[2]; //人物二人 extern MARK mark[MARK_MAX]; //ヒットマーク表示用構造体 extern FLYOBJ fly[FLY_MAX]; //飛び道具構造体 extern OTHER other[OTHER_MAX]; //その他物体構造体 extern HITDATA hitdata; //飛び道具用ダミー構造体 extern BG bg; extern int ColTbl[]; extern int anten_cnt,anten_flg; //暗転表示フラグ //extern MOVDATA walk0[]; extern int stage_no; //現在のゲームの状態 extern int mode_no; //現在のゲームモード extern GsSPRITE title_bg; extern GsSPRITE title_bg,vs_pl,vs_com,vs_sur,vs_watch,vs_exit,cursor; extern int exit_flg; //EXIT表示ON/off extern int win_num; //座場威張るモードの価値数 #endif