tile.h
2.08 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
/*
* NINTENDO64 SAMPLE PROGRAM
*
* FILE : tile.h
*
* Copyright (C) 1997, NINTENDO Co,Ltd.
*/
#define TILES 16
#define X_TILES 4
#define Y_TILES 4
#define TILE_WD 128
#define TILE_HT 96
#define SUBTILES 6
#define X_SUBTILES 2
#define Y_SUBTILES 3
#define SUBTILE_WD 64
#define SUBTILE_HT 32
#define SUBTILE_SIZE 4096
#define ORIGIN_X 64
#define ORIGIN_Y 48
#define MOVE_FRAMES 96 /* タイルの移動に要するフレーム数 */
#define FRAC_CONST 4
/* タイル構造体 */
typedef struct TILE_STATE_s {
struct TILE_STATE_s *next; /* 一方向リスト */
uObjSprite *tileSprite[SUBTILES]; /* タイル用スプライト構造体 */
uObjTxtr *tileTxtr [SUBTILES]; /* タイル用テクスチャ構造体 */
uObjSubMtx tileMtx[2]; /* タイル用マトリクス構造体 */
u8 id; /* タイル ID
--- --- --- ---
| 0 | 1 | 2 | 3 |
--- --- --- ---
| 4 | 5 | 6 | 7 |
--- --- --- ---
| 8 | 9 | 10| 11|
--- --- --- ---
| 12| 13| 14| 15|
--- --- --- --- */
u8 shade_flag; /* 反転表示用フラグ */
f32 dest_x;
f32 dest_y; /* タイルの移動先 */
f32 delta_x;
f32 delta_y; /* タイルの移動速度 */
f32 loc_x;
f32 loc_y; /* タイルの位置 */
} TILE_STATE;
/* ONE タイルスプライト構造体 */
typedef struct {
uObjSprite *subtiles[SUBTILES];
} ONE_TILE_SPRITE;
/* ONE タイルテクスチャ構造体 */
typedef struct {
uObjTxtr *subtiles[SUBTILES];
} ONE_TILE_TEXTURE;
/* ALL タイルテクスチャ構造体 */
typedef struct {
ONE_TILE_TEXTURE *tiles[TILES];
} ALL_TILES_TEXTURE;
/* タイル構造体の初期化 */
void tileInit(TILE_STATE *, TILE_STATE *, ONE_TILE_SPRITE *, ALL_TILES_TEXTURE *);
/* タイルノードのサーチ */
s8 tileSearch(TILE_STATE *, u8 , TILE_STATE **, TILE_STATE **);
/* タイルノードのスワップ */
void tileSwap(TILE_STATE *, u8, u8);
/* タイルの移動前処理 */
void tilePreMove(TILE_STATE *, u8, u8);
/* タイルの移動 */
void tileMove(TILE_STATE *, u8, u8);
/* タイルの移動後処理 */
void tileAfterMove(TILE_STATE *, u8);
/* タイルの描画 */
Gfx *tileDraw(Gfx *, TILE_STATE *, u8);