graphic.h 3.84 KB
/*============================================================================
  NuSYSTEM サンプルプログラム「SNAKE TAIL HACK」
  
  graphic.h
  
  Copyright (C) 1997, NINTENDO Co,Ltd.
  ============================================================================*/

#ifndef _GRAPHIC_H_
#define _GRAPHIC_H_
#include "para.h"

/* スクリーンサイズ */
#define SCREEN_HT        240
#define SCREEN_WD        320

/* 一つのタスクのディスプレイリストの長さの最大値 */
#define GFX_GLIST_LEN     2048*10

/* 1リトレース期間でのグラフィックタスクの最大値 */
#define GFX_GTASK_NUM        2


/*-------------------------- define structure ------------------------------ */
/* 投影マトリクス行列構造体 */
typedef struct {
  Mtx     projection;
  Mtx     modeling;
  Mtx     viewing;
  
  Mtx     base_trans;
  Mtx     base_rotate;
  Mtx     base_scale;

  Mtx     saku_trans;
  Mtx     saku_rotate;
  Mtx     saku_scale;

  Mtx     obj_trans[OBJ_MAX];
  Mtx     obj_rotate[OBJ_MAX];
  Mtx     obj_scale[OBJ_MAX];

  Mtx     snake_trans[SNAKE_MAX][SNAKE_MAX_LEN+1];
  Mtx     snake_rotate[SNAKE_MAX][SNAKE_MAX_LEN+1];
  Mtx     snake_scale[SNAKE_MAX][SNAKE_MAX_LEN+1];

  Mtx     shot_trans[20];
  Mtx     shot_rotate[20];
  Mtx     shot_scale[20];

  /*ムービー描画用バッファ*/
  unsigned short MovieBuf[8200];
} Dynamic;

/* 自機の各種パラメーター */
typedef struct {
    int tailcnt[SNAKE_MAX];	/*自機につながってるテイルの数*/
    int wallhit[SNAKE_MAX];	/*自機がマップの範囲内にいるか*/
    int objhit[SNAKE_MAX];	/*自機がマップの範囲内にいるか*/
    int shottailhit[SNAKE_MAX];	/*敵が打ったテイルが自分に当たったかどうか*/
    int enemyhit[SNAKE_MAX];	/*自機が敵と当たったかどうか*/
    int bufidx[SNAKE_MAX];	/*テイルが自機の軌跡を追い掛けるためのバッファのインデックス*/
    int bufidx_wk[SNAKE_MAX];	/*↑の計算用ワーク*/
    int stickon[SNAKE_MAX];	/*3Dスティックが倒されているか*/
    float head_dir[SNAKE_MAX];	/*自機に頭の向き*/
    int sleepcnt[SNAKE_MAX];	/*気絶している時間(V単位)*/

    int enemytailhit[SNAKE_MAX];	/*敵のテイルに当たったかどうか*/
    int enemytailhitnum[SNAKE_MAX];	/*敵のテイルに当たった時の敵のテイル番号*/

    int tail_attr[SNAKE_MAX][SNAKE_MAX_LEN+1];	/*表示するテイルの種類*/

    float pos_x[SNAKE_MAX][SNAKE_MAX_LEN+1];	/*表示するX座標*/
    float pos_y[SNAKE_MAX][SNAKE_MAX_LEN+1];	/*表示するY座標*/
    float pos_z[SNAKE_MAX][SNAKE_MAX_LEN+1];	/*表示するZ座標*/

    float rot_x[SNAKE_MAX][SNAKE_MAX_LEN+1];	/*表示するX軸方向の回転角*/
    float rot_y[SNAKE_MAX][SNAKE_MAX_LEN+1];	/*表示するY軸方向の回転角*/
    float rot_z[SNAKE_MAX][SNAKE_MAX_LEN+1];	/*表示するZ軸方向の回転角*/

    float size_x[SNAKE_MAX][SNAKE_MAX_LEN+1];	/*表示するX軸方向のスケール*/
    float size_y[SNAKE_MAX][SNAKE_MAX_LEN+1];	/*表示するY軸方向のスケール*/
    float size_z[SNAKE_MAX][SNAKE_MAX_LEN+1];	/*表示するZ軸方向のスケール*/
} SnakePara;

/* ショット用テイルのパラメーター */
typedef struct{
    float pos_x;	/*X座標*/
    float pos_y;	/*Y座標*/
    float pos_z;	/*Z座標*/
    float rot_x;	/*X軸方向の回転角*/
    float rot_y;	/*Y軸方向の回転角*/
    float rot_z;	/*Z軸方向の回転角*/
    float size_x;
    float size_y;
    float size_z;
    int tail_pattern;
    int user;
    float tail_dir;
    int status;
}ShotTail;

/* 自機のヘッドの軌跡 */
typedef struct{
    float SnakeX[TAIL_MOVE_BUF];
    float SnakeY[TAIL_MOVE_BUF];
    float SnakeRotZ[TAIL_MOVE_BUF];
}SnakeMove;


/*-------------------------------- parameter---------------------------------*/
extern Dynamic gfx_dynamic[];
extern Gfx* glistp;
extern Gfx gfx_glist[GFX_GTASK_NUM][GFX_GLIST_LEN];
extern u32 gfx_gtask_no;
/*-------------------------------- function ---------------------------------*/
extern void gfxRCPInit(void);
extern void gfxClearCfb(void);
/*------------------------------- other extern define -----------------------*/
extern Gfx setup_rdpstate[];
extern Gfx setup_rspstate[];

#endif /* _GRAPHIC_H_ */