mirror of
https://github.com/kichikuou/xsystem35-sdl2.git
synced 2026-09-27 09:23:11 +03:00
115 lines
2.2 KiB
C
115 lines
2.2 KiB
C
#include "config.h"
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
|
|
#include "portab.h"
|
|
#include "system.h"
|
|
#include "input.h"
|
|
#include "scheduler.h"
|
|
#include "xsystem35.h"
|
|
#include "nact.h"
|
|
#include "scenario.h"
|
|
#include "s39ain.h"
|
|
#include "night.h"
|
|
#include "nt_msg.h"
|
|
|
|
#define MAINLOOP_EVENTCHECK_INTERVAL 16 /* 16 msec */
|
|
|
|
|
|
struct _scoadr {
|
|
int page;
|
|
int index;
|
|
};
|
|
|
|
static struct _scoadr scene2adr(int no) {
|
|
int i;
|
|
char label[7] = {0};
|
|
struct _scoadr adr = {0, 0};
|
|
|
|
snprintf(label, 7, "E%05d", no);
|
|
SACT_DEBUG("seaching %6s", label);
|
|
for (i = 0; i < nact->ain.fncnum; i++) {
|
|
if (0 == strncmp(nact->ain.fnc[i].name, label, 6)) {
|
|
adr.page = nact->ain.fnc[i].page;
|
|
adr.index = nact->ain.fnc[i].index;
|
|
return adr;
|
|
}
|
|
}
|
|
|
|
WARNING("no scene %d", no);
|
|
return adr;
|
|
}
|
|
|
|
|
|
void nt_sco_init() {
|
|
}
|
|
|
|
static void ntmain(struct _scoadr inadr) {
|
|
int scono = 0;
|
|
struct _scoadr curadr;
|
|
|
|
while (!nact->is_quit) {
|
|
while (!nact->is_quit && !is_yield_requested()) {
|
|
scheduler_on_command();
|
|
//SACT_DEBUG("%d:%x", sl_getPage(), sl_getIndex());
|
|
if (!nact->popupmenu_opened) {
|
|
exec_command();
|
|
if (sl_getPage() == inadr.page &&
|
|
sl_getIndex() == inadr.index) {
|
|
// ~E%05dからの戻り
|
|
if (nact->fnc_return_value == 0) {
|
|
return;
|
|
} else {
|
|
scono = nact->fnc_return_value;
|
|
}
|
|
curadr = scene2adr(scono);
|
|
sl_callFar2(curadr.page -1, curadr.index);
|
|
}
|
|
}
|
|
nact->callback();
|
|
}
|
|
sys_getInputInfo();
|
|
scheduler_yield();
|
|
}
|
|
}
|
|
|
|
/*
|
|
mode = 0: はじめから
|
|
1: 途中から
|
|
*/
|
|
int nt_sco_main(int mode) {
|
|
int scono = 1, cnt = 0;
|
|
struct _scoadr stadr, curadr;
|
|
|
|
sys_exit(2);
|
|
|
|
return 1;
|
|
}
|
|
|
|
void nt_sco_callevent(int ev) {
|
|
struct _scoadr stadr, curadr;
|
|
|
|
// InitGameMainが呼ばれたときのアドレス=関数終了時の戻りアドレス
|
|
stadr.page = sl_getPage();
|
|
stadr.index = sl_getIndex();
|
|
|
|
// シーン1
|
|
curadr = scene2adr(ev);
|
|
sl_callFar2(curadr.page -1, curadr.index);
|
|
|
|
ntmain(stadr);
|
|
|
|
sl_jmpFar2(stadr.page, stadr.index);
|
|
}
|
|
|
|
|
|
bool nt_sco_is_natsu() {
|
|
if (night.Month < 6 || night.Month > 9) return false;
|
|
if (night.Month == 6 && night.Day < 11) return false;
|
|
return true;
|
|
}
|
|
|