1 
2 #ifndef __SPRITE_H__
3 #define __SPRITE_H__
4 
5 #include <glib.h>
6 
7 #include "portab.h"
8 #include "surface.h"
9 #include "graphics.h"
10 
11 #define DEFAULT_UPDATE sp_draw
12 
13 
14 #define SPRITEMAX 20
15 #define SPNO_WALL    0  // �ɻ�
16 #define SPNO_SCENERY 1  // �ط�
17 #define SPNO_TACHI_L 2  // Ω������
18 #define SPNO_TACHI_M 3  // Ω�������
19 #define SPNO_TACHI_R 4  // Ω������
20 #define SPNO_MSGBG   5  // ʸ������
21 #define SPNO_MSGFRAME_BG 6 // ��å��������������
22 #define SPNO_MSGFRAME_FG 7 // ��å�����ʸ�����襭���Х�
23 #define SPNO_FACE 11        // ��ʪ��CG
24 #define SPNO_MSG_KEYANIM 12 // ��å������������ϥ��˥᡼�����
25 #define SPNO_MSG_ICON_MUTE 13 // ��å�����������ɥ�������
26 
27 #define CGMAX 65536
28 // 0-9999: reserve for Link CG
29 // 2051: ��å��������������CG
30 #define CGNO_MSGFRAME_LCG 2051
31 // 4017: ��å�����������ɤ�����mute�ˤ���CG
32 #define CGNO_MSGFRAME_NOVICE_LCG 4017
33 // 4018: ��å�����������ɤΥ�������˥ޥ������Ťʤä��Ȥ���CG
34 #define CGNO_MSGFRAME_ICONREV_LCG 4018
35 // 4034: �������Ϥ�¥�����˥᡼�����CG
36 #define CGNO_MSGHAK_LCG 4034
37 
38 // 10000: ��å�����������ɤǤΥ����Ԥ����˥� ����1
39 #define CGNO_MSGHAK_1 10000
40 // 10001: ��å�����������ɤǤΥ����Ԥ����˥� ����2
41 #define CGNO_MSGHAK_2 10001
42 // 10002: ʸ������CG
43 #define CGNO_MSGFR_BG 10002
44 
45 
46 // CG_XX �Ǻ��CG�μ���
47 enum cgtype {
48 	CG_NOTUSED = 0,
49 	CG_LINKED  = 1,
50 	CG_SET     = 2,
51 	CG_REVERSE = 3,
52 	CG_STRETCH = 4
53 };
54 
55 // cg�˴ؤ������
56 struct _cginfo {
57 	enum cgtype type;  // CG�μ���, 0: ̤����, 1:�������Ƥ���, ...
58 	int no;            // CG���ֹ�
59 	surface_t *sf;     // CG����
60 	int refcnt;        // ���ȥ����������ˤʤä��鳫�����Ƥ�褤��
61 };
62 typedef struct _cginfo cginfo_t;
63 
64 
65 enum spritetype {
66 	SPRITE_NORMAL = 0,
67 	SPRITE_ANIME  = 5,
68 	SPRITE_MSG    = 100,
69 	SPRITE_WP,
70 	SPRITE_NONE   = -1
71 };
72 
73 struct _sprite {
74 	enum spritetype type;
75 
76 	int no;
77 
78 	MyDimension cursize;
79 
80 	cginfo_t *curcg;
81 	cginfo_t *cg1, *cg2, *cg3;
82 
83 	boolean show;
84 
85 	int blendrate;
86 
87 	MyPoint loc;
88 
89 	MyPoint cur;
90 
91 	int (* update)(struct _sprite *sp, MyRectangle *updatearea);
92 
93 	union {
94 		struct {
95 			int interval;
96 			int startttime;
97 			int npat;
98 			unsigned int tick;
99 		} anime;
100 
101 		struct {
102 			surface_t *canvas;
103 			MyPoint dspcur;
104 		} msg;
105 	} u;
106 };
107 
108 typedef struct _sprite sprite_t;
109 
110 
111 /* in nt_sprite.c */
112 extern sprite_t *sp_new(int no, int cg1, int cg2, int cg3, int type);
113 extern sprite_t *sp_msg_new(int no, int x, int y, int width, int height);
114 extern void sp_free(sprite_t *sp);
115 extern void sp_set_show(sprite_t *sp, boolean show);
116 // extern void sp_set_cg(sprite_t *sp, int no);
117 extern void sp_set_loc(sprite_t *sp, int x, int y);
118 
119 /* in nt_sprite_update.c */
120 extern int sp_update_clipped();
121 extern int sp_update_all(boolean syncscreen);
122 extern int sp_updateme(sprite_t *sp);
123 extern int sp_updateme_part(sprite_t *sp, int x, int y, int w, int h);
124 extern void sp_add_updatelist(sprite_t *sp);
125 extern void sp_remove_updatelist(sprite_t *sp);
126 extern int sp_draw_wall(sprite_t *sp, MyRectangle *r);
127 
128 /* in nt_sprite_draw.c */
129 extern int sp_draw(sprite_t *sp, MyRectangle *r);
130 extern int sp_draw2(sprite_t *sp, cginfo_t *cg, MyRectangle *r);
131 extern void sp_draw_dmap(gpointer data, gpointer userdata);
132 extern int sp_draw_scg(sprite_t *sp, MyRectangle *r);
133 
134 /* in nt_sprite_eupdate.c */
135 extern int sp_eupdate(int type, int time, int cancel);
136 
137 
138 #endif /* __SPRITE_H__ */
139