1 /* 2 * sact.h: SACT 3 * 4 * Copyright (C) 1997-1998 Masaki Chikama (Wren) <chikama@kasumi.ipl.mech.nagoya-u.ac.jp> 5 * 1998- <masaki-c@is.aist-nara.ac.jp> 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 2 of the License, or 10 * (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 * 21 */ 22 /* $Id: sact.h,v 1.3 2003/07/14 16:22:51 chikama Exp $ */ 23 24 #ifndef __SACT_H__ 25 #define __SACT_H__ 26 27 #include "config.h" 28 29 #include <glib.h> 30 #include "portab.h" 31 #include "graphics.h" 32 #include "surface.h" 33 #include "sacttimer.h" 34 #include "variable.h" 35 36 37 // ���ץ饤�Ȥκ���� 38 #define SPRITEMAX 21845 39 40 // CG�κ���� 41 #define CGMAX 63336 42 43 // ��å������κ���Ĺ�� 44 #define MSGBUFMAX 257*10 45 46 // �����κ������ǿ� 47 #define SEL_ELEMENT_MAX 20 48 49 50 // �����������Ȥμ��� 51 #define KEYWAIT_NONE 0 52 #define KEYWAIT_SIMPLE 1 53 #define KEYWAIT_SPRITE 2 54 #define KEYWAIT_MESSAGE 3 55 #define KEYWAIT_SELECT 4 56 #define KEYWAIT_BACKLOG 5 57 58 // ʸ�����ִ��� 59 typedef struct { 60 char *src; // �֤�������ʸ���� 61 char *dst; // �֤�����ʸ���� 62 } strexchange_t; 63 64 // SACTEFAM ��Ȥä��ޥ��� 65 typedef struct { 66 int fd; // SACTEFAM.KLD �Υե�����ǥ������ץ 67 char *mapadr; // mmap ���줿�ǽ�Υ��ɥ쥹 68 off_t size; // mmap �����礭�� 69 int datanum; // SACTEFAM.KLD ��Υޥ����ե�����ο� 70 int *no; // ���ʥꥪ¦�Ǥ��ֹ� 71 int *offset; // �ǡ����ؤΥ��ե��å� 72 } SACTEFAM_t; 73 74 75 // CG_XX �Ǻ��CG�μ��� 76 enum cgtype { 77 CG_NOTUSED = 0, 78 CG_LINKED = 1, 79 CG_SET = 2, 80 CG_REVERSE = 3, 81 CG_STRETCH = 4 82 }; 83 84 // cg�˴ؤ������ 85 struct _cginfo { 86 enum cgtype type; // CG�μ���, 0: ̤����, 1:�����Ƥ���, ... 87 int no; // CG���ֹ� 88 surface_t *sf; // CG���� 89 int refcnt; // ���ȥ��������ˤʤä��鳫�����Ƥ�褤�� 90 }; 91 typedef struct _cginfo cginfo_t; 92 93 // ���ץ饤�ȤΥ����� 94 enum spritetype { 95 SPRITE_NORMAL = 0, 96 SPRITE_SWITCH = 1, 97 SPRITE_GETA = 2, 98 SPRITE_GETB = 3, 99 SPRITE_PUT = 4, 100 SPRITE_ANIME = 5, 101 SPRITE_SWPUT = 6, 102 SPRITE_MSG =100, 103 SPRITE_WP, 104 SPRITE_NONE =-1 105 }; 106 107 // (����������) 108 struct _sprite; 109 110 // ���ץ饤�Ȥ˴ؤ���Ƽ���� 111 struct _sprite { 112 // ���ץ饤�ȤΥ����� 113 enum spritetype type; 114 115 // ���ץ饤���ֹ� 116 int no; 117 118 // ���줾��ξ��֤λ����Ĥ餹��������ֹ� 119 int numsound1, numsound2, numsound3; 120 121 // ��� sprite ���礭��(cg1���礭��) 122 MyDimension cursize; 123 124 // ���줾��ξ��֤�ɽ������ CG 125 cginfo_t *cg1, *cg2, *cg3; 126 127 // update ����Ȥ���ɽ������cg 128 cginfo_t *curcg; 129 130 // ���ץ饤�Ȥ�ɽ�����뤫 131 boolean show; 132 boolean show_save; // Zkey hide save�� 133 134 // ɽ������ݤΥ֥���Ψ 0:���������ʤ�, 255: �̾�ɽ�� 135 int blendrate; 136 137 // ���ץ饤�Ȥ� Freeze ����Ƥ��뤫(0:No 1-3: �����ֹ�) 138 int freezed_state; 139 140 // ɽ������ (SetPos) 141 MyPoint loc; 142 143 // ���ߤΥ��ץ饤�Ȥ�ɽ������ 144 MyPoint cur; 145 146 // event callback 147 int (* eventcb)(struct _sprite *sp, agsevent_t *e); // for key/mouse 148 int (* teventcb)(struct _sprite *sp, agsevent_t *e); // for timer 149 // sprite������� callback 150 void (* remove)(struct _sprite *sp); 151 // sprite������褹��Ȥ��� callback 152 int (* update)(struct _sprite *sp); 153 154 boolean focused; // forcus�����Ƥ��뤫 155 boolean pressed; // ����sprite��ǥޥ�����������Ƥ��뤫 156 157 GSList *expsp; // �������ץ饤�ȤΥꥹ�� 158 159 // move command �ѥѥ��� 160 struct { 161 MyPoint to; // ��ư�� 162 int time; // ��ư��λ���� 163 int speed; // ��ư®�� 164 int starttime; // ��ư���ϻ��� 165 int endtime; // ��ư��λͽ����� 166 boolean moving; // ��ư�椫�ɤ��� 167 } move; 168 169 // SACT.Numeral�ѥѥ��� 170 struct { 171 int cg[10]; 172 MyPoint pos; 173 int span; 174 } numeral; 175 176 // ���ץ饤�Ȥμ�����ξ��� 177 union { 178 // �����å����ץ饤�� 179 struct { 180 181 } sw; 182 183 // ���åȥ��ץ饤�� 184 struct { 185 boolean dragging; // �ɥ�å��� 186 MyPoint dragstart; // �ɥ�å����ϰ��� 187 } get; 188 189 // �ץåȥ��ץ饤�� 190 struct { 191 192 } put; 193 194 // ���˥����ץ饤�� 195 struct { 196 int interval; // �����ޤδֳ�(10msec) 197 int starttime; // ���ϻ��� 198 int npat; // ���˥ᥳ��(1/2/3) 199 unsigned int tick; // ������ 200 } anime; 201 202 // ��å��������ץ饤�� 203 struct { 204 GSList *buf; // ɽ������ʸ���Υꥹ�� 205 surface_t *canvas; // ʸ�������褹��surface 206 MyPoint dspcur; // ���ߤ�ɽ������ 207 } msg; 208 } u; 209 }; 210 typedef struct _sprite sprite_t; 211 212 // SACT���Τξ��� 213 struct _sact { 214 // SACT�ΥС������ 215 int version; 216 217 // ���ץ饤������ 218 sprite_t *sp[SPRITEMAX]; 219 220 GSList *sp_zhide; // Z�����Ǿä����ץ饤�ȤΥꥹ�� 221 GSList *sp_quake; // Quake���ɤ餹���ץ饤�ȤΥꥹ�� 222 223 GSList *updatelist; // �����褹�륹�ץ饤�ȤΥꥹ�� 224 225 cginfo_t *cg[CGMAX]; // cg�ޤ���CG_xx�Ǻ�ä� CG 226 227 // ��ɸ�Ϥθ��� 228 MyPoint origin; 229 230 // ʸ���� push/pop/replce �� 231 GSList *strstack; 232 GSList *strreplace; 233 char *strreplacesrc; 234 char *strreplacedst; 235 236 // ��å��������ץ饤���ѥ�å������Хåե� 237 char msgbuf[MSGBUFMAX]; 238 char msgbuf2[MSGBUFMAX]; 239 240 // ������� 241 struct { 242 char *elem[SEL_ELEMENT_MAX]; // �����ʸ���� 243 int spno; // �طʥ��ץ饤���ֹ� 244 int font_size; // �����ʸ�������� 245 int font_type; // �����ե���� 246 int frame_dot; // �ȥ��ץ饤�Ȥγ�¦����Υԥ������ 247 int linespace; // �����ιԴ� 248 int movecursor; // ������� 249 int align; // �Ԥ��� 250 void (* cbmove)(agsevent_t *); 251 void (* cbrelease)(agsevent_t *); 252 surface_t *charcanvas; 253 } sel; 254 255 // event listener 256 GSList *eventlisteners; 257 GSList *teventlisteners; 258 GSList *teventremovelist; 259 260 // MOVE���륹�ץ饤�ȤΥꥹ�� 261 GSList *movelist; 262 int movestarttime; // ���Ƥ˰�ư�Ϥ��뤿��γ��ϻ��� 263 int movecurtime; 264 265 MyRectangle updaterect; // ������ɬ�פ�sprite���ΰ���� 266 267 // sact timer 268 stimer_t timer[65536]; 269 270 // DnD�˴ؤ����� 271 sprite_t *draggedsp; // drag��Υ��ץ饤�� 272 boolean dropped; // ���ץ饤�Ȥ��ɥ�åפ��줿���ɤ��� 273 274 // keywait�μ��� 275 int waittype; 276 int waitkey; 277 int sp_result_sw; 278 int sp_result_get; 279 int sp_result_put; 280 281 // wait skip level 282 // 0 �̾省���Ԥ� 283 // 1 ���ɤΤߥ����å� 284 // 2 ̤�ɤ⥹���å� 285 int waitskiplv; 286 287 // �ϰϳ���å������Ȥ��β� 288 int numsoundob; 289 290 // depth map 291 surface_t *dmap; 292 293 // SACTEFAM.KLD 294 SACTEFAM_t am; 295 296 boolean zhiding; // Zkey�ˤ�뱣���� 297 int zofftime; 298 boolean zdooff; 299 300 // �Хå��� 301 boolean logging; 302 GList *log; 303 }; 304 typedef struct _sact sact_t; 305 306 // shortcut 307 #define sact sactprv 308 extern sact_t sact; 309 310 #endif /* __SACT_H__ */ 311