mirror of
https://github.com/kichikuou/xsystem35-sdl2.git
synced 2026-09-25 07:58:04 +03:00
This fixes an issue where the roulette in Rance 5D could not be fast forwarded using the Ctrl key.
2276 lines
59 KiB
C
2276 lines
59 KiB
C
/*
|
|
* sact.c: 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.c,v 1.10 2004/10/31 04:18:02 chikama Exp $ */
|
|
|
|
#include "config.h"
|
|
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <SDL.h>
|
|
#ifdef __EMSCRIPTEN__
|
|
#include <emscripten.h>
|
|
#endif
|
|
|
|
#include "portab.h"
|
|
#include "system.h"
|
|
#include "ald_manager.h"
|
|
#include "input.h"
|
|
#include "msgskip.h"
|
|
#include "xsystem35.h"
|
|
#include "message.h"
|
|
#include "modules.h"
|
|
#include "music.h"
|
|
#include "nact.h"
|
|
#include "sact.h"
|
|
#include "sprite.h"
|
|
#include "sactcg.h"
|
|
#include "sactstring.h"
|
|
#include "sactsound.h"
|
|
#include "sactcrypto.h"
|
|
#include "sactchart.h"
|
|
#include "sactamask.h"
|
|
|
|
/*
|
|
妻みぐい2キー説明
|
|
|
|
メッセージスキップ(既読、未読関係なくスキップ) -> Ctrl
|
|
自動メッセージ送り -> Aキー
|
|
Aキーを押すことで、自動的にメッセージがすすんで行きます。(自動メッセージ
|
|
送りがONになると、メッセージウィンドの右下にある入力待ちカーソル(>>>>)が
|
|
消えます。解除する場合は、セリフもしくは音声終了まで、Aキーを押し続けて
|
|
ください。Aキーを離したときに、入力待ちカーソルが表示されれば解除された
|
|
ことになります。
|
|
バックログ -> ホイール
|
|
*/
|
|
|
|
|
|
/*
|
|
wNum の範囲など、引数のチェックは各サブシステム上でする。
|
|
|
|
|
|
実装確認事項
|
|
SACT.CreateSprite はその呼ばれた瞬間のCGが使用される
|
|
->SACT.DrawまでにCGが変更されても、Create時のCGを使用
|
|
OutputMessageはメッセージが表示終るまでもどってこない。
|
|
QuakeScreenは終了までもどってこない。(キー抜けあり)
|
|
自動改行はしない
|
|
OutputMessage がきて始めて1文字づつ描画を行う。NewLineでは書かない。
|
|
~KEY 2: は直前の全てのSP_MOVEが終了するまでスイッチスプライト等は反応しない
|
|
drag中にスイッチスプライトは反応しない
|
|
アニメーションスプライトはつねに動作
|
|
スイッチスプライトは、ボタンが押下状態でスプライト内に入って来たときも、
|
|
cg3に変化する。このときボタンを離しても SpriteKeyWaitを抜けない。
|
|
また、ボタンを押したままスプライト外に出ても、出た後はcg1に変化する
|
|
GETA/BもフォーカスインでCG2にボタン押下でCG3に
|
|
SWPUTはボタン押下で抜ける
|
|
*/
|
|
|
|
|
|
// SACT 関連の情報
|
|
sact_t sactprv;
|
|
extern char *xsys35_sact01;
|
|
|
|
/*
|
|
Version 1.0 : エスカレイヤー
|
|
1.1 : Rance5D
|
|
1.2(前期): 妻みぐい2
|
|
1.2(後期): SACT開発キット, シェル・クレイル, NightDemon
|
|
*/
|
|
static int detect_sact_version(void) {
|
|
S39AIN_DLLINF *dll = NULL;
|
|
for (int i = 0; i < nact->ain.dllnum; i++) {
|
|
if (!strcasecmp(nact->ain.dll[i].name, "SACT")) {
|
|
dll = &nact->ain.dll[i];
|
|
break;
|
|
}
|
|
}
|
|
if (!dll)
|
|
return 0;
|
|
for (int i = 0; i < dll->function_num; i++) {
|
|
if (!strcmp(dll->function[i].name, "MessageOutput")) {
|
|
switch (dll->function[i].argc) {
|
|
case 8: return 100;
|
|
case 9: return 110;
|
|
case 10: return 120;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/**
|
|
* SACT.Init (1.0~)
|
|
* SACT全体の初期化
|
|
*/
|
|
static void Init() {
|
|
int p1 = getCaliValue(); /* ISys3x */
|
|
|
|
sact.version = detect_sact_version();
|
|
if (!sact.version)
|
|
SYSERROR("Cannot determine SACT version");
|
|
NOTICE("SACT version = %d", sact.version);
|
|
|
|
// 初期座標原点
|
|
sact.origin.x = 0;
|
|
sact.origin.y = 0;
|
|
|
|
// 各サブシステム初期化
|
|
sp_init();
|
|
sstr_init();
|
|
ssel_init();
|
|
stimer_init();
|
|
ssnd_init();
|
|
|
|
if (nact->files.sact01) {
|
|
smask_init(nact->files.sact01);
|
|
}
|
|
|
|
// create depth map
|
|
sact.dmap = SDL_CreateRGBSurface(0, main_surface->w, main_surface->h, 16, 0, 0, 0, 0);
|
|
|
|
// その他 System35 のデフォルト動作の変更
|
|
ags_setAntialiasedStringMode(true);
|
|
sys_setHankakuMode(2); // 全角半角変換無し
|
|
ags_autorepeat(false); // key auto repeat off
|
|
|
|
if (sact.version >= 120) {
|
|
sact.logging = true;
|
|
#ifdef __EMSCRIPTEN__
|
|
EM_ASM( xsystem35.texthook.disableWheelEvent(0xffffffff) );
|
|
#endif
|
|
} else {
|
|
sact.logging = false;
|
|
}
|
|
|
|
TRACE("SACT.Init %d:", p1);
|
|
}
|
|
|
|
/**
|
|
* SACT.CreateSprite (1.0~)
|
|
* スプライト作成
|
|
* @param wNum: スプライト番号
|
|
* @param wNumCG1: 通常表示するCG番号
|
|
* @param wNumCG2: マウスカーソルを重ねたときのCG番号
|
|
* @param wNumCG3: クリックしたときのCG番号
|
|
* @param wType: スプライトのタイプ
|
|
*/
|
|
static void CreateSprite() {
|
|
int wNum = getCaliValue();
|
|
int wNumCG1 = getCaliValue();
|
|
int wNumCG2 = getCaliValue();
|
|
int wNumCG3 = getCaliValue();
|
|
int wType = getCaliValue();
|
|
|
|
sp_new(wNum, wNumCG1, wNumCG2, wNumCG3, wType);
|
|
|
|
TRACE("SACT.CreateSprite %d,%d,%d,%d,%d:", wNum, wNumCG1, wNumCG2, wNumCG3, wType);
|
|
}
|
|
|
|
/**
|
|
* SACT.CreateTextSprite (1.0~)
|
|
* メッセージを表示するスプライトの作成
|
|
* @param wNum: スプライト番号
|
|
* @param wX: 表示位置のX座標
|
|
* @param wY: 表示位置のY座標
|
|
* @param wWidth: スプライトの幅
|
|
* @param wHeight: スプライトの高さ
|
|
*/
|
|
static void CreateTextSprite() {
|
|
int wNum = getCaliValue();
|
|
int wX = getCaliValue();
|
|
int wY = getCaliValue();
|
|
int wWidth = getCaliValue();
|
|
int wHeight = getCaliValue();
|
|
|
|
sp_new_msg(wNum, wX, wY, wWidth, wHeight);
|
|
|
|
TRACE("SACT.CreateTextSprite %d,%d,%d,%d,%d:", wNum, wX, wY, wWidth, wHeight);
|
|
}
|
|
|
|
/**
|
|
* SACT.SetWallPaper (1.0~)
|
|
* 壁紙(画面背景)として表示するCGの設定
|
|
* @param wNum: 壁紙(背景)として表示するCGの番号
|
|
*/
|
|
static void SetWallPaper() {
|
|
int wNum = getCaliValue();
|
|
|
|
sp_set_wall_paper(wNum);
|
|
|
|
TRACE("SACT.SetWallPaper %d:", wNum);
|
|
}
|
|
|
|
/**
|
|
* SACT.Clear (1.0~)
|
|
* 全スプライト削除(~SP_CLR)
|
|
*/
|
|
static void Clear() {
|
|
sp_free_all();
|
|
|
|
TRACE("SACT.Clear:");
|
|
}
|
|
|
|
/**
|
|
* SACT.Delete (1.0~)
|
|
* スプライトの削除
|
|
* @param wNum: 削除するスプライト番号
|
|
*/
|
|
static void Delete() {
|
|
int wNum = getCaliValue();
|
|
|
|
sp_free(wNum);
|
|
|
|
TRACE("SACT.Delete %d:", wNum);
|
|
}
|
|
|
|
/**
|
|
* SACT.SpriteDeleteCount (1.0~)
|
|
* wNum番からwCount個の範囲のスプライトの削除
|
|
* @param wNum: 先頭スプライト番号
|
|
* @param wCount: 範囲
|
|
*/
|
|
static void SpriteDeleteCount() {
|
|
int wNum = getCaliValue();
|
|
int wCount = getCaliValue();
|
|
int i;
|
|
|
|
for (i = wNum; i < (wNum + wCount); i++) {
|
|
sp_free(i);
|
|
}
|
|
|
|
TRACE("SACT.SpriteDeleteCount %d,%d:", wNum, wCount);
|
|
}
|
|
|
|
/**
|
|
* SACT.Draw (1.0~)
|
|
* 現在設定されているスプライト状態を画面に反映(~SP_UPDATE)
|
|
*/
|
|
static void Draw() {
|
|
sp_update_all(true);
|
|
|
|
TRACE("SACT.Draw:");
|
|
}
|
|
|
|
/**
|
|
* SCAT.DrawEffect (1.0~)
|
|
* 効果指定付き画面更新
|
|
* @param wType: エフェクトタイプ
|
|
* @param wEffectTime: エフェクトの時間(1/100秒単位)
|
|
* @param wEffectKey: キー抜け設定 (1.1~) (1で有効)
|
|
*/
|
|
static void DrawEffect() {
|
|
int wType = getCaliValue();
|
|
int wEffectTime = getCaliValue();
|
|
int wEffectkey = 1;
|
|
|
|
if (sact.version >= 110) {
|
|
wEffectkey = getCaliValue();
|
|
}
|
|
|
|
sp_eupdate(wType, wEffectTime, wEffectkey);
|
|
|
|
TRACE("SACT.DrawEffect %d,%d,%d:", wType, wEffectTime, wEffectkey);
|
|
}
|
|
|
|
/**
|
|
* SCAT.DrawEffectAlphaMap (1.1~)
|
|
* αマスクつき画面更新
|
|
* @param nIndexAlphaMap: マスクα番号
|
|
* @param wEffectTime: エフェクトの時間(1/100秒単位)
|
|
* @param wEffectKey: キー抜け設定
|
|
*/
|
|
static void DrawEffectAlphaMap() {
|
|
int nIndexAlphaMap = getCaliValue();
|
|
int wEffectTime = getCaliValue();
|
|
int wEffectKey = getCaliValue();
|
|
|
|
sp_eupdate_amap(nIndexAlphaMap, wEffectTime, wEffectKey);
|
|
|
|
TRACE("SACT.DrawEffectAlphaMap %d,%d,%d:", nIndexAlphaMap, wEffectTime, wEffectKey);
|
|
}
|
|
|
|
/**
|
|
* SCAT.QuakeScreen (1.0~)
|
|
* 画面揺らし
|
|
* @param wType: 0=縦横, 1:回転
|
|
* @param wParam1: wType=0のときx方向の振幅
|
|
* wType=1のとき振幅
|
|
* @param wParam2: wType=0のときy方向の振幅
|
|
* wType=1のとき回転数
|
|
* @param wCount: 時間(1/100秒)
|
|
* @param nfKeyEnable: キー抜け (1で有効) (1.1~)
|
|
*/
|
|
static void QuakeScreen() {
|
|
int wType = getCaliValue();
|
|
int wParam1 = getCaliValue();
|
|
int wParam2 = getCaliValue();
|
|
int wCount = getCaliValue();
|
|
int nfKeyEnable = 1;
|
|
|
|
if (sact.version >= 110) {
|
|
nfKeyEnable = getCaliValue();
|
|
}
|
|
|
|
sp_quake_screen(wType, wParam1, wParam2, wCount, nfKeyEnable);
|
|
|
|
TRACE("SACT.QuakeScreen %d,%d,%d,%d,%d:", wType, wParam1, wParam2, wCount, nfKeyEnable);
|
|
}
|
|
|
|
/**
|
|
* SACT.SetOrigin (1.0~)
|
|
* 基準座標変更
|
|
* @param wX: 原点にするX座標の位置
|
|
* @param wY: 原点にするY座標の位置
|
|
*/
|
|
static void SetOrigin() {
|
|
int wX = getCaliValue();
|
|
int wY = getCaliValue();
|
|
|
|
sact.origin.x = wX;
|
|
sact.origin.y = wY;
|
|
|
|
TRACE("SACT.SetOrigin %d,%d:", wX, wY);
|
|
}
|
|
|
|
/**
|
|
* SACT.SetShow (1.0~)
|
|
* スプライトの表示状態の変更
|
|
* @param wNum: 先頭のスプライト番号
|
|
* @param wCount: 表示する個数
|
|
* @param wShow: 0:非表示, 1:表示
|
|
*/
|
|
static void SetShow() {
|
|
int wNum = getCaliValue();
|
|
int wCount = getCaliValue();
|
|
int wShow = getCaliValue();
|
|
|
|
sp_set_show(wNum, wCount, wShow);
|
|
|
|
TRACE("SACT.SetShow %d,%d,%d:", wNum, wCount, wShow);
|
|
}
|
|
|
|
/**
|
|
* SACT.SetBlendRate (1.1~)
|
|
* スプライトの表示状態の変更
|
|
* @param wNum: 先頭のスプライト番号
|
|
* @param wCount: 表示する個数
|
|
* @param nBlendRate: ブレンド率
|
|
*/
|
|
static void SetBlendRate() {
|
|
int wNum = getCaliValue();
|
|
int wCount = getCaliValue();
|
|
int nBlendRate = getCaliValue();
|
|
|
|
sp_set_blendrate(wNum, wCount, nBlendRate);
|
|
|
|
TRACE("SACT.SetBlendRate %d,%d,%d:", wNum, wCount, nBlendRate);
|
|
}
|
|
|
|
/**
|
|
* SACT.SetPos (1.0~)
|
|
* スプライトの表示位置を設定(変更)
|
|
* @param wNum: スプライト番号
|
|
* @param wX: 表示X座標
|
|
* @param wY: 表示Y座標
|
|
*/
|
|
static void SetPos() {
|
|
int wNum = getCaliValue();
|
|
int wX = getCaliValue();
|
|
int wY = getCaliValue();
|
|
|
|
sp_set_pos(wNum, wX, wY);
|
|
|
|
TRACE("SACT.SetPos %d,%d,%d:", wNum, wX, wY);
|
|
}
|
|
|
|
/**
|
|
* SACT.SetMove (1.0~)
|
|
* スプライトの移動 (すぐに処理を戻す)
|
|
* @param wNum: スプライト番号
|
|
* @param wX: 表示X座標
|
|
* @param wY: 表示Y座標
|
|
*/
|
|
static void SetMove() {
|
|
int wNum = getCaliValue();
|
|
int wX = getCaliValue();
|
|
int wY = getCaliValue();
|
|
|
|
sp_set_move(wNum, wX, wY);
|
|
|
|
TRACE("SACT.SetMove %d,%d,%d:", wNum, wX, wY);
|
|
}
|
|
|
|
/**
|
|
* SACT.SetMoveTime (1.0~)
|
|
* SetMoveによるスプライト移動の時間の設定
|
|
* @param wNum: スプライト番号
|
|
* @param wTime: 移動を完了するまでの時間(1/100秒単位)
|
|
*/
|
|
static void SetMoveTime() {
|
|
int wNum = getCaliValue();
|
|
int wTime = getCaliValue();
|
|
|
|
sp_set_movetime(wNum, wTime);
|
|
|
|
TRACE("SACT.SetMoveTime %d,%d:", wNum, wTime);
|
|
}
|
|
|
|
/**
|
|
* SACT.SetMoveSpeed (1.0~)
|
|
* SetMoveによるスプライト移動の速度を設定
|
|
* @param wNum: スプライト番号
|
|
* @param wSpeed: 移動速度(デフォルトを100%とした%指定)
|
|
*/
|
|
static void SetMoveSpeed() {
|
|
int wNum = getCaliValue();
|
|
int wSpeed = getCaliValue();
|
|
|
|
sp_set_movespeed(wNum, wSpeed);
|
|
|
|
TRACE("SACT.SetMoveSpeed %d,%d:", wNum, wSpeed);
|
|
}
|
|
|
|
/**
|
|
* SACT.SetMoveSpeedCount (1.0~)
|
|
* 複数のスプライトに対するスプライト移動の速度の設定
|
|
* @param wNum: 先頭スプライト番号
|
|
* @param wCount: 範囲
|
|
* @param wSpeed: 移動速度(デフォルトを100%とした%指定)
|
|
*/
|
|
static void SetMoveSpeedCount() {
|
|
int wNum = getCaliValue();
|
|
int wCount = getCaliValue();
|
|
int wSpeed = getCaliValue();
|
|
int i;
|
|
|
|
for (i = wNum; i < (wNum + wCount); i++) {
|
|
sp_set_movespeed(i, wSpeed);
|
|
}
|
|
|
|
TRACE("SACT.SetMoveSpeedCount %d,%d,%d:", wNum, wCount, wSpeed);
|
|
}
|
|
|
|
/**
|
|
* SACT.SetSpriteAnimeTimeInterval (1.1~)
|
|
* 複数のスプライトに対するアニメーションスプライトの間隔
|
|
* @param wNum: 先頭スプライト番号
|
|
* @param wCount: 範囲
|
|
* @param nTime: 間隔
|
|
*/
|
|
static void SetSpriteAnimeTimeInterval() {
|
|
int wNum = getCaliValue();
|
|
int wCount = getCaliValue();
|
|
int nTime = getCaliValue();
|
|
int i;
|
|
|
|
for (i = wNum; i < (wNum + wCount); i++) {
|
|
sp_set_animeinterval(i, nTime);
|
|
}
|
|
|
|
TRACE("SACT.SetSpriteAnimeTimeInterval %d,%d,%d:", wNum, wCount, nTime);
|
|
}
|
|
|
|
/**
|
|
* SACT.AddZKeyHideSprite (1.0~)
|
|
* キー入力待ちでZキーが押されたときに表示OFFになるスプライトの登録
|
|
* @param wNum: スプライト番号
|
|
*/
|
|
static void AddZKeyHideSprite() {
|
|
int wNum = getCaliValue();
|
|
|
|
sp_add_zkey_hidesprite(wNum);
|
|
|
|
TRACE("SACT.AddZKeyHideSprite %d:", wNum);
|
|
}
|
|
|
|
/**
|
|
* SACT.ClearZKeyHideSprite (1.0~)
|
|
* AddZKeyHideSpriteで登録したスプライト番号を全てクリア
|
|
*/
|
|
static void ClearZKeyHideSprite() {
|
|
sp_clear_zkey_hidesprite_all();
|
|
|
|
TRACE("SACT.ClearZKeyHideSprite:");
|
|
}
|
|
|
|
/**
|
|
* SACT.SpriteFreeze (1.0~)
|
|
* スプライトスイッチをwIndexの状態で固定し、~KEY 2:などで反応しない
|
|
* ようにする
|
|
* @param wNum: スプライト番号
|
|
* @param wIndex: 固定する状態番号(1-3)
|
|
*/
|
|
static void SpriteFreeze() {
|
|
int wNum = getCaliValue();
|
|
int wIndex = getCaliValue();
|
|
|
|
sp_freeze_sprite(wNum, wIndex);
|
|
|
|
TRACE("SACT.SpriteFreeze %d,%d:", wNum, wIndex);
|
|
}
|
|
|
|
/**
|
|
* SACT.SpriteThaw (1.0~)
|
|
* Freezeしたスプライト状態を解除
|
|
* @param wNum: スプライト番号
|
|
*/
|
|
static void SpriteThaw() {
|
|
int wNum = getCaliValue();
|
|
|
|
sp_thaw_sprite(wNum);
|
|
|
|
TRACE("SACT.SpriteThaw %d:", wNum);
|
|
}
|
|
|
|
/**
|
|
* SACT.SpriteFreezeCount (1.0~)
|
|
* 複数のスプライトをFreezeする
|
|
* @param wNum: 先頭スプライト番号
|
|
* @param wCount: 範囲
|
|
* @param wIndex: 固定する状態番号
|
|
*/
|
|
static void SpriteFreezeCount() {
|
|
int wNum = getCaliValue();
|
|
int wCount = getCaliValue();
|
|
int wIndex = getCaliValue();
|
|
int i;
|
|
|
|
for (i = wNum; i < (wNum + wCount); i++) {
|
|
sp_freeze_sprite(i, wIndex);
|
|
}
|
|
|
|
TRACE("SACT.SpriteFreezeCount %d,%d,%d:", wNum, wCount, wIndex);
|
|
}
|
|
|
|
/**
|
|
* SACT.SpriteThawCount (1.0~)
|
|
* 複数のFreezeスプライト状態の解除
|
|
* @param wNum: 先頭スプライト番号
|
|
* @param wCount: 範囲
|
|
*/
|
|
static void SpriteThawCount() {
|
|
int wNum = getCaliValue();
|
|
int wCount = getCaliValue();
|
|
int i;
|
|
|
|
for (i = wNum; i < (wNum + wCount); i++) {
|
|
sp_thaw_sprite(i);
|
|
}
|
|
|
|
TRACE("SACT.SpriteThawCount %d,%d:", wNum, wCount);
|
|
}
|
|
|
|
/**
|
|
* SACT.QuakeSpriteAdd (1.0~)
|
|
* QuakeSpriteで揺らすスプライトを追加
|
|
* @param wNum: スプライト番号
|
|
*/
|
|
static void QuakeSpriteAdd() {
|
|
int wNum = getCaliValue();
|
|
|
|
sp_add_quakesprite(wNum);
|
|
|
|
TRACE("SACT.QuakeSpriteAdd %d:", wNum);
|
|
}
|
|
|
|
/**
|
|
* SACT.QuakeSpriteReset (1.0~)
|
|
* QuakeSpriteAddの設定を全て解除
|
|
*/
|
|
static void QuakeSpriteReset() {
|
|
sp_clear_quakesprite_all();
|
|
TRACE("SACT.QuakeSpriteReset:");
|
|
}
|
|
|
|
/**
|
|
* SACT.QuakeSprite (1.0~)
|
|
* QuakeSpriteAddで設定したスプライトを揺らす
|
|
* @param wType: 0:縦横(全てのスプライトを同じように揺らす)
|
|
* 1:縦横(全てのスプライトをバラバラに揺らす)
|
|
* @param wAmplitudeX: X方向の振幅
|
|
* @param wAmplitudeY: Y方向の振幅
|
|
* @param wCount: 時間(1/100秒)
|
|
* @param nfKeyEnable: (1.1~): キーキャンセルあり(=1)
|
|
*/
|
|
static void QuakeSprite() {
|
|
int wType = getCaliValue();
|
|
int wAmplitudeX = getCaliValue();
|
|
int wAmplitudeY = getCaliValue();
|
|
int wCount = getCaliValue();
|
|
int nfKeyEnable = 0;
|
|
|
|
if (sact.version >= 110) {
|
|
nfKeyEnable = getCaliValue();
|
|
}
|
|
|
|
sp_quake_sprite(wType, wAmplitudeX, wAmplitudeY, wCount, nfKeyEnable);
|
|
|
|
TRACE("SACT.QuakeSprite %d,%d,%d,%d:", wType, wAmplitudeX, wAmplitudeY, wCount);
|
|
}
|
|
|
|
/**
|
|
* SACT.QuerySpriteIsExist (1.0~)
|
|
* 指定のスプライトが登録されているかどうかを取得
|
|
* @param wNum: スプライト番号
|
|
* @param var: 登録状態を返す変数 0: 未登録, 1:既登録
|
|
*/
|
|
static void QuerySpriteIsExist() {
|
|
int wNum = getCaliValue();
|
|
int *var = getCaliVariable();
|
|
|
|
*var = sp_exists(wNum) ? 1 : 0;
|
|
|
|
TRACE("SACT.QuerySpriteIsExist %d,%p:", wNum, var);
|
|
}
|
|
|
|
/**
|
|
* SACT.QuerySpriteInfo (1.0~)
|
|
* スプライトの情報を取得
|
|
* @param wNum: スプライト番号
|
|
* @param vType: スプライトタイプ。テキストスプライトの場合は100
|
|
* @param vCG1: CG1(ない場合は0)
|
|
* @param vCG2: CG2(ない場合は0)
|
|
* @param vCG3: CG3(ない場合は0)
|
|
*/
|
|
static void QuerySpriteInfo() {
|
|
int wNum = getCaliValue();
|
|
int *vType = getCaliVariable();
|
|
int *vCG1 = getCaliVariable();
|
|
int *vCG2 = getCaliVariable();
|
|
int *vCG3 = getCaliVariable();
|
|
|
|
sp_query_info(wNum, vType, vCG1, vCG2, vCG3);
|
|
|
|
TRACE("SACT.QuerySpriteInfo %d,%p,%p,%p,%p:", wNum, vType, vCG1, vCG2, vCG3);
|
|
}
|
|
|
|
/**
|
|
* SACT.QuerySpriteShow (1.0~)
|
|
* スプライトの表示状態(SP_SHOWの値)を取得
|
|
* @param wNum: スプライト番号
|
|
* @param vShow: 0:非表示, 1:表示
|
|
*/
|
|
static void QuerySpriteShow() {
|
|
int wNum = getCaliValue();
|
|
int *vShow = getCaliVariable();
|
|
|
|
sp_query_show(wNum, vShow);
|
|
|
|
TRACE("SACT.QuerySpriteShow %d,%p:", wNum, vShow);
|
|
}
|
|
|
|
/**
|
|
* SACT.QuerySpritePos (1.0~)
|
|
* スプライトの表示位置の取得
|
|
* @param wNum: スプライト番号
|
|
* @param vX: X座標
|
|
* @param vY: Y座標
|
|
*/
|
|
static void QuerySpritePos() {
|
|
int wNum = getCaliValue();
|
|
int *vX = getCaliVariable();
|
|
int *vY = getCaliVariable();
|
|
|
|
sp_query_pos(wNum, vX, vY);
|
|
|
|
TRACE("SACT.QuerySpritePos %d,%p,%p:", wNum, vX, vY);
|
|
}
|
|
|
|
/**
|
|
* SACT.QuerySpriteSize (1.0~)
|
|
* スプライトの大きさの取得
|
|
* @param wNum: スプライト番号
|
|
* @param vWidth: スプライトの幅
|
|
* @param vHeight: スプライトの高さ
|
|
*/
|
|
static void QuerySpriteSize() {
|
|
int wNum = getCaliValue();
|
|
int *vWidth = getCaliVariable();
|
|
int *vHeight = getCaliVariable();
|
|
|
|
sp_query_size(wNum, vWidth, vHeight);
|
|
|
|
TRACE("SACT.QuerySpriteSize %d,%p,%p:", wNum, vWidth, vHeight);
|
|
}
|
|
|
|
/**
|
|
* SACT.QueryTextPos (1.2~)
|
|
* メッセージスプライトの文字位置
|
|
* @param nMesSpID:
|
|
* @param pwX:
|
|
* @param pwY:
|
|
*/
|
|
static void QueryTextPos() {
|
|
int wNum = getCaliValue();
|
|
int *vX = getCaliVariable();
|
|
int *vY = getCaliVariable();
|
|
|
|
sp_query_textpos(wNum, vX, vY);
|
|
|
|
TRACE("SACT.QueryTextPos %d,%p,%p:", wNum, vX, vY);
|
|
}
|
|
|
|
/**
|
|
* SCAT.CG_Clear (1.0~)
|
|
* CG_Createで作成したCGを全て削除
|
|
*/
|
|
static void CG_Clear() {
|
|
scg_freeall();
|
|
|
|
TRACE("SACT.CG_Clear:");
|
|
}
|
|
|
|
/**
|
|
* SACT.CG_Reset (1.0~)
|
|
* CG_Createで作成したCGを削除
|
|
* @param wNumCG: 削除するCG番号
|
|
*/
|
|
static void CG_Reset() {
|
|
int wNumCG = getCaliValue();
|
|
|
|
scg_free(wNumCG);
|
|
|
|
TRACE("SACT.CG_Reset %d:", wNumCG);
|
|
}
|
|
|
|
/**
|
|
* SACT.CG_QueryType (1.0~)
|
|
* CGの状態(CGのタイプ)を取得
|
|
* @param wNumCG: CG番号
|
|
* @param vType: CGの種類, 0: 未使用, 1:リンクされている, 2: CG_SETで作成
|
|
* 3: CG_REVERSEで作成, 4: CG_STRETCHで作成
|
|
*/
|
|
static void CG_QueryType() {
|
|
int wNumCG = getCaliValue();
|
|
int *vType = getCaliVariable();
|
|
|
|
*vType = scg_querytype(wNumCG);
|
|
|
|
TRACE("SACT.CG_QueryType %d,%p:", wNumCG, vType);
|
|
}
|
|
|
|
/**
|
|
* SACT.CG_QuerySize (1.0~)
|
|
* CGの大きさを取得
|
|
* @param wNumCG: CG番号
|
|
* @param vWidth: 幅
|
|
* @param vHeight: 高さ
|
|
*/
|
|
static void CG_QuerySize() {
|
|
int wNumCG = getCaliValue();
|
|
int *vWidth = getCaliVariable();
|
|
int *vHeight = getCaliVariable();
|
|
|
|
scg_querysize(wNumCG, vWidth, vHeight);
|
|
|
|
TRACE("SACT.CG_QuerySize %d,%p,%p:", wNumCG, vWidth, vHeight);
|
|
}
|
|
|
|
/**
|
|
* SACT.CG_QueryBpp (1.0~)
|
|
* CGのbppを取得
|
|
* @param wNumCG: CG番号
|
|
* @param vBpp: CGのbpp
|
|
*/
|
|
static void CG_QueryBpp() {
|
|
int wNumCG = getCaliValue();
|
|
int *vBpp = getCaliVariable();
|
|
|
|
*vBpp = scg_querybpp(wNumCG);
|
|
|
|
TRACE("SACT.CG_QueryBpp %d,%p:", wNumCG, vBpp);
|
|
}
|
|
|
|
/**
|
|
* SACT.CG_ExistAlphaMap (1.0~)
|
|
* CGのαマップ(マスク)があれば1、なければ0
|
|
* @param wNumCG: CG番号
|
|
* @param vMask: 0/1
|
|
*/
|
|
static void CG_ExistAlphaMap() {
|
|
int wNumCG = getCaliValue();
|
|
int *vMask = getCaliVariable();
|
|
|
|
*vMask = scg_existalphamap(wNumCG) ? 1 : 0;
|
|
|
|
TRACE("SACT.CG_ExistAlphaMap %d,%p:", wNumCG, vMask);
|
|
}
|
|
|
|
/**
|
|
* SACT.CG_Create (1.0~)
|
|
* 指定サイズ、色、ブレンド率の四角を表示する
|
|
* @param wNumCG: CG番号
|
|
* @param wWidth: 幅
|
|
* @param wHeight: 高さ
|
|
* @param wR: RGB値の赤(0-255)
|
|
* @param wG: RGB値の緑(0-255)
|
|
* @param wB: RGB値の青(0-255)
|
|
* @param wBlendRate: ブレンド率(0-255)
|
|
*/
|
|
static void CG_Create() {
|
|
int wNumCG = getCaliValue();
|
|
int wWidth = getCaliValue();
|
|
int wHeight = getCaliValue();
|
|
int wR = getCaliValue();
|
|
int wG = getCaliValue();
|
|
int wB = getCaliValue();
|
|
int wBlendRate = getCaliValue();
|
|
|
|
scg_create(wNumCG, wWidth, wHeight, wR, wG, wB, wBlendRate);
|
|
|
|
TRACE("SACT.CG_Create %d,%d,%d,%d,%d,%d,%d:", wNumCG, wWidth, wHeight, wR, wG, wB, wBlendRate);
|
|
}
|
|
|
|
/**
|
|
* SACT,CG_CreateReverse (1.0~)
|
|
* 元になるCGを反転したCGを作成する
|
|
* @param wNumCG: CG番号
|
|
* @param wNumSrcCG: コピーの元になるCGの番号
|
|
* @param wReverseX: X方向の反転スイッチ(0:反転しない、1:反転する)
|
|
* @param wReverseY: Y方向の反転スイッチ(0:反転しない、1:反転する)
|
|
*/
|
|
static void CG_CreateReverse() {
|
|
int wNumCG = getCaliValue();
|
|
int wNumSrcCG = getCaliValue();
|
|
int wReverseX = getCaliValue();
|
|
int wReverseY = getCaliValue();
|
|
|
|
scg_create_reverse(wNumCG, wNumSrcCG, wReverseX, wReverseY);
|
|
|
|
TRACE("SACT.CG_CreateReverse %d,%d,%d,%d:", wNumCG, wNumSrcCG, wReverseX, wReverseY);
|
|
}
|
|
|
|
/**
|
|
* SACT.CG_CreateStretch (1.0~)
|
|
* 元になるCGを拡大もしくは縮小したCGを作成する
|
|
* @param wNumCG: CG番号
|
|
* @param wWidth: 作成するCGの幅
|
|
* @param wHeight: 作成するCGの高さ
|
|
* @param wNumSrcCG: 元になるCGの番号
|
|
*/
|
|
static void CG_CreateStretch() {
|
|
int wNumCG = getCaliValue();
|
|
int wWidth = getCaliValue();
|
|
int wHeight = getCaliValue();
|
|
int wNumSrcCG = getCaliValue();
|
|
|
|
scg_create_stretch(wNumCG, wWidth, wHeight, wNumSrcCG);
|
|
|
|
TRACE("SACT.CG_CreateStretch %d,%d,%d,%d:", wNumCG, wWidth, wHeight, wNumSrcCG);
|
|
}
|
|
|
|
/**
|
|
* SACT.CG_CreateBlend (1.0~)
|
|
* 2枚のCGをかさねあわせたCGを作成
|
|
* @param wNumDstCG: CG番号(作成先)
|
|
* @param wNumBaseCG: 重ね合わせのもととなるCG
|
|
* @param wX: 重ね合わせる位置のX座標
|
|
* @param wY: 重ね合わせる位置のY座標
|
|
* @param wNumBlendCG: 上に重ね合わせるCG
|
|
* @param wAlphaMapMode: αマップの作成モード
|
|
*/
|
|
static void CG_CreateBlend() {
|
|
int wNumDstCG = getCaliValue();
|
|
int wNumBaseCG = getCaliValue();
|
|
int wX = getCaliValue();
|
|
int wY = getCaliValue();
|
|
int wNumBlendCG = getCaliValue();
|
|
int wAlphaMapMode = getCaliValue();
|
|
|
|
TRACE("SACT.CG_CreateBlend %d,%d,%d,%d,%d,%d:", wNumDstCG, wNumBaseCG, wX, wY, wNumBlendCG, wAlphaMapMode);
|
|
scg_create_blend(wNumDstCG, wNumBaseCG, wX, wY, wNumBlendCG, wAlphaMapMode);
|
|
|
|
}
|
|
|
|
/**
|
|
* SACT.CG_CreateText (1.0~)
|
|
* 文字列からCGを作成
|
|
* @param wNumCG: 作成するCG番号
|
|
* @param wSize: 文字の高さ(pixel)
|
|
* @param wR: 文字のR値(0-255)
|
|
* @param wG: 文字のG値(0-255)
|
|
* @param wB: 文字のB値(0-255)
|
|
* @param wText: 描画する文字列変数の番号
|
|
*/
|
|
static void CG_CreateText() {
|
|
int wNumCG = getCaliValue();
|
|
int wSize = getCaliValue();
|
|
int wR = getCaliValue();
|
|
int wG = getCaliValue();
|
|
int wB = getCaliValue();
|
|
int wText = getCaliValue();
|
|
|
|
scg_create_text(wNumCG, wSize, wR, wG, wB, wText);
|
|
|
|
TRACE("SACT.CG_CreateText %d,%d,%d,%d,%d,%d:", wNumCG, wSize, wR, wG, wB, wText);
|
|
}
|
|
|
|
/**
|
|
* SACT.CG_CreateTextNum (1.0~)
|
|
* 数値からシステムテキストのCGを作成
|
|
* @param wNumCG: 作成するCG番号
|
|
* @param wSize: 文字の高さ(pixel)
|
|
* @param wR: 文字のR値(0-255)
|
|
* @param wG: 文字のG値(0-255)
|
|
* @param wB: 文字のB値(0-255)
|
|
* @param wFigs: 桁数
|
|
* @param wZeroPadding: 桁数に満たない部分0で埋めるかどうかのフラグ
|
|
* 0:ゼロ埋めしない 1:ゼロ埋めする
|
|
* @param wValue: 描画する値
|
|
*/
|
|
static void CG_CreateTextNum() {
|
|
int wNumCG = getCaliValue();
|
|
int wSize = getCaliValue();
|
|
int wR = getCaliValue();
|
|
int wG = getCaliValue();
|
|
int wB = getCaliValue();
|
|
int wFigs = getCaliValue();
|
|
int wZeroPadding = getCaliValue();
|
|
int wValue = getCaliValue();
|
|
|
|
scg_create_textnum(wNumCG, wSize, wR, wG, wB, wFigs, wZeroPadding, wValue);
|
|
|
|
TRACE("SACT.CG_CreateTextNum %d,%d,%d,%d,%d,%d,%d,%d:", wNumCG, wSize, wR, wG, wB, wFigs, wZeroPadding, wValue);
|
|
}
|
|
|
|
/**
|
|
* SACT.CG_Copy (1.0~)
|
|
* CGを複製
|
|
* @param wNumDst: 複写先のCG番号
|
|
* @param wNumSrc: 複写元のCG番号
|
|
*/
|
|
static void CG_Copy() {
|
|
int wNumDst = getCaliValue();
|
|
int wNumSrc = getCaliValue();
|
|
|
|
scg_copy(wNumDst, wNumSrc);
|
|
|
|
TRACE("SACT.CG_Copy %d,%d:", wNumDst, wNumSrc);
|
|
}
|
|
|
|
/**
|
|
* SACT.CG_Cut (1.0~)
|
|
* 元のCGの一部を切りぬいたCGを作成
|
|
* @param wNumDstCG: CG番号(作成先)
|
|
* @param wNumSrcCG: CG番号(カット元)
|
|
* @param wX: カット開始X座標
|
|
* @param wY: カット開始Y座標
|
|
* @param wWidth: カット幅
|
|
* @param wHeight: カット高さ
|
|
*/
|
|
static void CG_Cut() {
|
|
int wNumDstCG = getCaliValue();
|
|
int wNumSrcCG = getCaliValue();
|
|
int wX = getCaliValue();
|
|
int wY = getCaliValue();
|
|
int wWidth = getCaliValue();
|
|
int wHeight = getCaliValue();
|
|
|
|
scg_cut(wNumDstCG, wNumSrcCG, wX, wY, wWidth, wHeight);
|
|
|
|
TRACE("SACT.CG_Cut %d,%d,%d,%d,%d,%d:", wNumDstCG, wNumSrcCG, wX, wY, wWidth, wHeight);
|
|
}
|
|
|
|
/**
|
|
* SACT.CG_PartCopy (1.0~)
|
|
* 元のCGの一部を切りぬいたCGを作成、CGのサイズ自体はもとのままで、
|
|
* マスクデータのみを処理して見掛け上のサイズを変化させる
|
|
* @param wNumDstCG: CG番号(作成先)
|
|
* @param wNumSrcCG: CG番号(元)
|
|
* @param wX: 開始X座標
|
|
* @param wY: 開始Y座標
|
|
* @param wWidth: カット幅
|
|
* @param wHeight: カット高さ
|
|
*/
|
|
static void CG_PartCopy() {
|
|
int wNumDstCG = getCaliValue();
|
|
int wNumSrcCG = getCaliValue();
|
|
int wX = getCaliValue();
|
|
int wY = getCaliValue();
|
|
int wWidth = getCaliValue();
|
|
int wHeight = getCaliValue();
|
|
|
|
scg_partcopy(wNumDstCG, wNumSrcCG, wX, wY, wWidth, wHeight);
|
|
|
|
TRACE("SACT.PartCopy %d,%d,%d,%d,%d,%d:", wNumDstCG, wNumSrcCG, wX, wY, wWidth, wHeight);
|
|
}
|
|
|
|
/**
|
|
* SACT.WiatKeySimple (1.0~)
|
|
* 通常キー入力待ち
|
|
* @param vKey: 入力されたキー
|
|
*/
|
|
static void WaitKeySimple() {
|
|
int *vKey = getCaliVariable();
|
|
|
|
TRACE("SACT.WaitKeySimple %d:", vKey);
|
|
|
|
// とりあえず全更新
|
|
sp_update_all(true);
|
|
|
|
sact.waittype = KEYWAIT_SIMPLE;
|
|
sact.waitkey = -1;
|
|
|
|
while (sact.waitkey == -1 && !nact->is_quit) {
|
|
sys_keywait(25, KEYWAIT_CANCELABLE);
|
|
}
|
|
|
|
sact.waittype = KEYWAIT_NONE;
|
|
|
|
*vKey = sact.waitkey;
|
|
|
|
}
|
|
|
|
/**
|
|
* SACT.WaitKeyMessgae (1.0~)
|
|
* メッセージキー入力待ち
|
|
* @param wMessageMark1: スプライト番号1(アニメーションスプライト)
|
|
* @param wMessageMark2: スプライト番号2(アニメーションスプライト)
|
|
* @param wMessageLength: (1.2~)
|
|
*/
|
|
static void WaitKeyMessage() {
|
|
int wMessageMark1 = getCaliValue();
|
|
int wMessageMark2 = getCaliValue();
|
|
int wMessageLength = 0;
|
|
|
|
if (sact.version >= 120) {
|
|
wMessageLength = getCaliValue();
|
|
}
|
|
|
|
smsg_keywait(wMessageMark1, wMessageMark2, wMessageLength);
|
|
|
|
TRACE("SACT.WaitKeyMessage %d,%d,%d:", wMessageMark1, wMessageMark2, wMessageLength);
|
|
}
|
|
|
|
/**
|
|
* SACT.WaitKeySprite (1.0~)
|
|
* スプライト処理待ち
|
|
* @param vOK: 0ならば右クリック
|
|
* @param vRND: キー入力結果
|
|
* @param vRsv1: 予約
|
|
* @param vRsv2: 予約
|
|
*/
|
|
static void WaitKeySprite() {
|
|
int *vOK = getCaliVariable();
|
|
int *vRND = getCaliVariable();
|
|
int *vRsv1 = getCaliVariable();
|
|
int *vRsv2 = getCaliVariable();
|
|
|
|
TRACE("SACT.WaitKeySprite %p,%p,%p,%p:", vOK, vRND, vRsv1, vRsv2);
|
|
|
|
sp_keywait(vOK, vRND, vRsv1, vRsv2, NULL, -1);
|
|
|
|
TRACE("SACT.WaitKeySprite %d,%d,%d,%d:", *vOK, *vRND, *vRsv1, *vRsv2);
|
|
}
|
|
|
|
/**
|
|
* SACT.PeekKey (1.2~)
|
|
* Get the status of the key
|
|
* @param nKeyCode:
|
|
* @param vResult:
|
|
*/
|
|
static void PeekKey() {
|
|
static int prevKeyCode = NUM_KEYCODES;
|
|
int nKeyCode = getCaliValue();
|
|
int *vResult = getCaliVariable();
|
|
|
|
// This function is called successively with different nKeyCodes.
|
|
// Only the first call hits the scheduler.
|
|
if (nKeyCode <= prevKeyCode)
|
|
sys_getKeyInfo();
|
|
prevKeyCode = nKeyCode;
|
|
|
|
*vResult = RawKeyInfo[nKeyCode] ? 1 : 0;
|
|
|
|
TRACE("SACT.PeekKey %d,%p:", nKeyCode, vResult);
|
|
}
|
|
|
|
/**
|
|
* SACT.WaitKeySKipKeyUp (1.0~)
|
|
* 文字送りキーが押されっぱなしの時、離されるまで待つ
|
|
*/
|
|
static void WaitMsgSkipKeyUp() {
|
|
TRACE_UNIMPLEMENTED("SACT.WaitMsgSkipKeyUp:");
|
|
}
|
|
|
|
/**
|
|
* SACT.WaiKeySimpleTimeOut (1.0~)
|
|
* タイムアウトつきキーウェイト
|
|
* @param vRND: 入力されたキーコード
|
|
* @param vD03: タイムアウトした場合=1, しない場合=0
|
|
* @param wTime: タイムアウト時間 (1/100sec)
|
|
*/
|
|
static void WaitKeySimpleTimeOut() {
|
|
int *vRND = getCaliVariable();
|
|
int *vD03 = getCaliVariable();
|
|
int wTime = getCaliValue();
|
|
|
|
sact.waittype = KEYWAIT_SIMPLE;
|
|
sact.waitkey = -1;
|
|
|
|
sys_keywait(wTime * 10, KEYWAIT_CANCELABLE);
|
|
if (sact.waitkey == -1) {
|
|
*vD03 = 1;
|
|
*vRND = 0;
|
|
} else {
|
|
*vD03 = 0;
|
|
*vRND = sact.waitkey;
|
|
}
|
|
|
|
sact.waittype = KEYWAIT_NONE;
|
|
|
|
TRACE("SACT.WaitKeySimpleTimeOut %p,%p,%d:", vRND, vD03, wTime);
|
|
}
|
|
|
|
/**
|
|
* SACT.WaiKeySpriteTimeOut (1.0~)
|
|
* タイムアウトつきスプライトキーウェイト
|
|
* @param vOK: 0 の時右クリック
|
|
* @param vRND: スイッチスプライトの番号
|
|
* @param vD01: ゲットスプライトの番号
|
|
* @param vD02: プットスプライトの番号
|
|
* @param vD03: タイムアウトした場合=1, しない場合=0
|
|
* @param wTime: タイムアウト時間 (1/100sec)
|
|
*/
|
|
static void WaitKeySpriteTimeOut() {
|
|
int *vOK = getCaliVariable();
|
|
int *vRND = getCaliVariable();
|
|
int *vD01 = getCaliVariable();
|
|
int *vD02 = getCaliVariable();
|
|
int *vD03 = getCaliVariable();
|
|
int wTime = getCaliValue();
|
|
|
|
sp_keywait(vOK, vRND, vD01, vD02, vD03, wTime);
|
|
|
|
TRACE("SACT.WaitKeySpriteTimeOut %p,%p,%p,%p,%p,%d:", vOK, vRND, vD01, vD02, vD03, wTime);
|
|
}
|
|
|
|
/**
|
|
* SACT.QueryMessageSkip (1.0~)
|
|
* ??????
|
|
* @param vSkip:
|
|
*/
|
|
static void QueryMessageSkip() {
|
|
int *vSkip = getCaliVariable();
|
|
|
|
*vSkip = msgskip_isSkipping() ? 1 : 0;
|
|
|
|
TRACE("SACT.QueryMessageSkip %p:", vSkip);
|
|
}
|
|
|
|
/**
|
|
* SACT.RegistReplaceString (1.0~)
|
|
* メッセージ中の文字列の置き換え
|
|
* @param sstr: 変換元文字列番号
|
|
* @param dstr: 変換先文字列番号
|
|
*/
|
|
static void RegistReplaceString() {
|
|
int sstr = getCaliValue();
|
|
int dstr = getCaliValue();
|
|
|
|
sstr_regist_replace(sstr, dstr);
|
|
|
|
TRACE("SACT.RegistReplaceString %d,%d:", sstr, dstr);
|
|
}
|
|
|
|
/**
|
|
* SACT.MessageOutput (1.0~)
|
|
* @param wMessageSpriteNumber: メッセージを表示するメッセージスプライト番号
|
|
* (~MES)
|
|
* @param wMessageSize: フォントの大きさ (~MES_SIZE|~MES_SET)
|
|
* @param wMessageColorR: メッセージの色(Red) (~MES_SET|~MES_COLOR)
|
|
* @param wMessageColorG: メッセージの色(Green) (~MES_SET|~MES_COLOR)
|
|
* @param wMessageColorB: メッセージの色(Blue) (~MES_SET|~MES_COLOR)
|
|
* @param wMessageFont: メッセージのフォント(0:ゴシック, 1:明朝)
|
|
* (~MES_FONT)
|
|
* @param wMessageSpeed: メッセージの表示速度(0:ウェイト無し, 1:速い,
|
|
* 2:中くらい, 3: 遅い) (~MES_SPEED) (msec)
|
|
* @param wMessageLineSpace: 行間スペース (~MES_SPC_Y)
|
|
* @param wMessageAlign: 行そろえ (1.1~)
|
|
* @param vMessageLength: ??? (1.2~)
|
|
*/
|
|
static void MessageOutput() {
|
|
int wMessageSpriteNumber = getCaliValue();
|
|
int wMessageSize = getCaliValue();
|
|
int wMessageColorR = getCaliValue();
|
|
int wMessageColorG = getCaliValue();
|
|
int wMessageColorB = getCaliValue();
|
|
int wMessageFont = getCaliValue();
|
|
int wMessageSpeed = getCaliValue();
|
|
int wMessageLineSpace = getCaliValue();
|
|
int wMessageAlign = 0;
|
|
int *vMessageLength = NULL;
|
|
|
|
if (sact.version >= 110) {
|
|
wMessageAlign = getCaliValue();
|
|
}
|
|
if (sact.version >= 120) {
|
|
vMessageLength = getCaliVariable();
|
|
}
|
|
|
|
smsg_out(wMessageSpriteNumber, wMessageSize, wMessageColorR, wMessageColorG, wMessageColorB, wMessageFont, wMessageSpeed, wMessageLineSpace, wMessageAlign, 0, 0, 0, vMessageLength);
|
|
|
|
TRACE("SACT.MessageOutput %d,%d,%d,%d,%d,%d,%d,%d,%d,%p:", wMessageSpriteNumber, wMessageSize, wMessageColorR, wMessageColorG, wMessageColorB, wMessageFont, wMessageSpeed, wMessageLineSpace, wMessageAlign, vMessageLength);
|
|
}
|
|
|
|
/**
|
|
* SACT.MessageOutputEx (1.1~)
|
|
* ルビつきメッセージ出力
|
|
* @param wMessageSpriteNumber: メッセージを表示するメッセージスプライト番号
|
|
* (~MES)
|
|
* @param wMessageSize: フォントの大きさ (~MES_SIZE|~MES_SET)
|
|
* @param wMessageColorR: メッセージの色(Red) (~MES_SET|~MES_COLOR)
|
|
* @param wMessageColorG: メッセージの色(Green) (~MES_SET|~MES_COLOR)
|
|
* @param wMessageColorB: メッセージの色(Blue) (~MES_SET|~MES_COLOR)
|
|
* @param wMessageFont: メッセージのフォント(0:ゴシック, 1:明朝)
|
|
* (~MES_FONT)
|
|
* @param wMessageSpeed: メッセージの表示速度(0:ウェイト無し, 1:速い,
|
|
* 2:中くらい, 3: 遅い) (~MES_SPEED)
|
|
* @param wMessageLineSpace: 行間スペース (~MES_SPC_Y)
|
|
* @param wMessageAlign: 行そろえ
|
|
* @param wRubySize: ルビ文字の大きさ
|
|
* @param wRubyFont: ルビ文字のフォントの種類((0:ゴシック, 1:明朝)
|
|
* @param wRubyLineSpace: ルビ文字とメッセージの行間スペース
|
|
* @param vLength: ??? (1.2~)
|
|
*/
|
|
static void MessageOutputEx() {
|
|
int wMessageSpriteNumber = getCaliValue();
|
|
int wMessageSize = getCaliValue();
|
|
int wMessageColorR = getCaliValue();
|
|
int wMessageColorG = getCaliValue();
|
|
int wMessageColorB = getCaliValue();
|
|
int wMessageFont = getCaliValue();
|
|
int wMessageSpeed = getCaliValue();
|
|
int wMessageLineSpace = getCaliValue();
|
|
int wMessageAlign = getCaliValue();
|
|
int wRubySize = getCaliValue();
|
|
int wRubyFont = getCaliValue();
|
|
int wRubyLineSpace = getCaliValue();
|
|
int *vLength = NULL;
|
|
|
|
if (sact.version >= 120) {
|
|
vLength = getCaliVariable();
|
|
}
|
|
|
|
smsg_out(wMessageSpriteNumber, wMessageSize, wMessageColorR, wMessageColorG, wMessageColorB, wMessageFont, wMessageSpeed, wMessageLineSpace, wMessageAlign, wRubySize, wRubyFont, wRubyLineSpace, vLength);
|
|
|
|
TRACE("SACT.MessageOutputEx %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%p:", wMessageSpriteNumber, wMessageSize, wMessageColorR, wMessageColorG, wMessageColorB, wMessageFont, wMessageSpeed, wMessageLineSpace,wMessageAlign, wRubySize, wRubyFont, wRubyLineSpace, vLength);
|
|
}
|
|
|
|
/**
|
|
* SACT.MessageNewLine (1.0~)
|
|
* 改行(Rコマンド相当) (~MES_NEW_LINE)
|
|
* @param wMessageSpriteNumber: メッセージスプライト番号
|
|
* @param wMessageSize: フォントの大きさ (~MES_SIZE|~MES_SET)
|
|
*/
|
|
static void MessageNewLine() {
|
|
int wMessageSpriteNumber = getCaliValue();
|
|
int wMessageSize = getCaliValue();
|
|
|
|
smsg_newline(wMessageSpriteNumber, wMessageSize);
|
|
|
|
TRACE("SACT.MessageNewLine %d,%d:", wMessageSpriteNumber, wMessageSize);
|
|
}
|
|
|
|
/**
|
|
* SACT.MessageClear (1.0~)
|
|
* メッセージ領域の消去(Aコマンド相当)
|
|
* @param wMessageSpriteNumber: メッセージスプライト番号
|
|
*/
|
|
static void MessageClear() {
|
|
int wMessageSpriteNumber = getCaliValue();
|
|
|
|
smsg_clear(wMessageSpriteNumber);
|
|
|
|
TRACE("SACT.MessageClear %d:", wMessageSpriteNumber);
|
|
}
|
|
|
|
/**
|
|
* SACT.MessageIsEmpty (1.0~)
|
|
* メッセージが残っている場合 wResult に 0 を返す?
|
|
* @param wResult: 結果を返す変数
|
|
*/
|
|
static void MessageIsEmpty() {
|
|
int *wResult = getCaliVariable();
|
|
|
|
*wResult = smsg_is_empty() ? 1 : 0;
|
|
|
|
TRACE("SACT.MessageIsEmpty %p:", wResult);
|
|
}
|
|
|
|
/**
|
|
* SACT.MessagePeek (1.2+~) (妻みぐい2にはない)
|
|
* メッセージバッファの内容を取得する
|
|
* @param vCount: 取得した行数
|
|
* @param nTopStringNum: バッファを取得する文字列変数の最初
|
|
*/
|
|
static void MessagePeek() {
|
|
int *vCount = getCaliVariable();
|
|
int nTopStringNum = getCaliValue();
|
|
|
|
*vCount = smsg_peek(nTopStringNum);
|
|
|
|
TRACE("SACT.MessagePeek %p,%d:", vCount, nTopStringNum);
|
|
}
|
|
|
|
/**
|
|
* SACT.Log_Stop (1.2~)
|
|
* ログ採取停止
|
|
*/
|
|
static void Log_Stop() {
|
|
sact.logging = false;
|
|
TRACE("SACT.Log_Stop:");
|
|
}
|
|
|
|
/**
|
|
* SACT.Log_Start (1.2~)
|
|
* ログ採取開始
|
|
*/
|
|
static void Log_Start() {
|
|
sact.logging = true;
|
|
TRACE("SACT.Log_Start:");
|
|
}
|
|
|
|
/**
|
|
* SACT.MenuClear (1.0~)
|
|
* SACT内部の選択肢情報をクリア
|
|
*/
|
|
static void MenuClear() {
|
|
ssel_clear();
|
|
|
|
TRACE("SACT.MenuClear:");
|
|
}
|
|
|
|
/**
|
|
* SACT.MenuAdd (1.0~)
|
|
* 登録文字列をSACT内部選択肢情報に追加
|
|
* @param nString: 登録する文字列変数番号
|
|
* @param wI: 登録する位置 (1-)
|
|
*/
|
|
static void MenuAdd() {
|
|
int nString = getCaliValue();
|
|
int wI = getCaliValue();
|
|
|
|
ssel_add(nString, wI);
|
|
|
|
TRACE("SACT.MenuAdd %d,%d:", nString, wI);
|
|
}
|
|
|
|
/**
|
|
* SACT.MenuOpen (1.0~)
|
|
* SACT内部選択ループ
|
|
* @param wMenuResult: 選択結果(番号) キャンセルしたら0
|
|
* @param wNum: 枠,背景とするスプライト番号 (~SP_SEL)
|
|
* @param wChoiceSize: 選択肢文字サイズ (~SEL_SIZE)
|
|
* @param wMenuOutSpc: 枠スプライトの外側からのピクセル数(~SP_SETSELSPC)
|
|
* @param wChoiceLineSpace: 選択肢の行間(1に固定?)
|
|
* @param wChoiceAutoMoveCursor: オープン時に自動的に移動する選択肢の番号
|
|
* @param nAlign: 行そろえ (0:左, 1:中央, 2: 右) (1.1~)
|
|
*/
|
|
static void MenuOpen() {
|
|
int *wMenuResult = getCaliVariable();
|
|
int wNum = getCaliValue();
|
|
int wChoiceSize = getCaliValue();
|
|
int wMenuOutSpc = getCaliValue();
|
|
int wChoiceLineSpace = getCaliValue();
|
|
int wChoiceAutoMoveCursor = getCaliValue();
|
|
int nAlign = 0;
|
|
|
|
if (sact.version >= 110) {
|
|
nAlign = getCaliValue();
|
|
}
|
|
|
|
*wMenuResult = ssel_select(wNum, wChoiceSize, wMenuOutSpc, wChoiceLineSpace, wChoiceAutoMoveCursor, nAlign);
|
|
|
|
TRACE("SACT.MenuOpen %p,%d,%d,%d,%d,%d,%d:", wMenuResult, wNum, wChoiceSize, wMenuOutSpc, wChoiceLineSpace, wChoiceAutoMoveCursor, nAlign);
|
|
}
|
|
|
|
/**
|
|
* SACT.PushString (1.0~)
|
|
* SACT内部に文字列変数をプッシュ
|
|
* @param nString: 文字列変数番号
|
|
*/
|
|
static void PushString() {
|
|
int nString = getCaliValue();
|
|
|
|
sstr_push(nString);
|
|
|
|
TRACE("SACT.PushString %d:", nString);
|
|
}
|
|
|
|
/**
|
|
* SACT.PopString (1.0~)
|
|
* SACT内部にプッシュした文字列変数をポップ
|
|
* @param nString: 文字列変数番号
|
|
*/
|
|
static void PopString() {
|
|
int nString = getCaliValue();
|
|
|
|
sstr_pop(nString);
|
|
|
|
TRACE("SACT.PopString %d:", nString);
|
|
}
|
|
|
|
/**
|
|
* SACT.Numeral_XXXX
|
|
* スプライト毎に、指定の数字(0〜9)に対して対応するCG番号や
|
|
* 表示位置、間隔などを格納・取り出しを行う
|
|
*/
|
|
|
|
/**
|
|
* SACT.Numeral_SetCG (1.0~)
|
|
* 指定の数値に対するCG番号の設定
|
|
* @param nNum: スプライト番号
|
|
* @param nIndex: 数字(0-9)
|
|
* @param nCG: 数字に対応するCG番号
|
|
*/
|
|
static void Numeral_SetCG() {
|
|
int nNum = getCaliValue();
|
|
int nIndex = getCaliValue();
|
|
int nCG = getCaliValue();
|
|
|
|
sp_num_setcg(nNum, nIndex, nCG);
|
|
|
|
TRACE("SACT.Numeral_SetCG %d,%d,%d:", nNum, nIndex, nCG);
|
|
}
|
|
|
|
/**
|
|
* SACT.Numeral_GetCG (1.0~)
|
|
* 指定の数値に対するCG番号の設定
|
|
* @param nNum: スプライト番号
|
|
* @param nIndex: 数字(0-9)
|
|
* @param vCG: 設定されているCG番号を返す変数
|
|
*/
|
|
static void Numeral_GetCG() {
|
|
int nNum = getCaliValue();
|
|
int nIndex = getCaliValue();
|
|
int *vCG = getCaliVariable();
|
|
|
|
sp_num_getcg(nNum, nIndex, vCG);
|
|
|
|
TRACE("SACT.Numeral_GetCG %d,%d,%p:", nNum, nIndex, vCG);
|
|
}
|
|
|
|
/**
|
|
* SACT.Numeral_SetPos (1.0~)
|
|
* Numeralの表示位置の設定
|
|
* @param nNum: スプライト番号
|
|
* @param nX: 表示X座標
|
|
* @param ny: 表示Y座標
|
|
*/
|
|
static void Numeral_SetPos() {
|
|
int nNum = getCaliValue();
|
|
int nX = getCaliValue();
|
|
int nY = getCaliValue();
|
|
|
|
sp_num_setpos(nNum, nX, nY);
|
|
|
|
TRACE("SACT.Numeral_SetPos %d,%d,%d:", nNum, nX, nY);
|
|
}
|
|
|
|
/**
|
|
* SACT.Numeral_GetPos (1.0~)
|
|
* Numeral_SetPosで設定した座標の取り出し
|
|
* @param nNum: スプライト番号
|
|
* @param vX: X座標を格納する変数
|
|
* @param vY: Y座標を格納する変数
|
|
*/
|
|
static void Numeral_GetPos() {
|
|
int nNum = getCaliValue();
|
|
int *vX = getCaliVariable();
|
|
int *vY = getCaliVariable();
|
|
|
|
sp_num_getpos(nNum, vX, vY);
|
|
|
|
TRACE("SACT.Numeral_GetPos %d,%p,%p:", nNum, vX, vY);
|
|
}
|
|
|
|
/**
|
|
* SACT.Numeral_SetSpan (1.0~)
|
|
* Numeralの間隔(Span)の設定
|
|
* @param nNum: スプライト番号
|
|
* @param nSpan: 間隔
|
|
*/
|
|
static void Numeral_SetSpan() {
|
|
int nNum = getCaliValue();
|
|
int nSpan = getCaliValue();
|
|
|
|
sp_num_setspan(nNum, nSpan);
|
|
|
|
TRACE("SACT.Numeral_SetSpan %d,%d:", nNum, nSpan);
|
|
}
|
|
|
|
/**
|
|
* SACT.Numeral_GetSpan (1.0~)
|
|
* Numeral_SetSpanで設定した値の取り出し
|
|
* @param nNum: スプライト番号
|
|
* @param vSpan: 値を格納する変数
|
|
*/
|
|
static void Numeral_GetSpan() {
|
|
int nNum = getCaliValue();
|
|
int *vSpan = getCaliVariable();
|
|
|
|
sp_num_getspan(nNum, vSpan);
|
|
|
|
TRACE("SACT.Numeral_GetSpan %d,%p:", nNum, vSpan);
|
|
}
|
|
|
|
/**
|
|
* SACT.ExpSp_Clear (1.0~)
|
|
* 説明スプライト設定クリア
|
|
*/
|
|
static void ExpSp_Clear() {
|
|
TRACE("SACT.ExpSp_Clear:");
|
|
|
|
sp_exp_clear();
|
|
}
|
|
|
|
/**
|
|
* SACT.ExpSp_Add (1.0~)
|
|
* 説明スプライト設定追加
|
|
* @param wNumSP1: スイッチスプライト
|
|
* @param wNumSP2: 説明スプライト
|
|
*/
|
|
static void ExpSp_Add() {
|
|
int wNumSP1 = getCaliValue();
|
|
int wNumSP2 = getCaliValue();
|
|
|
|
sp_exp_add(wNumSP1, wNumSP2);
|
|
|
|
TRACE("SACT.ExpSp_Add %d,%d:", wNumSP1, wNumSP2);
|
|
}
|
|
|
|
/**
|
|
* SACT.ExpSp_Del (1.0~)
|
|
* 説明スプライト削除
|
|
* @param wNum: スプライト番号
|
|
*/
|
|
static void ExpSp_Del() {
|
|
int wNum = getCaliValue();
|
|
|
|
sp_exp_del(wNum);
|
|
|
|
TRACE("SACT.ExpSp_Del %d:", wNum);
|
|
}
|
|
|
|
/**
|
|
* SACT.TimerSet (1.0~)
|
|
* 指定のIDのタイマーをwCount値でリセット
|
|
* @param wTimerID: タイマーID
|
|
* @param wCount: リセットする値
|
|
*/
|
|
static void TimerSet() {
|
|
int wTimerID = getCaliValue();
|
|
int wCount = getCaliValue();
|
|
|
|
stimer_reset(wTimerID, wCount);
|
|
|
|
TRACE("SACT.TimerSet %d,%d:", wTimerID, wCount);
|
|
}
|
|
|
|
/**
|
|
* SACT.TimerGet (1.0~)
|
|
* 指定のIDのタイマーをRNDに取得
|
|
* @param wTimerID: タイマーID
|
|
* @param vRND: 取得する変数
|
|
*/
|
|
static void TimerGet() {
|
|
int wTimerID = getCaliValue();
|
|
int *vRND = getCaliVariable();
|
|
|
|
*vRND = stimer_get(wTimerID);
|
|
|
|
TRACE("SACT.TimerGet %d,%p:", wTimerID, vRND);
|
|
}
|
|
|
|
/**
|
|
* SACT.TimerWait (1.0~)
|
|
* 指定IDのタイマーが指定カウントになるまで待つ
|
|
* @param wTimerID: タイマーID
|
|
* @param wCount: 指定カウント
|
|
*/
|
|
static void TimerWait() {
|
|
int wTimerID = getCaliValue();
|
|
int wCount = getCaliValue();
|
|
|
|
int msec = (wCount - stimer_get(wTimerID)) * 10;
|
|
if (msec > 0)
|
|
sys_keywait(msec, KEYWAIT_CTRL_CANCELABLE);
|
|
|
|
TRACE("SACT.TimerWait %d,%d:", wTimerID, wCount);
|
|
}
|
|
|
|
/**
|
|
* SACT.Wait (1.1~)
|
|
* 指定時間、すべての動作を停止
|
|
* @param nCount: 時間(1/100秒単位)
|
|
*/
|
|
static void Wait() {
|
|
int wCount = getCaliValue();
|
|
|
|
sys_keywait(wCount * 10, KEYWAIT_CTRL_CANCELABLE);
|
|
|
|
TRACE("SACT.Wait %d:", wCount);
|
|
}
|
|
|
|
/**
|
|
* SACT.SoundPlay (1.0~)
|
|
* サウンド直接再生 (~SOUND_PLAY)
|
|
* @param wNum: 再生する番号
|
|
*/
|
|
static void SoundPlay() {
|
|
int wNum = getCaliValue();
|
|
|
|
ssnd_play(wNum);
|
|
|
|
TRACE("SACT.SoundPlay %d:", wNum);
|
|
}
|
|
|
|
/**
|
|
* SACT.SoundStop (1.0~)
|
|
* サウンド再生停止 (~SOUND_STOP)
|
|
* @param wNum: 停止する番号
|
|
* @param wFadeTime: 停止するまでの時間 (1/100sec)
|
|
*/
|
|
static void SoundStop() {
|
|
int wNum = getCaliValue();
|
|
int wFadeTime = getCaliValue();
|
|
|
|
ssnd_stop(wNum, wFadeTime);
|
|
|
|
TRACE("SACT.SoundStop %d,%d:", wNum, wFadeTime);
|
|
}
|
|
|
|
/**
|
|
* SACT.SoundStopAll (1.1~)
|
|
* サウンド再生停止 (~SOUND_STOP)
|
|
* @param wNum: 停止する番号
|
|
* @param wFadeTime: 停止するまでの時間 (1/100sec)
|
|
*/
|
|
static void SoundStopAll() {
|
|
int wFadeTime = getCaliValue();
|
|
|
|
ssnd_stopall(wFadeTime);
|
|
|
|
TRACE("SACT.SoundStopAll %d:", wFadeTime);
|
|
}
|
|
|
|
/**
|
|
* SACT.SoundWait (1.0~)
|
|
* ヘッダで指定された時間or再生終了まで待つ (~SOUND_WAIT)
|
|
* @param wNum: 指定番号
|
|
*/
|
|
static void SoundWait() {
|
|
int wNum = getCaliValue();
|
|
|
|
ssnd_wait(wNum);
|
|
|
|
TRACE("SACT.SoundWait %d:", wNum);
|
|
}
|
|
|
|
/**
|
|
* SACT.SoundWaitKey (1.0~)
|
|
* 指定されたサウンドが再生終了するか、キーが押されるまで待つ
|
|
* @param wNum: 指定番号
|
|
* @param vKey: キャンセルキー
|
|
*/
|
|
static void SoundWaitKey() {
|
|
int wNum = getCaliValue();
|
|
int *vKey = getCaliVariable();
|
|
|
|
ssnd_waitkey(wNum, vKey);
|
|
|
|
TRACE("SACT.SoundWaitKey %d,%p:", wNum, vKey);
|
|
}
|
|
|
|
/**
|
|
* SACT.SoundPrepare (1.0~)
|
|
* 再生の準備をする(~SOUND_PREPARE)
|
|
* @param wNum: 再生する番号
|
|
*/
|
|
static void SoundPrepare() {
|
|
int wNum = getCaliValue();
|
|
|
|
ssnd_prepare(wNum);
|
|
|
|
TRACE("SACT.SoundPrepare %d:", wNum);
|
|
}
|
|
|
|
/**
|
|
* SACT.SoundPrepareLR (1.0~)
|
|
* 再生の準備をする(左右反転) (~SOUND_PREPARE_LR)
|
|
* @param wNum: 再生する番号
|
|
*/
|
|
static void SoundPrepareLR() {
|
|
int wNum = getCaliValue();
|
|
|
|
ssnd_prepareLRrev(wNum);
|
|
|
|
TRACE("SACT.SoundPrepareLR %d:", wNum);
|
|
}
|
|
|
|
/**
|
|
* SACT.SoundPlayLR (1.0~)
|
|
* 左右反転して再生 (~SOUND_PLAY_LR)
|
|
* @param wNum: 再生する番号
|
|
*/
|
|
static void SoundPlayLR() {
|
|
int wNum = getCaliValue();
|
|
|
|
ssnd_playLRrev(wNum);
|
|
|
|
TRACE("SACT.SoundPlayLR %d:", wNum);
|
|
}
|
|
|
|
/**
|
|
* SACT.SpriteSound (1.0~)
|
|
* サウンド(スプライト指定) (~SP_SOUND)
|
|
* @param wNumSP: 設定するスプライト番号
|
|
* @param nCount: 設定する個数
|
|
* @param wNumWave1: Sound1
|
|
* @param wNumWave2: Sound2
|
|
* @param wNumWave3: Sound3
|
|
*/
|
|
static void SpriteSound() {
|
|
int wNumSP = getCaliValue();
|
|
int nCount = getCaliValue();
|
|
int wNumWave1 = getCaliValue();
|
|
int wNumWave2 = getCaliValue();
|
|
int wNumWave3 = getCaliValue();
|
|
int i;
|
|
|
|
for (i = wNumSP; i < (wNumSP + nCount); i++) {
|
|
sp_sound_set(i, wNumWave1, wNumWave2, wNumWave3);
|
|
}
|
|
|
|
TRACE("SACT.SpriteSound %d,%d,%d,%d,%d:", wNumSP, nCount, wNumWave1, wNumWave2, wNumWave3);
|
|
}
|
|
|
|
/**
|
|
* SACT.SpriteSoundWait (1.0~)
|
|
* SpriteSoundで設定したすべての音の再生終了まで待つ (~SP_SOUND_WAIT)
|
|
*/
|
|
static void SpriteSoundWait() {
|
|
TRACE("SACT.SpriteSoundWait:");
|
|
|
|
sp_sound_wait();
|
|
}
|
|
|
|
/**
|
|
* SACT.SpriteSoundOB (1.0~)
|
|
* 範囲外をクリックしたときの音 (~SPRITE_SOUND_OB)
|
|
* @param wNumWave: 再生する番号、0でクリア
|
|
*/
|
|
static void SpriteSoundOB() {
|
|
int wNumWave = getCaliValue();
|
|
|
|
sp_sound_ob(wNumWave);
|
|
|
|
TRACE("SACT.SpriteSoundOB %d:", wNumWave);
|
|
}
|
|
|
|
/**
|
|
* SACT.MusicCheck (1.0~)
|
|
* 音楽データがあるかどうか (~MUSIC_CHECK)
|
|
* @param wNum: 番号
|
|
* @param vRND: 0:ない、1:ある
|
|
*/
|
|
static void MusicCheck() {
|
|
int wNum = getCaliValue();
|
|
int *vRND = getCaliVariable();
|
|
|
|
*vRND = ald_exists(DRIFILE_BGM, wNum - 1) ? 1 : 0;
|
|
|
|
TRACE("SACT.MusicCheck %d,%p:", wNum, vRND);
|
|
}
|
|
|
|
/**
|
|
* SACT.MusicGetLength (1.0~)
|
|
* 音楽データの長さを1/100秒単位で取得 (~MUSIC_GET_LENGTH)
|
|
* @param wNum: 音楽番号
|
|
* @param vRND: 取得した長さを格納する変数
|
|
*/
|
|
static void MusicGetLength() {
|
|
int wNum = getCaliValue();
|
|
int *vRND = getCaliVariable();
|
|
|
|
*vRND = musbgm_getlen(wNum);
|
|
|
|
TRACE("SACT.MusicGetLength %d,%d:", wNum, *vRND);
|
|
}
|
|
|
|
/**
|
|
* SACT.MusicGetPos (1.0~)
|
|
* 音楽データの再生位置を1/100秒単位で取得 (~MUSIC_GET_POS)
|
|
* @param wNum: 音楽番号
|
|
* @param vRND: 取得した位置を格納する変数
|
|
*/
|
|
static void MusicGetPos() {
|
|
int wNum = getCaliValue();
|
|
int *vRND = getCaliVariable();
|
|
|
|
*vRND = musbgm_getpos(wNum);
|
|
|
|
TRACE("SACT.MusicGetPos %d,%d:", wNum, *vRND);
|
|
}
|
|
|
|
/**
|
|
* SACT.MusicPlay (1.0~)
|
|
* 再生 (~MUSIC_PLAY)
|
|
* @param wNum: 音楽番号
|
|
* @param wFadeTime: フェードイン時間(1/100秒)
|
|
* @param wVolume: 音量(0-100)
|
|
*/
|
|
static void MusicPlay() {
|
|
int wNum = getCaliValue();
|
|
int wFadeTime = getCaliValue();
|
|
int wVolume = getCaliValue();
|
|
|
|
musbgm_play(wNum, wFadeTime, wVolume, 0);
|
|
|
|
TRACE("SACT.MusicPlay %d,%d,%d:", wNum, wFadeTime, wVolume);
|
|
}
|
|
|
|
/**
|
|
* SACT.MusicStop (1.0~)
|
|
* 音楽停止 (~MUSIC_STOP)
|
|
* @param wNum: 音楽番号
|
|
* @param wFadeTime: 終了するまでの時間(1/100秒)
|
|
*/
|
|
static void MusicStop() {
|
|
int wNum = getCaliValue();
|
|
int wFadeTime = getCaliValue();
|
|
|
|
musbgm_stop(wNum, wFadeTime);
|
|
|
|
TRACE("SACT.MusicStop %d,%d:", wNum, wFadeTime);
|
|
}
|
|
|
|
/**
|
|
* SACT.MusicStopAll (1.2~)
|
|
* すべての音楽を停止
|
|
* @param wFadeTime: 終了するまでの時間(1/100秒)
|
|
*/
|
|
static void MusicStopAll() {
|
|
int wFadeTime = getCaliValue();
|
|
|
|
musbgm_stopall(wFadeTime);
|
|
|
|
TRACE("SACT.MusicStopAll %d:", wFadeTime);
|
|
}
|
|
|
|
/**
|
|
* SACT.MusicFade (1.0~)
|
|
* 指定のボリュームまでフェード (~MUSIC_FADE)
|
|
* @param wNum: 音楽番号
|
|
* @param wFadeTime: フェード時間(1/100秒)
|
|
* @param wVolume: 音量 (1-100)
|
|
*/
|
|
static void MusicFade() {
|
|
int wNum = getCaliValue();
|
|
int wFadeTime = getCaliValue();
|
|
int wVolume = getCaliValue();
|
|
|
|
musbgm_fade(wNum, wFadeTime, wVolume);
|
|
|
|
TRACE("SACT.MusicFade %d,%d,%d:", wNum, wFadeTime, wVolume);
|
|
}
|
|
|
|
/**
|
|
* SACT.MusicWait (1.0~)
|
|
* 再生が終了するまで待つ (~MUSIC_WAIT)
|
|
* @param wNum: 音楽番号
|
|
* @param nTimeOut: (1.1~)
|
|
*/
|
|
static void MusicWait() {
|
|
int wNum = getCaliValue();
|
|
int nTimeOut = 0;
|
|
|
|
if (sact.version >= 110) {
|
|
nTimeOut = getCaliValue();
|
|
}
|
|
|
|
musbgm_wait(wNum, nTimeOut);
|
|
|
|
TRACE("SACT.MusicWait %d,%d:", wNum, nTimeOut);
|
|
}
|
|
|
|
/**
|
|
* SACT.MusicWatiPos (1.0~)
|
|
* 指定の音楽がwIndex番のマークで指定された再生位置に来るまで待つ
|
|
* (~MUSIC_WAIT_POS)
|
|
* @param wNum: 音楽番号
|
|
* @param wIndex: 位置マーク番号
|
|
*/
|
|
static void MusicWaitPos() {
|
|
int wNum = getCaliValue();
|
|
int wIndex = getCaliValue();
|
|
|
|
TRACE_UNIMPLEMENTED("SACT.MusicWaitPos %d,%d:", wNum, wIndex);
|
|
}
|
|
|
|
/**
|
|
* SACT.SoundGetLinkNum (1.0~)
|
|
* 指定チャンネルのリンク番号を取得 (~SOUND_GET_LINK_NUM)
|
|
* @param wNum: チャンネル番号
|
|
* @param vRND: リンク番号(未使用=0)
|
|
*/
|
|
static void SoundGetLinkNum() {
|
|
int wNum = getCaliValue();
|
|
int *vRND = getCaliVariable();
|
|
|
|
*vRND = ssnd_getlinknum(wNum);
|
|
|
|
TRACE("SACT.SoundGetLinkNum %d,%p:", wNum, vRND);
|
|
}
|
|
|
|
/**
|
|
* SACT.ChartPos (1.0~)
|
|
* グラフ用チャート作成
|
|
* @param pos : 結果出力変数
|
|
* @param pos1: 最小値
|
|
* @param pos2: 最大値
|
|
* @param val1: 分率最小値
|
|
* @param val2: 分率最大値
|
|
* @param val : 分率
|
|
*
|
|
* pos = ((pos2-pos1) / (val2-val1)) * (val-val1) + pos1
|
|
*/
|
|
static void ChartPos() {
|
|
int *pos = getCaliVariable();
|
|
int pos1 = getCaliValue();
|
|
int pos2 = getCaliValue();
|
|
int val1 = getCaliValue();
|
|
int val2 = getCaliValue();
|
|
int val = getCaliValue();
|
|
|
|
schart_pos(pos, pos1, pos2, val1, val2, val);
|
|
|
|
TRACE("SACT.ChartPos %p,%d,%d,%d,%d,%d:", pos, pos1, pos2, val1, val2, val);
|
|
}
|
|
|
|
/**
|
|
* SACT.NumToStr (1.0~)
|
|
* 数値 -> 文字列変換
|
|
* @param strno: 変換済み文字列変数番号
|
|
* @param fig: けた数
|
|
* @param zeropad: 0: ゼロ埋めしない, 1: ゼロ埋めする
|
|
* @param num: 変換する数値
|
|
*/
|
|
static void NumToStr() {
|
|
int strno = getCaliValue();
|
|
int fig = getCaliValue();
|
|
int zeropad = getCaliValue();
|
|
int num = getCaliValue();
|
|
|
|
sstr_num2str(strno, fig, zeropad, num);
|
|
|
|
TRACE("SACT.NumToStr %d,%d,%d,%d:", strno, fig, zeropad, num);
|
|
}
|
|
|
|
/**
|
|
* SACT.Maze_Create (1.0~)
|
|
*/
|
|
static void Maze_Create() {
|
|
int p1 = getCaliValue();
|
|
int p2 = getCaliValue();
|
|
|
|
TRACE_UNIMPLEMENTED("SACT.Maze_Create %d,%d:", p1,p2);
|
|
}
|
|
|
|
/**
|
|
* SACT.Maze_Get (1.0~)
|
|
*/
|
|
static void Maze_Get() {
|
|
int *p1 = getCaliVariable();
|
|
int p2 = getCaliValue();
|
|
int p3 = getCaliValue();
|
|
|
|
TRACE_UNIMPLEMENTED("SACT.Maze_Get %p,%d,%d:", p1,p2,p3);
|
|
}
|
|
|
|
/**
|
|
* SACT.EncryptWORD (1.0~)
|
|
*/
|
|
static void EncryptWORD() {
|
|
int *array = getCaliVariable();
|
|
int num = getCaliValue();
|
|
int key = getCaliValue();
|
|
|
|
scryp_encrypt_word(array, num, key);
|
|
|
|
TRACE("SACT.EncryptWORD %p,%d,%d:", array, num, key);
|
|
}
|
|
|
|
/**
|
|
* SACT.DecryptWORD (1.0~)
|
|
*/
|
|
static void DecryptWORD() {
|
|
int *array = getCaliVariable();
|
|
int num = getCaliValue();
|
|
int key = getCaliValue();
|
|
|
|
scryp_encrypt_word(array, num, key);
|
|
|
|
TRACE("SACT.DecryptWORD %p,%d,%d:", array, num, key);
|
|
}
|
|
|
|
/**
|
|
* SACT.EncryptString (1.0~)
|
|
*/
|
|
static void EncryptString() {
|
|
int p1 = getCaliValue();
|
|
int p2 = getCaliValue();
|
|
|
|
scryp_encrypt_str(p1, p2);
|
|
|
|
TRACE("SACT.EncryptString %d,%d:", p1,p2);
|
|
}
|
|
|
|
/**
|
|
* SACT.DecryptString (1.0~)
|
|
*/
|
|
static void DecryptString() {
|
|
int p1 = getCaliValue();
|
|
int p2 = getCaliValue();
|
|
|
|
scryp_decrypt_str(p1, p2);
|
|
|
|
TRACE("SACT.DecryptString %d,%d:", p1,p2);
|
|
}
|
|
|
|
/**
|
|
* SACT.XMenuClear (1.0~)
|
|
* 拡張メニュー初期化
|
|
*/
|
|
static void XMenuClear() {
|
|
spxm_clear();
|
|
|
|
TRACE("SACT.XMenuClear:");
|
|
}
|
|
|
|
/**
|
|
* SACT.XMenuRegister (1.0~)
|
|
* 現在バッファにある文字列を拡張メニューのアイテムとして登録
|
|
* @param nRegiNum: 拡張メニューの内部インデックス番号
|
|
* @param nMenuID: 選択されたときに返す番号(ID)
|
|
*/
|
|
static void XMenuRegister() {
|
|
int nRegiNum = getCaliValue();
|
|
int nMenuID = getCaliValue();
|
|
|
|
spxm_register(nRegiNum, nMenuID);
|
|
|
|
TRACE("SACT.XMenuRegister %d,%d:", nRegiNum, nMenuID);
|
|
}
|
|
|
|
/**
|
|
* SACT.XMenuGetNum (1.0~)
|
|
* XMenuRegisterで登録されたIDを返す
|
|
* @param nRegiNum: 内部インデックス番号
|
|
* @param vMenuID: 登録されているIDを格納する変数
|
|
*/
|
|
static void XMenuGetNum() {
|
|
int nRegiNum = getCaliValue();
|
|
int *vMenuID = getCaliVariable();
|
|
|
|
*vMenuID = spxm_getnum(nRegiNum);
|
|
|
|
TRACE("SACT.XMenuGetNum %d,%p:", nRegiNum, vMenuID);
|
|
}
|
|
|
|
/**
|
|
* SACT.XMenuGetText (1.0~)
|
|
* XMenuRegisterで登録したアイテムを指定の文字列変数にコピーする
|
|
* @param nRegiNum: 内部インデックス番号
|
|
* @param strno: コピー先文字列変数番号
|
|
*/
|
|
static void XMenuGetText() {
|
|
int nRegiNum = getCaliValue();
|
|
int strno = getCaliValue();
|
|
|
|
spxm_gettext(nRegiNum, strno);
|
|
|
|
TRACE("SACT.XMenuGetText %d,%d:", nRegiNum, strno);
|
|
}
|
|
|
|
/**
|
|
* SACT.XMenuTitleRegister (1.0~)
|
|
* 現在バッファにある文字列を拡張メニューのタイトルとして登録
|
|
*/
|
|
static void XMenuTitleRegister() {
|
|
spxm_titlereg();
|
|
|
|
TRACE("SACT.XMenuTitleRegister:");
|
|
}
|
|
|
|
/**
|
|
* SACT.XMenuTitleGet (1.0~)
|
|
* 拡張メニューのタイトルを指定の文字列変数にコピー
|
|
* @param strno: コピー先文字列変数番号
|
|
*/
|
|
static void XMenuTitleGet() {
|
|
int strno = getCaliValue();
|
|
|
|
spxm_titleget(strno);
|
|
|
|
TRACE("SACT.XMenuTitleGet %d:", strno);
|
|
}
|
|
|
|
static void SACT_reset(void) {
|
|
ssnd_init();
|
|
spxm_clear();
|
|
ssel_reset();
|
|
sstr_reset();
|
|
sp_reset();
|
|
|
|
scg_freeall();
|
|
SDL_FreeSurface(sact.dmap);
|
|
memset(&sact, 0, sizeof(sact));
|
|
}
|
|
|
|
static const ModuleFunc functions[] = {
|
|
{"AddZKeyHideSprite", AddZKeyHideSprite},
|
|
{"CG_Clear", CG_Clear},
|
|
{"CG_Copy", CG_Copy},
|
|
{"CG_Create", CG_Create},
|
|
{"CG_CreateBlend", CG_CreateBlend},
|
|
{"CG_CreateReverse", CG_CreateReverse},
|
|
{"CG_CreateStretch", CG_CreateStretch},
|
|
{"CG_CreateText", CG_CreateText},
|
|
{"CG_CreateTextNum", CG_CreateTextNum},
|
|
{"CG_Cut", CG_Cut},
|
|
{"CG_ExistAlphaMap", CG_ExistAlphaMap},
|
|
{"CG_PartCopy", CG_PartCopy},
|
|
{"CG_QueryBpp", CG_QueryBpp},
|
|
{"CG_QuerySize", CG_QuerySize},
|
|
{"CG_QueryType", CG_QueryType},
|
|
{"CG_Reset", CG_Reset},
|
|
{"ChartPos", ChartPos},
|
|
{"Clear", Clear},
|
|
{"ClearZKeyHideSprite", ClearZKeyHideSprite},
|
|
{"CreateSprite", CreateSprite},
|
|
{"CreateTextSprite", CreateTextSprite},
|
|
{"DecryptString", DecryptString},
|
|
{"DecryptWORD", DecryptWORD},
|
|
{"Delete", Delete},
|
|
{"Draw", Draw},
|
|
{"DrawEffect", DrawEffect},
|
|
{"DrawEffectAlphaMap", DrawEffectAlphaMap},
|
|
{"EncryptString", EncryptString},
|
|
{"EncryptWORD", EncryptWORD},
|
|
{"ExpSp_Add", ExpSp_Add},
|
|
{"ExpSp_Clear", ExpSp_Clear},
|
|
{"ExpSp_Del", ExpSp_Del},
|
|
{"Init", Init},
|
|
{"Log_Start", Log_Start},
|
|
{"Log_Stop", Log_Stop},
|
|
{"Maze_Create", Maze_Create},
|
|
{"Maze_Get", Maze_Get},
|
|
{"MenuAdd", MenuAdd},
|
|
{"MenuClear", MenuClear},
|
|
{"MenuOpen", MenuOpen},
|
|
{"MessageClear", MessageClear},
|
|
{"MessageIsEmpty", MessageIsEmpty},
|
|
{"MessageNewLine", MessageNewLine},
|
|
{"MessageOutput", MessageOutput},
|
|
{"MessageOutputEx", MessageOutputEx},
|
|
{"MessagePeek", MessagePeek},
|
|
{"MusicCheck", MusicCheck},
|
|
{"MusicFade", MusicFade},
|
|
{"MusicGetLength", MusicGetLength},
|
|
{"MusicGetPos", MusicGetPos},
|
|
{"MusicPlay", MusicPlay},
|
|
{"MusicStop", MusicStop},
|
|
{"MusicStopAll", MusicStopAll},
|
|
{"MusicWait", MusicWait},
|
|
{"MusicWaitPos", MusicWaitPos},
|
|
{"NumToStr", NumToStr},
|
|
{"Numeral_GetCG", Numeral_GetCG},
|
|
{"Numeral_GetPos", Numeral_GetPos},
|
|
{"Numeral_GetSpan", Numeral_GetSpan},
|
|
{"Numeral_SetCG", Numeral_SetCG},
|
|
{"Numeral_SetPos", Numeral_SetPos},
|
|
{"Numeral_SetSpan", Numeral_SetSpan},
|
|
{"PeekKey", PeekKey},
|
|
{"PopString", PopString},
|
|
{"PushString", PushString},
|
|
{"QuakeScreen", QuakeScreen},
|
|
{"QuakeSprite", QuakeSprite},
|
|
{"QuakeSpriteAdd", QuakeSpriteAdd},
|
|
{"QuakeSpriteReset", QuakeSpriteReset},
|
|
{"QueryMessageSkip", QueryMessageSkip},
|
|
{"QuerySpriteInfo", QuerySpriteInfo},
|
|
{"QuerySpriteIsExist", QuerySpriteIsExist},
|
|
{"QuerySpritePos", QuerySpritePos},
|
|
{"QuerySpriteShow", QuerySpriteShow},
|
|
{"QuerySpriteSize", QuerySpriteSize},
|
|
{"QueryTextPos", QueryTextPos},
|
|
{"RegistReplaceString", RegistReplaceString},
|
|
{"SetBlendRate", SetBlendRate},
|
|
{"SetMove", SetMove},
|
|
{"SetMoveSpeed", SetMoveSpeed},
|
|
{"SetMoveSpeedCount", SetMoveSpeedCount},
|
|
{"SetMoveTime", SetMoveTime},
|
|
{"SetOrigin", SetOrigin},
|
|
{"SetPos", SetPos},
|
|
{"SetShow", SetShow},
|
|
{"SetSpriteAnimeTimeInterval", SetSpriteAnimeTimeInterval},
|
|
{"SetWallPaper", SetWallPaper},
|
|
{"SoundGetLinkNum", SoundGetLinkNum},
|
|
{"SoundPlay", SoundPlay},
|
|
{"SoundPlayLR", SoundPlayLR},
|
|
{"SoundPrepare", SoundPrepare},
|
|
{"SoundPrepareLR", SoundPrepareLR},
|
|
{"SoundStop", SoundStop},
|
|
{"SoundStopAll", SoundStopAll},
|
|
{"SoundWait", SoundWait},
|
|
{"SoundWaitKey", SoundWaitKey},
|
|
{"SpriteDeleteCount", SpriteDeleteCount},
|
|
{"SpriteFreeze", SpriteFreeze},
|
|
{"SpriteFreezeCount", SpriteFreezeCount},
|
|
{"SpriteSound", SpriteSound},
|
|
{"SpriteSoundOB", SpriteSoundOB},
|
|
{"SpriteSoundWait", SpriteSoundWait},
|
|
{"SpriteThaw", SpriteThaw},
|
|
{"SpriteThawCount", SpriteThawCount},
|
|
{"TimerGet", TimerGet},
|
|
{"TimerSet", TimerSet},
|
|
{"TimerWait", TimerWait},
|
|
{"Wait", Wait},
|
|
{"WaitKeyMessage", WaitKeyMessage},
|
|
{"WaitKeySimple", WaitKeySimple},
|
|
{"WaitKeySimpleTimeOut", WaitKeySimpleTimeOut},
|
|
{"WaitKeySprite", WaitKeySprite},
|
|
{"WaitKeySpriteTimeOut", WaitKeySpriteTimeOut},
|
|
{"WaitMsgSkipKeyUp", WaitMsgSkipKeyUp},
|
|
{"XMenuClear", XMenuClear},
|
|
{"XMenuGetNum", XMenuGetNum},
|
|
{"XMenuGetText", XMenuGetText},
|
|
{"XMenuRegister", XMenuRegister},
|
|
{"XMenuTitleGet", XMenuTitleGet},
|
|
{"XMenuTitleRegister", XMenuTitleRegister},
|
|
};
|
|
|
|
const Module module_SACT = {"SACT", functions, sizeof(functions) / sizeof(ModuleFunc), SACT_reset};
|