graphic.h
3.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
/*============================================================================
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_ */