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