mirror of
https://github.com/kichikuou/xsystem35-sdl2.git
synced 2026-09-30 10:48:21 +03:00
Add the compile-time SDL major version option and propagate it through interface targets. Route SDL includes through C99 compatibility headers while keeping SDL2 as the desktop and Emscripten default.
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_compat.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__ */
|