mirror of
https://github.com/kichikuou/xsystem35-sdl2.git
synced 2026-10-02 03:38:08 +03:00
Windows: Add "Restart" menu command
It resets all VM states and restart the game.
This commit is contained in:
@@ -117,11 +117,18 @@ void ags_init(const char *render_driver) {
|
||||
cg_init();
|
||||
}
|
||||
|
||||
void ags_remove() {
|
||||
void ags_remove(void) {
|
||||
ags_autorepeat(TRUE);
|
||||
sdl_Remove();
|
||||
}
|
||||
|
||||
void ags_reset(void) {
|
||||
nact->ags.mouse_movesw = 2;
|
||||
nact->ags.eventcb = NULL;
|
||||
initPal(&pal_256);
|
||||
cg_reset();
|
||||
}
|
||||
|
||||
void ags_setWorldSize(int width, int height, int depth) {
|
||||
nact->ags.world_size.width = width;
|
||||
nact->ags.world_size.height = height;
|
||||
|
||||
@@ -126,8 +126,9 @@ typedef struct _ags ags_t;
|
||||
|
||||
|
||||
/* 初期化関係 */
|
||||
extern void ags_init(const char *render_driver);
|
||||
extern void ags_remove();
|
||||
void ags_init(const char *render_driver);
|
||||
void ags_remove(void);
|
||||
void ags_reset(void);
|
||||
|
||||
/* ウィンド関係 */
|
||||
extern void ags_setWorldSize(int width, int height, int depth);
|
||||
|
||||
@@ -41,20 +41,20 @@
|
||||
#include "cache.h"
|
||||
|
||||
/* VSPのパレット展開バンク */
|
||||
int cg_vspPB = -1;
|
||||
int cg_vspPB;
|
||||
/* cg,palette 展開フラグ (funciotn flag) */
|
||||
int cg_fflg = 7;
|
||||
int cg_fflg;
|
||||
/* CGをロードした回数を書き込む変数 */
|
||||
int *cg_loadCountVar = NULL;
|
||||
int *cg_loadCountVar;
|
||||
/* Brightness (PD command) */
|
||||
int cg_brightness = 255;
|
||||
int cg_brightness;
|
||||
|
||||
#define GCMD_EXTRACTCG(c) ((c) & 0x01)
|
||||
#define GCMD_SET_PALETTE(c) ((c) & 0x02)
|
||||
#define GCMD_LOAD_PALETTE(c) ((c) & 0x04)
|
||||
|
||||
/* CG表示位置に関する情報 */
|
||||
static CG_WHERETODISP loc_policy = OFFSET_NOMOVE, loc_policy0;
|
||||
static CG_WHERETODISP loc_policy, loc_policy0;
|
||||
static MyPoint loc_where, loc_where0;
|
||||
|
||||
/* extracted cg data cache control object */
|
||||
@@ -244,8 +244,19 @@ static cgdata *loader(int no) {
|
||||
/*
|
||||
* Initilize cache
|
||||
*/
|
||||
void cg_init() {
|
||||
void cg_init(void) {
|
||||
cacheid = cache_new(cgdata_free);
|
||||
cg_reset();
|
||||
}
|
||||
|
||||
void cg_reset(void) {
|
||||
cg_vspPB = -1;
|
||||
cg_fflg = 7;
|
||||
cg_loadCountVar = NULL;
|
||||
cg_brightness = 255;
|
||||
loc_policy = loc_policy0 = OFFSET_NOMOVE;
|
||||
memset(&loc_where, 0, sizeof(loc_where));
|
||||
memset(&loc_where0, 0, sizeof(loc_where0));
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -72,7 +72,8 @@ typedef enum {
|
||||
OFFSET_RELATIVE_JC /* relative location and use til J4 cmd */
|
||||
} CG_WHERETODISP;
|
||||
|
||||
extern void cg_init();
|
||||
extern void cg_init(void);
|
||||
extern void cg_reset(void);
|
||||
extern void cg_set_display_location(int x, int y, CG_WHERETODISP policy);
|
||||
extern void cg_load(int no, int flg);
|
||||
extern void cg_load_with_alpha(int cgno, int shadowno);
|
||||
|
||||
+7
-1
@@ -1527,5 +1527,11 @@ void commands2F8B() {
|
||||
|
||||
void commands2F8C() {
|
||||
DEBUG_COMMAND("sysReset:\n");
|
||||
sys_reset();
|
||||
nact_quit(TRUE);
|
||||
}
|
||||
|
||||
void cmd2F_reset(void) {
|
||||
cb_sel_init_page = 0;
|
||||
cb_sel_init_address = 0;
|
||||
memset(fnctbl, 0, sizeof(fnctbl));
|
||||
}
|
||||
|
||||
+27
-1
@@ -964,7 +964,7 @@ static void va_updatePreArea(int i) {
|
||||
ags_updateArea(VAcmd[i].preX, VAcmd[i].preY, VAcmd[i].unitWidth, VAcmd[i].unitHeight);
|
||||
}
|
||||
|
||||
void va_animation() {
|
||||
void va_animation(void) {
|
||||
int i;
|
||||
int x, y, w, h;
|
||||
|
||||
@@ -1050,3 +1050,29 @@ static void va_update() {
|
||||
status_check_count = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
void va_reset(void) {
|
||||
free(UnitMap);
|
||||
UnitMap = NULL;
|
||||
|
||||
nPageNum = 0;
|
||||
x0Map = 0;
|
||||
y0Map = 0;
|
||||
cxMap = 0;
|
||||
cyMap = 0;
|
||||
cxUnit = 0;
|
||||
cyUnit = 0;
|
||||
|
||||
free(_vh_src);
|
||||
free(_vh_dst);
|
||||
_vh_src = vh_src = NULL;
|
||||
_vh_dst = vh_dst = NULL;
|
||||
vh_cnt_src = 0;
|
||||
vh_cnt_dst = 0;
|
||||
|
||||
free(srcimg);
|
||||
srcimg = NULL;
|
||||
|
||||
memset(VAcmd, 0, sizeof(VAcmd));
|
||||
inAnimation = FALSE;
|
||||
}
|
||||
|
||||
@@ -566,3 +566,7 @@ void commandZU() {
|
||||
|
||||
DEBUG_COMMAND("ZU %d:\n",sw);
|
||||
}
|
||||
|
||||
void cmdz_reset(void) {
|
||||
memset(counters, 0, sizeof(counters));
|
||||
}
|
||||
|
||||
+2
-2
@@ -51,9 +51,9 @@ void dbg_init(const char *symbols_path, boolean use_dap) {
|
||||
dbg_impl->init(symbols_path);
|
||||
}
|
||||
|
||||
void dbg_quit(bool restart) {
|
||||
void dbg_quit(void) {
|
||||
if (dbg_impl)
|
||||
dbg_impl->quit(restart);
|
||||
dbg_impl->quit();
|
||||
}
|
||||
|
||||
int dbg_lookup_var(const char *name) {
|
||||
|
||||
+2
-2
@@ -42,7 +42,7 @@ extern DebuggerState dbg_state;
|
||||
|
||||
#define dbg_trapped() (dbg_state != DBG_RUNNING)
|
||||
void dbg_init(const char *symbols_path, boolean use_dap);
|
||||
void dbg_quit(bool restart);
|
||||
void dbg_quit(void);
|
||||
void dbg_main(int bp_no);
|
||||
void dbg_onsleep(void);
|
||||
BYTE dbg_handle_breakpoint(int page, int addr);
|
||||
@@ -52,7 +52,7 @@ boolean dbg_console_vprintf(int lv, const char *format, va_list ap);
|
||||
|
||||
#define dbg_trapped() false
|
||||
#define dbg_init(symbols_path, use_dap)
|
||||
#define dbg_quit(restart)
|
||||
#define dbg_quit()
|
||||
#define dbg_main(bp_no)
|
||||
#define dbg_onsleep()
|
||||
#define dbg_handle_breakpoint(page, addr) BREAKPOINT
|
||||
|
||||
+1
-1
@@ -344,7 +344,7 @@ static void dbg_cui_init(const char *symbols_path) {
|
||||
dbg_state = DBG_STOPPED_ENTRY;
|
||||
}
|
||||
|
||||
static void dbg_cui_quit(bool restart) {
|
||||
static void dbg_cui_quit(void) {
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
|
||||
+4
-10
@@ -82,14 +82,10 @@ static void emit_initialized_event(void) {
|
||||
send_json(event);
|
||||
}
|
||||
|
||||
static void emit_terminated_event(bool restart) {
|
||||
cJSON *event = cJSON_CreateObject(), *body;
|
||||
static void emit_terminated_event(void) {
|
||||
cJSON *event = cJSON_CreateObject();
|
||||
cJSON_AddStringToObject(event, "type", "event");
|
||||
cJSON_AddStringToObject(event, "event", "terminated");
|
||||
if (restart) {
|
||||
cJSON_AddItemToObjectCS(event, "body", body = cJSON_CreateObject());
|
||||
cJSON_AddBoolToObject(body, "restart", true);
|
||||
}
|
||||
send_json(event);
|
||||
}
|
||||
|
||||
@@ -590,10 +586,8 @@ static void dbg_dap_init(const char *path) {
|
||||
}
|
||||
}
|
||||
|
||||
static void dbg_dap_quit(bool restart) {
|
||||
emit_terminated_event(restart);
|
||||
if (restart)
|
||||
exit(0); // The front end will restart xsystem35, so we can just exit.
|
||||
static void dbg_dap_quit(void) {
|
||||
emit_terminated_event();
|
||||
}
|
||||
|
||||
static void dbg_dap_repl(int bp_no) {
|
||||
|
||||
@@ -55,7 +55,7 @@ typedef struct {
|
||||
|
||||
typedef struct {
|
||||
void (*init)(const char *symbols_path);
|
||||
void (*quit)(bool restart);
|
||||
void (*quit)(void);
|
||||
void (*repl)(int bp_no);
|
||||
void (*onsleep)(void);
|
||||
void (*console_output)(int lv, const char *output);
|
||||
|
||||
@@ -47,6 +47,7 @@ typedef struct inputnum_param {
|
||||
|
||||
extern void menu_open(void);
|
||||
extern void menu_quitmenu_open(void);
|
||||
extern void menu_resetmenu_open(void);
|
||||
extern boolean menu_inputstring(INPUTSTRING_PARAM *);
|
||||
extern boolean menu_inputstring2(INPUTSTRING_PARAM *);
|
||||
extern boolean menu_inputnumber(INPUTNUM_PARAM *);
|
||||
|
||||
+1
-1
@@ -178,7 +178,7 @@ on_button5_clicked (GtkButton *button,
|
||||
gpointer user_data)
|
||||
{
|
||||
menu_ok_exit = TRUE;
|
||||
nact->is_quit = TRUE;
|
||||
nact_quit(FALSE);
|
||||
nact->popupmenu_opened = FALSE;
|
||||
}
|
||||
|
||||
|
||||
+24
-2
@@ -56,8 +56,30 @@ void menu_quitmenu_open(void) {
|
||||
return;
|
||||
}
|
||||
if (buttonid == 1) {
|
||||
nact->is_quit = TRUE;
|
||||
nact->wait_vsync = TRUE;
|
||||
nact_quit(FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
void menu_resetmenu_open(void) {
|
||||
const SDL_MessageBoxButtonData buttons[] = {
|
||||
{ SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT, 1, "Restart" },
|
||||
{ SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT, 0, "Cancel" },
|
||||
};
|
||||
const SDL_MessageBoxData messagebox_data = {
|
||||
.flags = SDL_MESSAGEBOX_INFORMATION,
|
||||
.window = sdl_window,
|
||||
.title = "Confirm",
|
||||
.message = "Restart the game?",
|
||||
.numbuttons = SDL_arraysize(buttons),
|
||||
.buttons = buttons,
|
||||
};
|
||||
int buttonid = 0;
|
||||
if (SDL_ShowMessageBox(&messagebox_data, &buttonid) < 0) {
|
||||
WARNING("error displaying message box");
|
||||
return;
|
||||
}
|
||||
if (buttonid == 1) {
|
||||
nact_quit(TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+15
-8
@@ -47,13 +47,10 @@
|
||||
// static Bcom_WindowInfo winInfo = {8,311,616,80,0};
|
||||
/* Window枠の種類 */
|
||||
static int frameType;
|
||||
static int frameCgNoTop;
|
||||
static int frameCgNoMid;
|
||||
static int frameCgNoBot;
|
||||
static int frameDot;
|
||||
/* 文字飾りの設定 */
|
||||
static int msgDecorateColor = 0;
|
||||
static int msgDecorateType = 0;
|
||||
static int msgDecorateColor;
|
||||
static int msgDecorateType;
|
||||
/* 現在の文字表示位置 */
|
||||
static MyPoint msgcur;
|
||||
static boolean nextLineIsAfterKaigyou = FALSE;
|
||||
@@ -90,6 +87,12 @@ void msg_init() {
|
||||
msg.mg_policyR = 0;
|
||||
msg.mg_policyA = 0;
|
||||
|
||||
for (int i = 0; i < MSGWINMAX; i++) {
|
||||
if (msg.wininfo[i].savedimg)
|
||||
ags_delRegion(msg.wininfo[i].savedimg);
|
||||
}
|
||||
memset(msg.wininfo, 0, sizeof(msg.wininfo));
|
||||
|
||||
msg.winno = 1;
|
||||
msg.win = &msg.wininfo[0];
|
||||
msg.wininfo[0].x = 8;
|
||||
@@ -97,6 +100,13 @@ void msg_init() {
|
||||
msg.wininfo[0].width = 616;
|
||||
msg.wininfo[0].height = 80;
|
||||
msg.wininfo[0].save = TRUE;
|
||||
|
||||
// Private variables
|
||||
msgDecorateColor = 0;
|
||||
msgDecorateType = 0;
|
||||
msgcur.x = 0;
|
||||
msgcur.y = 0;
|
||||
nextLineIsAfterKaigyou = FALSE;
|
||||
}
|
||||
|
||||
void msg_setFontSize(int size) {
|
||||
@@ -304,9 +314,6 @@ void msg_openWindow(int W, int C1, int C2, int N, int M) {
|
||||
frameDot = 8;
|
||||
break;
|
||||
case WINDOW_FRAME_CG:
|
||||
frameCgNoTop = C1;
|
||||
frameCgNoMid = C2;
|
||||
frameCgNoBot = N;
|
||||
frameDot = M;
|
||||
break;
|
||||
default:
|
||||
|
||||
+41
-5
@@ -54,8 +54,6 @@ MG コマンド: 表示時の ZH に依存
|
||||
|
||||
*/
|
||||
|
||||
/* defined by cmdv.c */
|
||||
extern void va_animation();
|
||||
/* 半角モード */
|
||||
static int msg_msgHankakuMode = 0; /* 0:全角 1:半角, 2: 無変換 */
|
||||
|
||||
@@ -147,18 +145,56 @@ static void nact_callback() {
|
||||
if (nact->popupmenu_opened) {
|
||||
menu_gtkmainiteration();
|
||||
}
|
||||
if (nact->is_quit) {
|
||||
if (nact->is_quit && !nact->restart) {
|
||||
sys_exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
void nact_init() {
|
||||
nact->ags.mouse_movesw = 2;
|
||||
nact->is_quit = FALSE;
|
||||
nact->restart = FALSE;
|
||||
nact->callback = nact_callback;
|
||||
nact->is_va_animation = FALSE;
|
||||
nact->is_cursor_animation = FALSE;
|
||||
nact->is_message_locked = FALSE;
|
||||
nact->encoding = SHIFT_JIS;
|
||||
|
||||
free(nact->game_title_utf8);
|
||||
nact->game_title_utf8 = NULL;
|
||||
nact->scenario_version = 0;
|
||||
|
||||
nact->datatbl_addr = NULL;
|
||||
nact->fnc_return_value = 0;
|
||||
|
||||
nact->messagewait_enable = FALSE;
|
||||
nact->messagewait_cancelled = FALSE;
|
||||
nact->messagewait_time = 0;
|
||||
nact->messagewait_cancel = FALSE;
|
||||
|
||||
msg_init();
|
||||
nact->is_msg_out = TRUE;
|
||||
nact->callback = nact_callback;
|
||||
nact->msgout = NULL;
|
||||
|
||||
sel_init();
|
||||
|
||||
nact->patch_ec = 1; // TODO: revisit
|
||||
nact->patch_emen = 0;
|
||||
nact->patch_g0 = 0;
|
||||
|
||||
msg_msgHankakuMode = 0;
|
||||
}
|
||||
|
||||
void nact_reset(void) {
|
||||
nact_init();
|
||||
sl_reinit();
|
||||
v_reset();
|
||||
va_reset();
|
||||
cmdz_reset();
|
||||
cmd2F_reset();
|
||||
}
|
||||
|
||||
void nact_quit(boolean restart) {
|
||||
nact->is_quit = TRUE;
|
||||
nact->restart = restart;
|
||||
nact->wait_vsync = TRUE;
|
||||
}
|
||||
|
||||
+12
-5
@@ -46,16 +46,26 @@ extern void sys_addMsg(const char *str);
|
||||
extern void sys_setHankakuMode(int mode);
|
||||
extern void sys_setCharacterEncoding(CharacterEncoding encoding);
|
||||
|
||||
// extern boolean sys_nact_engine();
|
||||
extern void nact_main();
|
||||
extern void nact_init();
|
||||
extern void nact_reset(void);
|
||||
extern void nact_quit(boolean restart);
|
||||
|
||||
// cmd_check.c
|
||||
extern void exec_command(void);
|
||||
|
||||
// cmdv.c
|
||||
void va_animation(void);
|
||||
void va_reset(void);
|
||||
// cmdz.c
|
||||
void cmdz_reset(void);
|
||||
// cmd2F.c
|
||||
void cmd2F_reset(void);
|
||||
|
||||
typedef struct {
|
||||
/* general */
|
||||
boolean is_quit; /* quit command */
|
||||
boolean restart;
|
||||
void (*callback)(void); /* main の callback */
|
||||
boolean is_va_animation; /* VA command working */
|
||||
boolean is_cursor_animation; /* animation cursor working */
|
||||
@@ -72,10 +82,7 @@ typedef struct {
|
||||
int fnc_return_value; /* 関数の戻り値として返す値 (~0,cali:で渡す値) */
|
||||
|
||||
/* key wait */
|
||||
int waittime;
|
||||
int waitcancel_key;
|
||||
int waitcancel_key_mask;
|
||||
boolean waitcancel_enabled;
|
||||
int waitcancel_key; // TODO: remove this
|
||||
|
||||
/* message wait */
|
||||
boolean messagewait_enable;
|
||||
|
||||
@@ -69,6 +69,7 @@ boolean sl_init(void) {
|
||||
labelCallCnt = 0;
|
||||
pageCallCnt = 0;
|
||||
labelCallCnt_afterPageCall = 0;
|
||||
dataPushCnt = 0;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
@@ -133,6 +133,8 @@ boolean sdl_cursorNew(BYTE* data, int no, CursorImage *cursorImage, TCursorDirEn
|
||||
}
|
||||
}
|
||||
|
||||
if (cursor[no])
|
||||
SDL_FreeCursor(cursor[no]);
|
||||
cursor[no] = SDL_CreateCursor(buf3, buf4, 32, 32, cursordirentry->wxHotspot, cursordirentry->wyHotspot);
|
||||
|
||||
free(buf1);
|
||||
|
||||
+30
-3
@@ -53,9 +53,9 @@ static char elm[ELEMENT_MAX][ELEMENT_LENGTH];
|
||||
/* 選択したときに返す値 */
|
||||
static int elmv[ELEMENT_MAX];
|
||||
/* 現在登録中の選択肢の番号 */
|
||||
static int regnum = 0;
|
||||
static int regnum;
|
||||
/* 選択肢の要素の最大長さ */
|
||||
static int maxElementLength = 0;
|
||||
static int maxElementLength;
|
||||
/* 選択肢ウィンド退避 */
|
||||
static MyRectangle saveArea;
|
||||
/* 選択ウィンドの退避用 */
|
||||
@@ -69,7 +69,7 @@ static int cb_select_address;
|
||||
static int cb_cancel_page;
|
||||
static int cb_cancel_address;
|
||||
/* 選択肢 window を開いた時のマウスカーソルの動作 */
|
||||
static int default_element = 1;
|
||||
static int default_element;
|
||||
/* 最後に選んだ選択肢の要素番号 */
|
||||
static int last_selected_element;
|
||||
/* キーボードによる選択操作用 */
|
||||
@@ -110,6 +110,12 @@ void sel_init() {
|
||||
sel.WinResizeWidth = FALSE;
|
||||
sel.WinResizeHeight = TRUE;
|
||||
|
||||
for (int i = 0; i < SELWINMAX; i++) {
|
||||
if (sel.wininfo[i].savedimg)
|
||||
ags_delRegion(sel.wininfo[i].savedimg);
|
||||
}
|
||||
memset(sel.wininfo, 0, sizeof(sel.wininfo));
|
||||
|
||||
sel.winno = 1;
|
||||
sel.win = &sel.wininfo[0];
|
||||
sel.wininfo[0].x = 464;
|
||||
@@ -120,6 +126,27 @@ void sel_init() {
|
||||
|
||||
/* 選択肢を登録中 */
|
||||
sel.in_setting = FALSE;
|
||||
|
||||
// Private variables
|
||||
memset(elm, 0, sizeof(elm));
|
||||
memset(elmv, 0, sizeof(elmv));
|
||||
regnum = 0;
|
||||
maxElementLength = 0;
|
||||
|
||||
if (saveimg) {
|
||||
ags_delRegion(saveimg);
|
||||
saveimg = NULL;
|
||||
}
|
||||
if (saveimg2) {
|
||||
ags_delRegion(saveimg2);
|
||||
saveimg2 = NULL;
|
||||
}
|
||||
cb_select_page = 0;
|
||||
cb_select_address = 0;
|
||||
cb_cancel_page = 0;
|
||||
cb_cancel_address = 0;
|
||||
default_element = 1;
|
||||
last_selected_element = 0;
|
||||
}
|
||||
|
||||
/* 登録された選択肢の個数を削減する */
|
||||
|
||||
@@ -30,7 +30,6 @@
|
||||
extern void sys_error(char *format, ...); /* show nessafe and exit system */
|
||||
extern void sys_exit(int code); /* exit system with code */
|
||||
extern void sys_message(int lv, char *format, ...); /* show various message */
|
||||
extern void sys_reset();
|
||||
|
||||
/*
|
||||
DEBUGLEVEL
|
||||
|
||||
+23
-7
@@ -47,8 +47,8 @@ double longVar[SYSVARLONG_MAX];
|
||||
/* 文字列変数 */
|
||||
static char **strVar;
|
||||
/* 文字列変数の属性(最大,1つあたりの大きさ) */
|
||||
int strvar_cnt = STRVAR_MAX;
|
||||
int strvar_len = STRVAR_LEN;
|
||||
int strvar_cnt;
|
||||
int strvar_len;
|
||||
|
||||
int preVarPage; /* 直前にアクセスした変数のページ */
|
||||
int preVarIndex; /* 直前にアクセスした変数のINDEX */
|
||||
@@ -175,12 +175,28 @@ extern int svar_maxindex(void) {
|
||||
}
|
||||
|
||||
/* 変数の初期化 */
|
||||
extern boolean v_initVars() {
|
||||
strVar = calloc(STRVAR_MAX, sizeof(char *));
|
||||
if (strVar == NULL) {
|
||||
NOMEMERR();
|
||||
void v_init(void) {
|
||||
svar_init(STRVAR_MAX - 1, STRVAR_LEN);
|
||||
}
|
||||
|
||||
void v_reset(void) {
|
||||
memset(sysVar, 0, sizeof(sysVar));
|
||||
memset(attributes, 0, sizeof(attributes));
|
||||
memset(longVar, 0, sizeof(longVar));
|
||||
|
||||
for (int i = 0; i < ARRAYVAR_PAGEMAX; i++) {
|
||||
if (arrayVarBuffer[i].value)
|
||||
free(arrayVarBuffer[i].value);
|
||||
}
|
||||
return true;
|
||||
memset(arrayVarBuffer, 0, sizeof(arrayVarBuffer));
|
||||
|
||||
for (int i = 0; i < strvar_cnt; i++) {
|
||||
if (strVar[i]) {
|
||||
free(strVar[i]);
|
||||
strVar[i] = NULL;
|
||||
}
|
||||
}
|
||||
svar_init(STRVAR_MAX - 1, STRVAR_LEN);
|
||||
}
|
||||
|
||||
/* 文字変数への代入 */
|
||||
|
||||
+2
-1
@@ -53,7 +53,8 @@ boolean v_allocateArrayBuffer(int page, int size, boolean saveflag);
|
||||
boolean v_defineArrayVar(int datavar, int *pointvar, int offset, int page);
|
||||
boolean v_releaseArrayVar(int datavar);
|
||||
boolean v_getArrayBufferStatus(int page);
|
||||
boolean v_initVars();
|
||||
void v_init(void);
|
||||
void v_reset(void);
|
||||
|
||||
void svar_init(int max_index, int len);
|
||||
int svar_maxindex(void);
|
||||
|
||||
@@ -74,6 +74,9 @@ void win_menu_onsyswmevent(SDL_SysWMmsg* msg) {
|
||||
case ID_SCREENSHOT:
|
||||
saveScreenshot();
|
||||
break;
|
||||
case ID_RESTART:
|
||||
menu_resetmenu_open();
|
||||
break;
|
||||
case ID_EXIT:
|
||||
menu_quitmenu_open();
|
||||
break;
|
||||
|
||||
+2
-1
@@ -29,7 +29,8 @@
|
||||
#define IDS_CHOOSE_GAME_FOLDER 1001
|
||||
|
||||
#define ID_SCREENSHOT 40001
|
||||
#define ID_EXIT 40002
|
||||
#define ID_RESTART 40002
|
||||
#define ID_EXIT 40003
|
||||
#define ID_SCREEN_WINDOW 40011
|
||||
#define ID_SCREEN_FULL 40012
|
||||
#define ID_MSGSKIP 40020
|
||||
|
||||
@@ -12,6 +12,7 @@ IDR_MENU1 MENU DISCARDABLE
|
||||
POPUP "File"
|
||||
{
|
||||
MENUITEM "Save Screenshot", ID_SCREENSHOT
|
||||
MENUITEM "Restart", ID_RESTART
|
||||
MENUITEM "Exit", ID_EXIT
|
||||
}
|
||||
POPUP "Screen"
|
||||
@@ -45,6 +46,7 @@ IDR_MENU1 MENU DISCARDABLE
|
||||
POPUP "ファイル"
|
||||
{
|
||||
MENUITEM "画面保存", ID_SCREENSHOT
|
||||
MENUITEM "再起動", ID_RESTART
|
||||
MENUITEM "閉じる", ID_EXIT
|
||||
}
|
||||
POPUP "画面"
|
||||
|
||||
+15
-22
@@ -101,10 +101,6 @@ static boolean font_noantialias;
|
||||
/* fullscreen on from command line */
|
||||
static boolean fs_on;
|
||||
|
||||
// for reboot
|
||||
static int saved_argc;
|
||||
static char **saved_argv;
|
||||
|
||||
static void sys35_usage(boolean verbose) {
|
||||
if (verbose) {
|
||||
puts("System35 for X Window System [proj. Rainy Moon]");
|
||||
@@ -210,7 +206,7 @@ static void sys35_init() {
|
||||
|
||||
sl_init();
|
||||
|
||||
v_initVars();
|
||||
v_init();
|
||||
|
||||
ags_init(render_driver);
|
||||
|
||||
@@ -223,16 +219,13 @@ static void sys35_init() {
|
||||
|
||||
sgenrand(getpid());
|
||||
|
||||
msg_init();
|
||||
sel_init();
|
||||
|
||||
if (nact->files.ain)
|
||||
s39ain_init(nact->files.ain, &nact->ain);
|
||||
msgskip_init(nact->files.msgskip);
|
||||
}
|
||||
|
||||
static void sys35_remove() {
|
||||
dbg_quit(false);
|
||||
dbg_quit();
|
||||
mus_exit();
|
||||
ags_remove();
|
||||
#ifdef ENABLE_GTK
|
||||
@@ -240,15 +233,10 @@ static void sys35_remove() {
|
||||
#endif
|
||||
}
|
||||
|
||||
void sys_reset() {
|
||||
mus_exit();
|
||||
ags_remove();
|
||||
#ifdef ENABLE_GTK
|
||||
s39ini_remove();
|
||||
#endif
|
||||
dbg_quit(true); // This may exit().
|
||||
execvp(saved_argv[0], saved_argv);
|
||||
sys_error("exec fail");
|
||||
static void sys_reset(void) {
|
||||
nact_reset();
|
||||
ags_reset();
|
||||
mus_reset();
|
||||
}
|
||||
|
||||
static void sys35_ParseOption(int *argc, char **argv) {
|
||||
@@ -462,9 +450,6 @@ int main(int argc, char **argv) {
|
||||
sys_set_signalhandler(SIGINT, SIG_IGN);
|
||||
#endif
|
||||
|
||||
saved_argc = argc;
|
||||
saved_argv = argv;
|
||||
|
||||
#ifdef __ANDROID__
|
||||
// Handle -gamedir option here so that .xsys35rc is loaded from that directory.
|
||||
if (strcmp(argv[1], "-gamedir") == 0)
|
||||
@@ -516,7 +501,15 @@ int main(int argc, char **argv) {
|
||||
dbg_init(symbols_path, debugger_mode == DEBUGGER_DAP);
|
||||
}
|
||||
|
||||
nact_main();
|
||||
for (;;) {
|
||||
nact_main();
|
||||
if (nact->restart) {
|
||||
sys_reset();
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef __EMSCRIPTEN__
|
||||
sdl_sleep(1000000000);
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user