Files
kichikuou_xsystem35-sdl2/modules/NIGHTDLL/NIGHTDLL.c
T
kichikuou a627a8ea3d Add VM variable storage type
Define a dedicated `vmvar_t` type for values stored in variable pages
and propagate it through interfaces that expose those values. Keep the
type as int for now so this commit does not change runtime behavior.
This separates VM storage from ordinary int buffers and makes a later
conversion to 16-bit storage mechanically checkable.
2026-07-17 08:48:10 +09:00

666 lines
16 KiB
C

#include "config.h"
#include <stdio.h>
#include "portab.h"
#include "system.h"
#include "xsystem35.h"
#include "modules.h"
#include "nact.h"
#include "night.h"
#include "nt_sound.h"
#include "nt_graph.h"
#include "nt_scenario.h"
#include "nt_msg.h"
#include "nt_event.h"
#include "sactcg.h"
#include "sactstring.h"
// NIGHTDLL用データ
night_t nightprv;
static void Init(void) { /* 0 */
vmvar_t *var = getCaliVariable();
int p1 = getCaliValue(); /* ISys3xCG */
int p2 = getCaliValue(); /* ISys3xDIB */
int p3 = getCaliValue(); /* ISys3xMsgString */
int p4 = getCaliValue(); /* ISys3xStringTable */
int p5 = getCaliValue(); /* ISys3xSystem */
int p6 = getCaliValue(); /* ITimer */
int p7 = getCaliValue(); /* IUI */
int p8 = getCaliValue(); /* IWinMsg */
int p9 = getCaliValue(); /* ISys3x */
int p10 = getCaliValue(); /* ISys3xInputDevice */
*var = 1;
TRACE_UNIMPLEMENTED("NIGHTDLL.Init %p:", var);
}
static void NIGHTDLL_reset(void) {
nt_sstr_reset();
nt_sp_clear_updatelist();
for (int i = 0; i < SPRITEMAX; i++) {
if (night.sp[i])
nt_sp_free(night.sp[i]);
}
scg_freeall();
memset(&night, 0, sizeof(night));
}
static void InitGame() { /* 1 */
ags_setAntialiasedStringMode(true);
sys_setHankakuMode(2);
nact->msgout = ntmsg_add;
nact->ags.eventcb = ntev_callback;
nt_gr_init();
ntmsg_init();
nt_sstr_init();
TRACE_UNIMPLEMENTED("NIGHTDLL.InitGame:");
}
// メッセージの枠の表示
static void SetMsgFrame() { /* 2 */
int p1 = getCaliValue(); // 0=枠消去, 1=枠あり, 2=中央
ntmsg_set_frame(p1);
TRACE_UNIMPLEMENTED("NIGHTDLL.SetMsgFram %d:", p1);
}
// メッセージの表示位置の設定
static void SetMsgPlaceMethod(void) { /* 3 */
int p1 = getCaliValue(); // 0=メッセージ枠内, 1=中央,
// 2=メッセージ枠+顔つき
ntmsg_set_place(p1);
TRACE_UNIMPLEMENTED("NIGHTDLL.SetMsgPlaceMethod %d:", p1);
}
// 未実装?
static void SetMsgDrawEffect(void) { /* 4 */
int p1 = getCaliValue(); // 0, 1, 2, 3 (実際にはどれも機能しない?)
TRACE_UNIMPLEMENTED("NIGHTDLL.SetMsgDrawEffect %d:", p1);
}
// 未実装?
static void SetMsgClearEffect(void) { /* 5 */
int p1 = getCaliValue(); // 0, 1, 2, 4 (実際にはどれも機能しない?)
TRACE_UNIMPLEMENTED("NIGHTDLL.SetMsgClearEffect %d:", p1);
}
// 壁紙CGの設定
static void SetWallPaper(void) { /* 6 */
int p1 = getCaliValue(); // 壁紙CG番号
nt_gr_set_wallpaper(p1);
TRACE_UNIMPLEMENTED("NIGHTDLL.SetWallPaper %d:", p1);
}
// 背景CGの設定
static void SetScenery(void) { /* 7 */
int p1 = getCaliValue(); // 背景GC番号
nt_gr_set_scenery(p1);
TRACE_UNIMPLEMENTED("NIGHTDLL.SetScenery %d:", p1);
}
// 顔CGの設定
static void SetFace(void) { /* 8 */
int p1 = getCaliValue(); // 顔CG番号
nt_gr_set_face(p1);
TRACE_UNIMPLEMENTED("NIGHTDLL.SetFace %d:", p1);
}
// 立ち絵左の設定
static void SetSpriteL(void) { /* 9 */
int p1 = getCaliValue(); // 左人物スプライト番号
nt_gr_set_spL(p1);
TRACE_UNIMPLEMENTED("NIGHTDLL.SetSpriteL %d:", p1);
}
// 立ち絵中央の設定
static void SetSpriteM(void) { /* 10 */
int p1 = getCaliValue(); // 中央人物スプライト番号
nt_gr_set_spM(p1);
TRACE_UNIMPLEMENTED("NIGHTDLL.SetSpriteM %d:", p1);
}
// 立ち絵右の設定
static void SetSpriteR(void) { /* 11 */
int p1 = getCaliValue(); // 右人物スプライト番号
nt_gr_set_spR(p1);
TRACE_UNIMPLEMENTED("NIGHTDLL.SetSpriteR %d:", p1);
}
// 立ち絵左の設定(季節違い?)
static void SetSpriteSeasonL(void) { /* 12 */
int p1 = getCaliValue(); // 左人物スプライト番号
nt_gr_set_spsL(p1);
TRACE_UNIMPLEMENTED("NIGHTDLL.SetSpriteSeasonL %d:", p1);
}
// 立ち絵中央の設定(季節違い?)
static void SetSpriteSeasonM(void) { /* 13 */
int p1 = getCaliValue(); // 中央人物スプライト番号
nt_gr_set_spM(p1);
TRACE_UNIMPLEMENTED("NIGHTDLL.SetSpriteSeasonM %d:", p1);
}
// 立ち絵右の設定(季節違い?)
static void SetSpriteSeasonR(void) { /* 14 */
int p1 = getCaliValue(); // 右人物スプライト番号
nt_gr_set_spsR(p1);
TRACE_UNIMPLEMENTED("NIGHTDLL.SetSpriteSeasonR %d:", p1);
}
// 改行
static void StartNewLine(void) { /* 15 */
ntmsg_newline();
TRACE_UNIMPLEMENTED("NIGHTDLL.StartNewLine:");
}
// メッセージフォントサイズの設定
static void SetFontSize(void) { /* 16 */
int p1 = getCaliValue(); // メッセージフォントサイズ
night.fontsize = p1;
TRACE_UNIMPLEMENTED("NIGHTDLL.SetFontSize %d:", p1);
}
// フォントの種類の設定
static void SetFont(void) { /* 17 */
int p1 = getCaliValue(); // 0: ゴシック, 1: 明朝
night.fonttype = p1;
TRACE_UNIMPLEMENTED("NIGHTDLL.SetFont %d:", p1);
}
// 選択肢モード ON
static void SetSelMode(void) { /* 18 */
int p1 = getCaliValue(); // 0, 1(ほとんど0)
night.selmode = p1;
TRACE_UNIMPLEMENTED("NIGHTDLL.SetSelMode %d:", p1);
}
// キー入力待ち後、改ページ
static void AnalyzeMessage(void) { /* 19 */
vmvar_t *var = getCaliVariable(); // 入力されたキー
*var = ntmsg_ana();
TRACE_UNIMPLEMENTED("NIGHTDLL.AnalyzeMessage %p:", var);
}
// ~DRAWの効果時間
static void SetDrawTime(void) { /* 20 */
int p1 = getCaliValue(); // 効果時間 (未使用?)
nt_gr_set_drawtime(p1);
TRACE_UNIMPLEMENTED("NIGHTDLL.SetDrawTime %d:", p1);
}
// 効果つき画面更新
static void Draw(void) { /* 21 */
int p1 = getCaliValue(); // 効果番号
nt_gr_draw(p1);
TRACE_UNIMPLEMENTED("NIGHTDLL.Draw %d:", p1);
}
// 音声データを再生
static void SetVoice(void) { /* 22 */
int p1 = getCaliValue(); // ファイル番号
nt_voice_set(p1);
TRACE_UNIMPLEMENTED("NIGHTDLL.SetVoice %d:", p1);
}
// 未使用
static void WaitKey(void) { /* 23 */
int p1 = getCaliValue(); //
TRACE_UNIMPLEMENTED("NIGHTDLL.WaitKey %d:", p1);
}
static void AddFeeling(void) { /* 24 */
int p1 = getCaliValue(); // person(1:新開,2:星川,3:百瀬,4:いずみ,5:鏡花,6:真言美,7:マコト
int p2 = getCaliValue(); // val
TRACE_UNIMPLEMENTED("NIGHTDLL.AddFeeling %d:", p1);
}
static void SubFeeling(void) { /* 25 */
int p1 = getCaliValue(); // person
int p2 = getCaliValue(); // val
TRACE_UNIMPLEMENTED("NIGHTDLL.SubFeeling %d:", p1);
}
static void CallEvent(void) { /* 26 */
int p1 = getCaliValue(); // 1, 2 (Event Number)
nt_sco_callevent(p1);
TRACE_UNIMPLEMENTED("NIGHTDLL.CallEvent %d:", p1);
}
static void ScreenCG(void) { /* 27 */
/*
CG を読み込んで、surface0 と BlendScreen で重ね合わせ
x : 表示位置 X
y : 表示位置 Y
no: 読み込むCG番号
*/
int p1 = getCaliValue(); /* ISys3xDIB */
int p2 = getCaliValue(); /* ISys3xCG */
int x = getCaliValue();
int y = getCaliValue();
int no = getCaliValue();
nt_gr_screencg(no, x, y);
TRACE_UNIMPLEMENTED("NIGHTDLL.ScreenCG %d,%d,%d:", x, y, no);
}
static void RunGameMain(void) { /* 28 */
vmvar_t *p1 = getCaliVariable(); // result
int p2 = getCaliValue(); // month
int p3 = getCaliValue(); // day
int p4 = getCaliValue(); // day of week
int p5 = getCaliValue(); // 0=はじめから,1=途中から
night.Month = p2;
night.Day = p3;
night.DayOfWeek = p4;
*p1 = nt_sco_main(p5);
TRACE_UNIMPLEMENTED("NIGHTDLL.RunGameMain %p,%d,%d,%d,%d:", p1, p2, p3, p4, p5);
}
static void CheckNewGame(void) { /* 29 */
vmvar_t *p1 = getCaliVariable();
*p1 = 0;
TRACE_UNIMPLEMENTED("NIGHTDLL.CheckNewGame %p:", p1);
}
static void SaveStartData(void) { /* 30 */
TRACE_UNIMPLEMENTED("NIGHTDLL.SaveStartData:");
}
static void PrintExitSystem(void) { /* 31 */
TRACE_UNIMPLEMENTED("NIGHTDLL.PrintExitSystem:");
}
static void SetCalendar(void) { /* 32 */
int p1 = getCaliValue(); // 0, 1, 2
TRACE_UNIMPLEMENTED("NIGHTDLL.SetCalendar %d:", p1);
}
static void SetDate(void) { /* 33 */
int p1 = getCaliValue(); // month
int p2 = getCaliValue(); // day
int p3 = getCaliValue(); // day of week
night.Month = p1;
night.Day = p2;
night.DayOfWeek = p3;
TRACE_UNIMPLEMENTED("NIGHTDLL.SetDate %d,%d,%d:", p1, p2, p3);
}
static void GetDate(void) { /* 34 */
vmvar_t *p1 = getCaliVariable(); // month
vmvar_t *p2 = getCaliVariable(); // day
vmvar_t *p3 = getCaliVariable(); // day of weeek
*p1 = night.Month;
*p2 = night.Day;
*p3 = night.DayOfWeek;
TRACE_UNIMPLEMENTED("NIGHTDLL.GetDate %p,%p,%p:", p1, p2, p3);
}
static void SelectGameLevel(void) { /* 35 */
TRACE_UNIMPLEMENTED("NIGHTDLL.SelectGameLevel:");
}
static void RunEventDungeon(void) { /* 36 */
vmvar_t *p1 = getCaliVariable();
int p2 = getCaliValue();
*p1 = 1;
TRACE_UNIMPLEMENTED("NIGHTDLL.RunEventDungeon %p,%d:", p1, p2);
}
static void RunEventBattle(void) { /* 37 */
int p1 = getCaliValue(); // 実際には機能しない?
TRACE_UNIMPLEMENTED("NIGHTDLL.RunEventBattle %d:", p1);
}
// CD再生開始
static void CDPlay(void) { /* 38 */
int p1 = getCaliValue(); // no
nt_cd_play(p1);
TRACE_UNIMPLEMENTED("NIGHTDLL.CDPlay %d:", p1);
}
// CD再生停止
static void CDStop(void) { /* 39 */
int p1 = getCaliValue(); // time(msec)
nt_cd_stop(p1);
TRACE_UNIMPLEMENTED("NIGHTDLL.CDStop %d:", p1);
}
// CDのmute
static void CDMute(void) { /* 40 */
int p1 = getCaliValue(); // 0: mute off, 1: mute on
nt_cd_mute(p1 != 0);
TRACE_UNIMPLEMENTED("NIGHTDLL.CDMute %d:", p1);
}
// ch に効果音番号をセット
static void SoundEffectSetWave(void) { /* 41 */
int p1 = getCaliValue(); // ch
int p2 = getCaliValue(); // linkno
nt_snd_setwave(p1, p2);
TRACE_UNIMPLEMENTED("NIGHTDLL.SoundEffectSetWave %d,%d:", p1, p2);
}
// ch にくり返し数をセット
static void SoundEffectSetLoop(void) { /* 42 */
int p1 = getCaliValue(); // ch
int p2 = getCaliValue(); // numloop
nt_snd_setloop(p1, p2);
TRACE_UNIMPLEMENTED("NIGHTDLL.SoundEffectSetLoop %d,%d:", p1, p2);
}
// ch に音量をセット
static void SoundEffectSetVolume(void) { /* 43 */
int p1 = getCaliValue(); // ch
int p2 = getCaliValue(); // vol
nt_snd_setvol(p1, p2);
TRACE_UNIMPLEMENTED("NIGHTDLL.SoundEffectSetVolue %d,%d:", p1, p2);
}
// 効果音の再生を終るまで待つか待たないか?
static void SoundEffectSetSyncFlag(void) { /* 44 */
int p1 = getCaliValue(); // ch
int p2 = getCaliValue(); // 0: 終るまで待たない, 1: 待つ
nt_snd_waitend(p1, p2 != 0);
TRACE_UNIMPLEMENTED("NIGHTDLL.SoundEffectSetSyncFlag %d,%d:", p1, p2);
}
// ch の効果音を再生
static void SoundEffectPlay(void) { /* 45 */
int p1 = getCaliValue(); // ch
nt_snd_play(p1);
TRACE_UNIMPLEMENTED("NIGHTDLL.SoundEffectPlay %d:", p1);
}
// ch の効果音を停止
static void SoundEffectStop(void) { /* 46 */
int p1 = getCaliValue(); // ch
int p2 = getCaliValue(); // time (止まるまでの時間)
nt_snd_stop(p1, p2);
TRACE_UNIMPLEMENTED("NIGHTDLL.SoundEffectStop %d,%d:", p1,p2);
}
// 全てのチャンネルの再生を停止
static void SoundEffectStopAll(void) { /* 47 */
int p1 = getCaliValue(); // time (止まるまでの時間)
nt_snd_stopall(p1);
TRACE_UNIMPLEMENTED("NIGHTDLL.SoundEffectStopAll %d:", p1);
}
static void RunSoundMode(void) { /* 48 */
TRACE_UNIMPLEMENTED("NIGHTDLL.RunSoundMode:");
}
static void RunMapEditor(void) { /* 49 */
vmvar_t *p1 = getCaliVariable();
TRACE_UNIMPLEMENTED("NIGHTDLL.RunMapEditor %p:", p1);
}
static void VisualListClear(void) { /* 50 */
TRACE_UNIMPLEMENTED("NIGHTDLL.VisualListClear:");
}
static void VisualListAdd(void) { /* 51 */
int p1 = getCaliValue();
TRACE_UNIMPLEMENTED("NIGHTDLL.VisualListAdd %d:", p1);
}
static void GetLocalCountCG(void) { /* 52 */
vmvar_t *p1 = getCaliVariable();
int p2 = getCaliValue();
TRACE_UNIMPLEMENTED("NIGHTDLL.GetLocalCountCG %p,%d:", p1, p2);
}
static void PlayMemory(void) { /* 53 */
vmvar_t *p1 = getCaliVariable(); // 回想ページ
vmvar_t *p2 = getCaliVariable(); // 回想RESULT
TRACE_UNIMPLEMENTED("NIGHTDLL.PlayMemory %p,%p:", p1, p2);
}
static void GetEventFlagTotal(void) { /* 54 */
vmvar_t *p1 = getCaliVariable();
int p2 = getCaliValue();
TRACE_UNIMPLEMENTED("NIGHTDLL.GetEventFlagTotal %p,%d:", p1, p2);
}
static void SetPlayerName(void) { /* 55 */
int p1 = getCaliValue();
TRACE_UNIMPLEMENTED("NIGHTDLL.SetPlayerName %d:", p1);
}
static void GetPlayerName(void) { /* 56 */
int p1 = getCaliValue();
TRACE_UNIMPLEMENTED("NIGHTDLL.GetPlayerName %d:", p1);
}
static void SaveGame(void) { /* 57 */
vmvar_t *p1 = getCaliVariable();
TRACE_UNIMPLEMENTED("NIGHTDLL.SaveGame %p:", p1);
}
static void LoadGame(void) { /* 58 */
vmvar_t *p1 = getCaliVariable();
TRACE_UNIMPLEMENTED("NIGHTDLL.LoadGame %p:", p1);
}
static void ExistSaveData(void) { /* 59 */
vmvar_t *p1 = getCaliVariable();
TRACE_UNIMPLEMENTED("NIGHTDLL.ExistSaveData %p:", p1);
}
static void ExistStartData(void) { /* 60 */
vmvar_t *p1 = getCaliVariable();
TRACE_UNIMPLEMENTED("NIGHTDLL.ExistStartData %p:", p1);
}
static void SetAreaData(void) { /* 61 */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
TRACE_UNIMPLEMENTED("NIGHTDLL.SetAreaData %d,%d,%d:", p1, p2, p3);
}
static void RunBattleTest(void) { /* 62 */
TRACE_UNIMPLEMENTED("NIGHTDLL.RunBattleTest:");
}
static void RunTrainingTest(void) { /* 63 */
TRACE_UNIMPLEMENTED("NIGHTDLL.RunTrainingTest:");
}
static void TestEventCall(void) { /* 64 */
TRACE_UNIMPLEMENTED("NIGHTDLL.TestEventCall:");
}
static void Test(void) { /* 65 */
TRACE_UNIMPLEMENTED("NIGHTDLL.Test:");
}
static void DebugScenario(void) { /* 66 */
TRACE_UNIMPLEMENTED("NIGHTDLL.DebugScenario:");
}
static void GetDLLTime(void) { /* 67 */
vmvar_t *p1 = getCaliVariable();
vmvar_t *p2 = getCaliVariable();
vmvar_t *p3 = getCaliVariable();
vmvar_t *p4 = getCaliVariable();
vmvar_t *p5 = getCaliVariable();
vmvar_t *p6 = getCaliVariable();
vmvar_t *p7 = getCaliVariable();
TRACE_UNIMPLEMENTED("NIGHTDLL.GetDLLTime %p,%p,%p,%p,%p,%p,%p:", p1, p2, p3, p4, p5, p6, p7);
}
static const ModuleFunc functions[] = {
{"AddFeeling", AddFeeling},
{"AnalyzeMessage", AnalyzeMessage},
{"CDMute", CDMute},
{"CDPlay", CDPlay},
{"CDStop", CDStop},
{"CallEvent", CallEvent},
{"CheckNewGame", CheckNewGame},
{"DebugScenario", DebugScenario},
{"Draw", Draw},
{"ExistSaveData", ExistSaveData},
{"ExistStartData", ExistStartData},
{"GetDLLTime", GetDLLTime},
{"GetDate", GetDate},
{"GetEventFlagTotal", GetEventFlagTotal},
{"GetLocalCountCG", GetLocalCountCG},
{"GetPlayerName", GetPlayerName},
{"Init", Init},
{"InitGame", InitGame},
{"LoadGame", LoadGame},
{"PlayMemory", PlayMemory},
{"PrintExitSystem", PrintExitSystem},
{"RunBattleTest", RunBattleTest},
{"RunEventBattle", RunEventBattle},
{"RunEventDungeon", RunEventDungeon},
{"RunGameMain", RunGameMain},
{"RunMapEditor", RunMapEditor},
{"RunSoundMode", RunSoundMode},
{"RunTrainingTest", RunTrainingTest},
{"SaveGame", SaveGame},
{"SaveStartData", SaveStartData},
{"ScreenCG", ScreenCG},
{"SelectGameLevel", SelectGameLevel},
{"SetAreaData", SetAreaData},
{"SetCalendar", SetCalendar},
{"SetDate", SetDate},
{"SetDrawTime", SetDrawTime},
{"SetFace", SetFace},
{"SetFont", SetFont},
{"SetFontSize", SetFontSize},
{"SetMsgClearEffect", SetMsgClearEffect},
{"SetMsgDrawEffect", SetMsgDrawEffect},
{"SetMsgFrame", SetMsgFrame},
{"SetMsgPlaceMethod", SetMsgPlaceMethod},
{"SetPlayerName", SetPlayerName},
{"SetScenery", SetScenery},
{"SetSelMode", SetSelMode},
{"SetSpriteL", SetSpriteL},
{"SetSpriteM", SetSpriteM},
{"SetSpriteR", SetSpriteR},
{"SetSpriteSeasonL", SetSpriteSeasonL},
{"SetSpriteSeasonM", SetSpriteSeasonM},
{"SetSpriteSeasonR", SetSpriteSeasonR},
{"SetVoice", SetVoice},
{"SetWallPaper", SetWallPaper},
{"SoundEffectPlay", SoundEffectPlay},
{"SoundEffectSetLoop", SoundEffectSetLoop},
{"SoundEffectSetSyncFlag", SoundEffectSetSyncFlag},
{"SoundEffectSetVolume", SoundEffectSetVolume},
{"SoundEffectSetWave", SoundEffectSetWave},
{"SoundEffectStop", SoundEffectStop},
{"SoundEffectStopAll", SoundEffectStopAll},
{"StartNewLine", StartNewLine},
{"SubFeeling", SubFeeling},
{"Test", Test},
{"TestEventCall", TestEventCall},
{"VisualListAdd", VisualListAdd},
{"VisualListClear", VisualListClear},
{"WaitKey", WaitKey},
};
const Module module_NIGHTDLL = {"NIGHTDLL", functions, sizeof(functions) / sizeof(ModuleFunc), NIGHTDLL_reset};