mirror of
https://github.com/kichikuou/xsystem35-sdl2.git
synced 2026-09-26 00:18:04 +03:00
267 lines
6.4 KiB
C
267 lines
6.4 KiB
C
/*
|
|
* sact.h: SACT
|
|
*
|
|
* Copyright (C) 1997-1998 Masaki Chikama (Wren) <chikama@kasumi.ipl.mech.nagoya-u.ac.jp>
|
|
* 1998- <masaki-c@is.aist-nara.ac.jp>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*
|
|
*/
|
|
/* $Id: sact.h,v 1.3 2003/07/14 16:22:51 chikama Exp $ */
|
|
|
|
#ifndef __SACT_H__
|
|
#define __SACT_H__
|
|
|
|
#include "config.h"
|
|
#include <SDL_rect.h>
|
|
#include "portab.h"
|
|
#include "list.h"
|
|
#include "ags.h"
|
|
#include "sacttimer.h"
|
|
#include "sactcg.h"
|
|
|
|
// スプライトの最大数
|
|
#define SPRITEMAX 21845
|
|
|
|
// メッセージの最大長さ
|
|
#define MSGBUFMAX 257*10
|
|
|
|
// 選択肢の最大要素数
|
|
#define SEL_ELEMENT_MAX 20
|
|
|
|
|
|
// キーウェイトの種類
|
|
#define KEYWAIT_NONE 0
|
|
#define KEYWAIT_SIMPLE 1
|
|
#define KEYWAIT_SPRITE 2
|
|
#define KEYWAIT_MESSAGE 3
|
|
#define KEYWAIT_SELECT 4
|
|
#define KEYWAIT_BACKLOG 5
|
|
|
|
// 文字列置換用
|
|
typedef struct {
|
|
char *src; // 置き換え元文字列
|
|
char *dst; // 置き換え文字列
|
|
} strexchange_t;
|
|
|
|
// スプライトのタイプ
|
|
enum spritetype {
|
|
SPRITE_NORMAL = 0,
|
|
SPRITE_SWITCH = 1,
|
|
SPRITE_GETA = 2,
|
|
SPRITE_GETB = 3,
|
|
SPRITE_PUT = 4,
|
|
SPRITE_ANIME = 5,
|
|
SPRITE_SWPUT = 6,
|
|
SPRITE_MSG =100,
|
|
SPRITE_WP,
|
|
SPRITE_NONE =-1
|
|
};
|
|
|
|
// (前方参照用)
|
|
struct _sprite;
|
|
|
|
// スプライトに関する各種情報
|
|
struct _sprite {
|
|
// スプライトのタイプ
|
|
enum spritetype type;
|
|
|
|
// スプライト番号
|
|
int no;
|
|
|
|
// それぞれの状態の時に鳴らすサウンド番号
|
|
int numsound1, numsound2, numsound3;
|
|
|
|
// 初期 sprite の大きさ(cg1の大きさ)
|
|
int width;
|
|
int height;
|
|
|
|
// それぞれの状態で表示する CG
|
|
cginfo_t *cg1, *cg2, *cg3;
|
|
|
|
// update するときに表示するcg
|
|
cginfo_t *curcg;
|
|
|
|
// スプライトを表示するか
|
|
bool show;
|
|
bool show_save; // Zkey hide save用
|
|
|
|
// 表示する際のブレンド率 0:全く見えない, 255: 通常表示
|
|
int blendrate;
|
|
|
|
// スプライトが Freeze されているか(0:No 1-3: その番号)
|
|
int freezed_state;
|
|
|
|
// 表示位置 (SetPos)
|
|
SDL_Point loc;
|
|
|
|
// 現在のスプライトの表示位置
|
|
SDL_Point cur;
|
|
|
|
// event callback
|
|
int (* eventcb)(struct _sprite *sp, agsevent_t *e); // for key/mouse
|
|
int (* teventcb)(struct _sprite *sp, agsevent_t *e); // for timer
|
|
// sprite削除時の callback
|
|
void (* remove)(struct _sprite *sp);
|
|
// spriteを再描画するときの callback
|
|
void (* update)(struct _sprite *sp);
|
|
|
|
bool focused; // forcusを得ているか
|
|
bool pressed; // このsprite上でマウスが押されているか
|
|
|
|
SList *expsp; // 説明スプライトのリスト
|
|
|
|
// move command 用パラメータ
|
|
struct {
|
|
SDL_Point to; // 移動先
|
|
int time; // 移動完了時間
|
|
int speed; // 移動速度
|
|
int starttime; // 移動開始時刻
|
|
int endtime; // 移動終了予定時刻
|
|
bool moving; // 移動中かどうか
|
|
} move;
|
|
|
|
// SACT.Numeral用パラメータ
|
|
struct {
|
|
int cg[10];
|
|
SDL_Point pos;
|
|
int span;
|
|
} numeral;
|
|
|
|
// スプライトの種類毎の情報
|
|
union {
|
|
// スイッチスプライト
|
|
struct {
|
|
|
|
} sw;
|
|
|
|
// ゲットスプライト
|
|
struct {
|
|
bool dragging; // ドラッグ中
|
|
SDL_Point dragstart; // ドラッグ開始位置
|
|
} get;
|
|
|
|
// プットスプライト
|
|
struct {
|
|
|
|
} put;
|
|
|
|
// アニメーションスプライト
|
|
struct {
|
|
int interval; // 1コマの間隔(10msec)
|
|
int starttime; // 開始時刻
|
|
int npat; // アニメコマ数(1/2/3)
|
|
unsigned int tick; // カウンタ
|
|
} anime;
|
|
|
|
// メッセージスプライト
|
|
struct {
|
|
SList *buf; // 表示する文字のリスト
|
|
struct SDL_Surface *canvas;
|
|
SDL_Point dspcur; // 現在の表示位置
|
|
} msg;
|
|
} u;
|
|
};
|
|
typedef struct _sprite sprite_t;
|
|
|
|
// SACT全体の情報
|
|
struct _sact {
|
|
// SACTのバージョン
|
|
int version;
|
|
|
|
// スプライト全体
|
|
sprite_t *sp[SPRITEMAX];
|
|
|
|
SList *sp_zhide; // Zキーで消すスプライトのリスト
|
|
SList *sp_quake; // Quakeで揺らすスプライトのリスト
|
|
|
|
SList *updatelist; // 再描画するスプライトのリスト
|
|
|
|
// 座標系の原点
|
|
SDL_Point origin;
|
|
|
|
// 文字列 replce 用
|
|
SList *strreplace;
|
|
|
|
// メッセージスプライト用メッセージバッファ
|
|
char msgbuf[MSGBUFMAX];
|
|
char msgbuf2[MSGBUFMAX];
|
|
|
|
// 選択ウィンド
|
|
struct {
|
|
char *elem[SEL_ELEMENT_MAX]; // 選択肢文字列
|
|
int spno; // 背景スプライト番号
|
|
int font_size; // 選択肢文字サイズ
|
|
int font_type; // 選択肢フォント
|
|
int frame_dot; // 枠スプライトの外側からのピクセル数
|
|
int linespace; // 選択肢の行間
|
|
int movecursor; // 初期選択
|
|
int align; // 行そろえ
|
|
void (* cbmove)(agsevent_t *);
|
|
void (* cbrelease)(agsevent_t *);
|
|
struct SDL_Surface *charcanvas;
|
|
} sel;
|
|
|
|
// event listener
|
|
SList *eventlisteners;
|
|
SList *teventlisteners;
|
|
SList *teventremovelist;
|
|
|
|
// MOVEするスプライトのリスト
|
|
SList *movelist;
|
|
int movestarttime; // 一斉に移動を開始するための開始時間
|
|
int movecurtime;
|
|
|
|
SDL_Rect updaterect; // 更新が必要なspriteの領域の和
|
|
|
|
// DnDに関するもの
|
|
sprite_t *draggedsp; // drag中のスプライト
|
|
bool dropped; // スプライトがドロップされたかどうか
|
|
|
|
// keywaitの種類
|
|
int waittype;
|
|
int waitkey;
|
|
int sp_result_sw;
|
|
int sp_result_get;
|
|
int sp_result_put;
|
|
|
|
// wait skip level
|
|
// 0 通常キー待ち
|
|
// 1 既読のみスキップ
|
|
// 2 未読もスキップ
|
|
int waitskiplv;
|
|
|
|
// 範囲外をクリックしたときの音
|
|
int numsoundob;
|
|
|
|
// depth map
|
|
struct SDL_Surface *dmap;
|
|
|
|
bool zhiding; // Zkeyによる隠し中
|
|
int zofftime;
|
|
bool zdooff;
|
|
|
|
// バックログ
|
|
bool logging;
|
|
List *log; // UTF-8 strings
|
|
};
|
|
typedef struct _sact sact_t;
|
|
|
|
// shortcut
|
|
#define sact sactprv
|
|
extern sact_t sact;
|
|
|
|
#endif /* __SACT_H__ */
|