void PonscripterLabel::leaveSystemCall(bool restore_flag) { current_font = &sentence_font; display_mode = shelter_display_mode; system_menu_mode = SYSTEM_NULL; system_menu_enter_flag = false; yesno_caller = SYSTEM_NULL; key_pressed_flag = false; if (restore_flag) { current_text_buffer = cached_text_buffer; restoreTextBuffer(); buttons.swap(shelter_buttons); shelter_buttons.clear(); select_links.swap(shelter_select_links); shelter_select_links.clear(); event_mode = shelter_event_mode; draw_cursor_flag = shelter_draw_cursor_flag; if (event_mode & WAIT_BUTTON_MODE) { SDL_WarpMouseInWindow(screen, shelter_mouse_state.x, shelter_mouse_state.y); } } dirty_rect.fill(screen_width, screen_height); flush(refreshMode()); //printf("leaveSystemCall %d %d\n",event_mode, clickstr_state); refreshMouseOverButton(); advancePhase(); }
void PonscripterLabel::executeSystemLookback() { current_font = &sentence_font; if (event_mode & WAIT_BUTTON_MODE) { if (current_button_state.button == 0 || (current_text_buffer == start_text_buffer && current_button_state.button == -2)) return; if (current_button_state.button == -1 || (current_button_state.button == -3 && current_text_buffer->next == cached_text_buffer) || current_button_state.button <= -4) { event_mode = IDLE_EVENT_MODE; deleteButtons(); if (lookback_sp[0] >= 0) sprite_info[lookback_sp[0]].visible(false); if (lookback_sp[1] >= 0) sprite_info[lookback_sp[1]].visible(false); leaveSystemCall(); return; } if (current_button_state.button == 1 || current_button_state.button == -2) { current_text_buffer = current_text_buffer->previous; } else current_text_buffer = current_text_buffer->next; } else { current_text_buffer = current_text_buffer->previous; if (current_text_buffer->empty()) { if (lookback_sp[0] >= 0) sprite_info[lookback_sp[0]].visible(false); if (lookback_sp[1] >= 0) sprite_info[lookback_sp[1]].visible(false); leaveSystemCall(); return; } event_mode = WAIT_BUTTON_MODE; system_menu_mode = SYSTEM_LOOKBACK; } setupLookbackButton(); refreshMouseOverButton(); rgb_t color = sentence_font.color; sentence_font.color = lookback_color; restoreTextBuffer(); sentence_font.color = color; dirty_rect.fill(screen_width, screen_height); flush(refreshMode()); }
void PonscripterLabel::executeSystemLoad() { SaveFileInfo save_file_info; current_font = &menu_font; if (event_mode & WAIT_BUTTON_MODE) { if (current_button_state.button == 0) return; event_mode = IDLE_EVENT_MODE; if (current_button_state.button > 0) { searchSaveFile(save_file_info, current_button_state.button); if (!save_file_info.valid) { event_mode = WAIT_BUTTON_MODE; refreshMouseOverButton(); return; } deleteButtons(); yesno_selected_file_no = current_button_state.button; yesno_caller = SYSTEM_LOAD; system_menu_mode = SYSTEM_YESNO; advancePhase(); } else { deleteButtons(); leaveSystemCall(); } } else { system_menu_mode = SYSTEM_LOAD; createSaveLoadMenu(false); } }
void ONScripter::executeSystemMenu() { current_font = &menu_font; if ( menuselectvoice_file_name[MENUSELECTVOICE_OPEN] ) playSound(menuselectvoice_file_name[MENUSELECTVOICE_OPEN], SOUND_CHUNK, false, MIX_WAVE_CHANNEL); text_info.fill( 0, 0, 0, 0 ); flush( refreshMode() ); menu_font.num_xy[0] = rmenu_link_width; menu_font.num_xy[1] = rmenu_link_num; menu_font.top_xy[0] = (screen_width * screen_ratio2 / screen_ratio1 - menu_font.num_xy[0] * menu_font.pitch_xy[0]) / 2; menu_font.top_xy[1] = (screen_height * screen_ratio2 / screen_ratio1 - menu_font.num_xy[1] * menu_font.pitch_xy[1]) / 2; menu_font.setXY( (menu_font.num_xy[0] - rmenu_link_width) / 2, (menu_font.num_xy[1] - rmenu_link_num) / 2 ); RMenuLink *link = root_rmenu_link.next; int counter = 1; while( link ){ ButtonLink *button = getSelectableSentence( link->label, &menu_font, false ); root_button_link.insert( button ); button->no = counter++; link = link->next; flush( refreshMode() ); } flushEvent(); refreshMouseOverButton(); event_mode = WAIT_BUTTON_MODE; do waitEventSub(-1); while (current_button_state.button == 0); deleteButtonLink(); if ( current_button_state.button == -1 ){ if ( menuselectvoice_file_name[MENUSELECTVOICE_CANCEL] ) playSound(menuselectvoice_file_name[MENUSELECTVOICE_CANCEL], SOUND_CHUNK, false, MIX_WAVE_CHANNEL); leaveSystemCall(); return; } if ( menuselectvoice_file_name[MENUSELECTVOICE_CLICK] ) playSound(menuselectvoice_file_name[MENUSELECTVOICE_CLICK], SOUND_CHUNK, false, MIX_WAVE_CHANNEL); link = root_rmenu_link.next; counter = 1; while ( link ){ if ( current_button_state.button == counter++ ){ system_menu_mode = link->system_call_no; break; } link = link->next; } }
void ONScripter::leaveSystemCall( bool restore_flag ) { current_font = &sentence_font; display_mode = shelter_display_mode; if ( restore_flag ){ current_page = cached_page; restoreTextBuffer(); root_button_link.next = shelter_button_link; root_select_link.next = shelter_select_link; event_mode = shelter_event_mode; draw_cursor_flag = shelter_draw_cursor_flag; if ( event_mode & WAIT_BUTTON_MODE ){ int x = shelter_mouse_state.x * screen_device_width / screen_width; int y = shelter_mouse_state.y * screen_device_width / screen_width; SDL_WarpMouse(x, y); } } dirty_rect.fill( screen_width, screen_height ); flush( refreshMode() ); //printf("leaveSystemCall %d %d\n",event_mode, clickstr_state); refreshMouseOverButton(); system_menu_mode = SYSTEM_NULL; }
void ONScripterLabel::leaveSystemCall( bool restore_flag ) { bool tmp = txtbtn_show; txtbtn_show = false; current_font = &sentence_font; key_pressed_flag = false; current_button_state.reset(); if ( restore_flag ){ current_page = cached_page; text_info.deepcopy(shelter_text_info); shelter_text_info.reset(); root_button_link.next = shelter_button_link; root_select_link.next = shelter_select_link; exbtn_d_button_link = exbtn_d_shelter_button_link; #if 0 //broken atm //use windoweffect on a return from windowerase systemcall if (system_menu_mode == SYSTEM_WINDOWERASE) { display_mode = shelter_display_mode; refreshSurface( effect_dst_surface, NULL, refreshMode() ); system_menu_mode = SYSTEM_NULL; if (!setEffect(&window_effect, false, true)) { while(doEffect(&window_effect, false)); } } #endif erasetextbtnCommand(); event_mode = shelter_event_mode; draw_cursor_flag = shelter_draw_cursor_flag; if ( event_mode & WAIT_BUTTON_MODE ){ SDL_WarpMouse( shelter_mouse_state.x, shelter_mouse_state.y ); } } display_mode = shelter_display_mode; dirty_rect.fill( screen_width, screen_height ); flush( refreshMode() ); //printf("leaveSystemCall %d %d\n",event_mode, clickstr_state); refreshMouseOverButton(); txtbtn_show = tmp; system_menu_mode = SYSTEM_NULL; }
void PonscripterLabel::executeSystemYesNo() { current_font = &menu_font; if (event_mode & WAIT_BUTTON_MODE) { if (current_button_state.button == 0) return; event_mode = IDLE_EVENT_MODE; deleteButtons(); if (current_button_state.button == 1) { // yes is selected playSound(menuselectvoice_file_name[MENUSELECTVOICE_YES], SOUND_WAVE | SOUND_OGG, false, MIX_WAVE_CHANNEL); if (yesno_caller == SYSTEM_SAVE) { saveSaveFile(yesno_selected_file_no); leaveSystemCall(); } else if (yesno_caller == SYSTEM_LOAD) { current_font = &sentence_font; if (loadSaveFile(yesno_selected_file_no)) { system_menu_mode = yesno_caller; advancePhase(); return; } leaveSystemCall(false); saveon_flag = true; internal_saveon_flag = true; text_on_flag = false; indent_offset = 0; line_enter_status = 0; string_buffer_offset = 0; string_buffer_restore = -1; break_flag = false; if (loadgosub_label) gosubReal(loadgosub_label, script_h.getCurrent()); readToken(); } else if (yesno_caller == SYSTEM_RESET) { resetCommand("reset"); readToken(); event_mode = IDLE_EVENT_MODE; leaveSystemCall(false); } else if (yesno_caller == SYSTEM_END) { endCommand("end"); } } else { playSound(menuselectvoice_file_name[MENUSELECTVOICE_NO], SOUND_WAVE | SOUND_OGG, false, MIX_WAVE_CHANNEL); system_menu_mode = yesno_caller & 0xf; if (yesno_caller == SYSTEM_RESET) leaveSystemCall(); advancePhase(); } } else { text_info.fill(0, 0, 0, 0); pstring name; if (yesno_caller == SYSTEM_SAVE) { SaveFileInfo save_file_info; searchSaveFile(save_file_info, yesno_selected_file_no); processMessage(name, locale.message_save_confirm, save_file_info); } else if (yesno_caller == SYSTEM_LOAD) { SaveFileInfo save_file_info; searchSaveFile(save_file_info, yesno_selected_file_no); processMessage(name, locale.message_load_confirm, save_file_info); } else if (yesno_caller == SYSTEM_RESET) name = locale.message_reset_confirm; else if (yesno_caller == SYSTEM_END) name = locale.message_end_confirm; current_font->area_x = int (ceil(current_font->StringAdvance(name))); current_font->area_y = current_font->line_top(4); current_font->top_x = (screen_width * screen_ratio2 / screen_ratio1 - current_font->area_x) / 2; current_font->top_y = (screen_height * screen_ratio2 / screen_ratio1 - current_font->area_y) / 2; current_font->SetXY(0, 0); buttons[0] = getSelectableSentence(name, current_font, false); flush(refreshMode()); float yes_len = current_font->StringAdvance(locale.message_yes), no_len = current_font->StringAdvance(locale.message_no); name = locale.message_yes; current_font->SetXY(float (current_font->area_x) / 4 - yes_len / 2, current_font->line_top(2)); buttons[1] = getSelectableSentence(name, current_font, false); name = locale.message_no; current_font->SetXY(float (current_font->area_x) * 3 / 4 - no_len / 2, current_font->line_top(2)); buttons[2] = getSelectableSentence(name, current_font, false); flush(refreshMode()); event_mode = WAIT_BUTTON_MODE; refreshMouseOverButton(); } }
void PonscripterLabel::createSaveLoadMenu(bool is_save) { SaveFileInfo save_file_info; text_info.fill(0, 0, 0, 0); // Set up formatting details for saved games. const float sw = float (screen_width * screen_ratio2) / float (screen_ratio1); const int spacing = 16; pstring buffer, saveless_line; float linew, lw, ew, line_offs_x, item_x; float *label_inds = NULL, *save_inds = NULL; int num_label_ind = 0, num_save_ind = 0; { float max_lw = 0, max_ew = 0; for (unsigned int i = 1; i <= num_save_file; i++) { searchSaveFile(save_file_info, i); lw = processMessage(buffer, locale.message_save_label, save_file_info, &label_inds, &num_label_ind); if (max_lw < lw) max_lw = lw; if (save_file_info.valid) { ew = processMessage(buffer, locale.message_save_exist, save_file_info, &save_inds, &num_save_ind); if (max_ew < ew) max_ew = ew; } } pstring tm = file_encoding->TextMarker(); if (save_inds == NULL) { saveless_line = tm; for (int j=0; j<24; j++) saveless_line += locale.message_empty; max_ew = current_font->StringAdvance(saveless_line); } else { // Avoid possible ugliness of ligatures pstring long_empty; for (int j=0; j<6; j++) long_empty += locale.message_empty; saveless_line = tm; while (current_font->StringAdvance(saveless_line) < max_ew) saveless_line += long_empty; if (max_ew < current_font->StringAdvance(saveless_line)) max_ew = current_font->StringAdvance(saveless_line); } item_x = max_lw + spacing; linew = ceil(item_x + max_ew + spacing); line_offs_x = (sw - linew) / 2; } // Set up the menu. current_font->area_x = int(linew); current_font->area_y = current_font->line_top(num_save_file + 2); current_font->top_x = int(line_offs_x); current_font->top_y = (screen_height * screen_ratio2 / screen_ratio1 - current_font->area_y) / 2; pstring& menu_name = is_save ? save_menu_name : load_menu_name; current_font->SetXY((linew - current_font->StringAdvance(menu_name)) / 2, 0); buttons[0] = getSelectableSentence(menu_name, current_font, false); current_font->newLine(); flush(refreshMode()); bool disable = false; for (unsigned int i = 1; i <= num_save_file; i++) { searchSaveFile(save_file_info, i); lw = processMessage(buffer, locale.message_save_label, save_file_info, &label_inds, &num_label_ind, false); current_font->SetXY(0); pstring tmp = ""; if (script_h.is_ponscripter) tmp.format("~x%d~", int(item_x)); else { int num_sp = ceil((spacing + 0.0) / current_font->StringAdvance(locale.message_space)); for (int j=0; j<num_sp; j++) tmp += locale.message_space; } buffer += tmp; if (save_file_info.valid) { processMessage(tmp, locale.message_save_exist, save_file_info, &save_inds, &num_save_ind, false); disable = false; } else { tmp = saveless_line; disable = !is_save; } buffer += tmp; buttons[i] = getSelectableSentence(buffer, current_font, false, disable); flush(refreshMode()); } if (label_inds) delete[] label_inds; if (save_inds) delete[] save_inds; event_mode = WAIT_BUTTON_MODE; refreshMouseOverButton(); }
void PonscripterLabel::executeSystemMenu() { int counter = 1; current_font = &menu_font; if (event_mode & WAIT_BUTTON_MODE) { if (current_button_state.button == 0) return; event_mode = IDLE_EVENT_MODE; deleteButtons(); if (current_button_state.button == -1) { playSound(menuselectvoice_file_name[MENUSELECTVOICE_CANCEL], SOUND_WAVE | SOUND_OGG, false, MIX_WAVE_CHANNEL); leaveSystemCall(); return; } playSound(menuselectvoice_file_name[MENUSELECTVOICE_CLICK], SOUND_WAVE | SOUND_OGG, false, MIX_WAVE_CHANNEL); for (RMenuElt::iterator it = rmenu.begin(); it != rmenu.end(); ++it) { if (current_button_state.button == counter++) { system_menu_mode = it->system_call_no; break; } } advancePhase(); } else { playSound(menuselectvoice_file_name[MENUSELECTVOICE_OPEN], SOUND_WAVE | SOUND_OGG, false, MIX_WAVE_CHANNEL); system_menu_mode = SYSTEM_MENU; yesno_caller = SYSTEM_MENU; text_info.fill(0, 0, 0, 0); flush(refreshMode()); current_font->area_x = screen_width * screen_ratio2 / screen_ratio1; current_font->area_y = current_font->line_top(rmenu.size()); current_font->top_x = 0; current_font->top_y = (screen_height * screen_ratio2 / screen_ratio1 - current_font->area_y) / 2; current_font->SetXY(0, 0); for (RMenuElt::iterator it = rmenu.begin(); it != rmenu.end(); ++it) { const float sw = float (screen_width * screen_ratio2) / float (screen_ratio1); current_font->SetXY((sw - current_font->StringAdvance(it->label)) / 2); buttons[counter++] = getSelectableSentence(it->label, current_font, false); flush(refreshMode()); } flushEvent(); event_mode = WAIT_BUTTON_MODE; refreshMouseOverButton(); } }
void ONScripter::executeSystemLookback() { int i; uchar3 color; current_font = &sentence_font; current_page = current_page->previous; if ( current_page->text_count == 0 ){ if ( lookback_sp[0] >= 0 ) sprite_info[ lookback_sp[0] ].visible = false; if ( lookback_sp[1] >= 0 ) sprite_info[ lookback_sp[1] ].visible = false; leaveSystemCall(); return; } while(1){ setupLookbackButton(); refreshMouseOverButton(); dirty_rect.fill( screen_width, screen_height ); flush( refreshMode() & ~REFRESH_TEXT_MODE); for ( i=0 ; i<3 ; i++ ){ color[i] = sentence_font.color[i]; sentence_font.color[i] = lookback_color[i]; } restoreTextBuffer(accumulation_surface); for ( i=0 ; i<3 ; i++ ) sentence_font.color[i] = color[i]; flush( REFRESH_NONE_MODE ); event_mode = WAIT_BUTTON_MODE; waitEventSub(-1); if ( current_button_state.button == 0 || ( current_page == start_page && current_button_state.button == -2 ) ){ continue; } if ( current_button_state.button == -1 || ( current_button_state.button == -3 && current_page->next == cached_page ) || current_button_state.button <= -4 ) { event_mode = IDLE_EVENT_MODE; deleteButtonLink(); if ( lookback_sp[0] >= 0 ) sprite_info[ lookback_sp[0] ].visible = false; if ( lookback_sp[1] >= 0 ) sprite_info[ lookback_sp[1] ].visible = false; leaveSystemCall(); return; } if ( current_button_state.button == 1 || current_button_state.button == -2 ){ current_page = current_page->previous; } else current_page = current_page->next; } }
bool ONScripter::executeSystemYesNo( int caller, int file_no ) { current_font = &menu_font; text_info.fill( 0, 0, 0, 0 ); dirty_rect.fill( screen_width, screen_height ); char name[64] = {'\0'}; if ( caller == SYSTEM_SAVE ){ SaveFileInfo save_file_info; searchSaveFile( save_file_info, file_no ); sprintf( name, MESSAGE_SAVE_CONFIRM, save_item_name, save_file_info.sjis_no ); } else if ( caller == SYSTEM_LOAD ){ SaveFileInfo save_file_info; searchSaveFile( save_file_info, file_no ); sprintf( name, MESSAGE_LOAD_CONFIRM, save_item_name, save_file_info.sjis_no ); } else if ( caller == SYSTEM_RESET ) strcpy( name, MESSAGE_RESET_CONFIRM ); else if ( caller == SYSTEM_END ) strcpy( name, MESSAGE_END_CONFIRM ); menu_font.num_xy[0] = strlen(name)/2; menu_font.num_xy[1] = 3; menu_font.top_xy[0] = (screen_width * screen_ratio2 / screen_ratio1 - menu_font.num_xy[0] * menu_font.pitch_xy[0]) / 2; menu_font.top_xy[1] = (screen_height * screen_ratio2 / screen_ratio1 - menu_font.num_xy[1] * menu_font.pitch_xy[1]) / 2; menu_font.setXY(0, 0); uchar3 color = {0xff, 0xff, 0xff}; drawString( name, color, &menu_font, true, accumulation_surface, NULL, &text_info ); flush( refreshMode() ); int offset1 = strlen(name)/5; int offset2 = strlen(name)/2 - offset1; strcpy( name, MESSAGE_YES ); menu_font.setXY(offset1-2, 2); ButtonLink *button = getSelectableSentence( name, &menu_font, false ); root_button_link.insert( button ); button->no = 1; strcpy( name, MESSAGE_NO ); menu_font.setXY(offset2, 2); button = getSelectableSentence( name, &menu_font, false ); root_button_link.insert( button ); button->no = 2; flush( refreshMode() ); refreshMouseOverButton(); event_mode = WAIT_BUTTON_MODE; do waitEventSub(-1); while (current_button_state.button == 0); deleteButtonLink(); if ( current_button_state.button == 1 ){ // yes is selected if ( menuselectvoice_file_name[MENUSELECTVOICE_YES] ) playSound(menuselectvoice_file_name[MENUSELECTVOICE_YES], SOUND_CHUNK, false, MIX_WAVE_CHANNEL); return true; } else{ if ( menuselectvoice_file_name[MENUSELECTVOICE_NO] ) playSound(menuselectvoice_file_name[MENUSELECTVOICE_NO], SOUND_CHUNK, false, MIX_WAVE_CHANNEL); return false; } }
void ONScripter::executeSystemSave() { current_font = &menu_font; text_info.fill( 0, 0, 0, 0 ); menu_font.num_xy[0] = (strlen(save_item_name)+1)/2+2+13; menu_font.num_xy[1] = num_save_file+2; menu_font.top_xy[0] = (screen_width * screen_ratio2 / screen_ratio1 - menu_font.num_xy[0] * menu_font.pitch_xy[0]) / 2; menu_font.top_xy[1] = (screen_height * screen_ratio2 / screen_ratio1 - menu_font.num_xy[1] * menu_font.pitch_xy[1]) / 2; menu_font.setXY((menu_font.num_xy[0] - strlen( save_menu_name ) / 2 ) / 2, 0); uchar3 color = {0xff, 0xff, 0xff}; drawString( save_menu_name, color, &menu_font, true, accumulation_surface, NULL, &text_info ); menu_font.newLine(); menu_font.newLine(); flush( refreshMode() ); bool nofile_flag; char *buffer = new char[ strlen( save_item_name ) + 31 + 1 ]; for ( unsigned int i=1 ; i<=num_save_file ; i++ ){ SaveFileInfo save_file_info; searchSaveFile( save_file_info, i ); menu_font.setXY( (menu_font.num_xy[0] - (strlen( save_item_name ) / 2 + 15) ) / 2 ); if ( save_file_info.valid ){ sprintf( buffer, MESSAGE_SAVE_EXIST, save_item_name, save_file_info.sjis_no, save_file_info.sjis_month, save_file_info.sjis_day, save_file_info.sjis_hour, save_file_info.sjis_minute ); nofile_flag = false; } else{ sprintf( buffer, MESSAGE_SAVE_EMPTY, save_item_name, save_file_info.sjis_no ); nofile_flag = true; } ButtonLink *button = getSelectableSentence( buffer, &menu_font, false, nofile_flag ); root_button_link.insert( button ); button->no = i; flush( refreshMode() ); } delete[] buffer; refreshMouseOverButton(); event_mode = WAIT_BUTTON_MODE; do waitEventSub(-1); while (current_button_state.button == 0); deleteButtonLink(); if ( current_button_state.button > 0 ){ int file_no = current_button_state.button; if (executeSystemYesNo( SYSTEM_SAVE, file_no )){ if (saveon_flag && internal_saveon_flag) saveSaveFile(-1); saveSaveFile( file_no ); leaveSystemCall(); } return; } leaveSystemCall(); }
bool ONScripter::executeSystemLoad() { current_font = &menu_font; text_info.fill( 0, 0, 0, 0 ); menu_font.num_xy[0] = (strlen(save_item_name)+1)/2+2+13; menu_font.num_xy[1] = num_save_file+2; menu_font.top_xy[0] = (screen_width * screen_ratio2 / screen_ratio1 - menu_font.num_xy[0] * menu_font.pitch_xy[0]) / 2; menu_font.top_xy[1] = (screen_height * screen_ratio2 / screen_ratio1 - menu_font.num_xy[1] * menu_font.pitch_xy[1]) / 2; menu_font.setXY( (menu_font.num_xy[0] - strlen( load_menu_name ) / 2) / 2, 0 ); uchar3 color = {0xff, 0xff, 0xff}; drawString( load_menu_name, color, &menu_font, true, accumulation_surface, NULL, &text_info ); menu_font.newLine(); menu_font.newLine(); flush( refreshMode() ); bool nofile_flag; char *buffer = new char[ strlen( save_item_name ) + 31 + 1 ]; SaveFileInfo save_file_info; for ( unsigned int i=1 ; i<=num_save_file ; i++ ){ searchSaveFile( save_file_info, i ); menu_font.setXY( (menu_font.num_xy[0] - (strlen( save_item_name ) / 2 + 15) ) / 2 ); if ( save_file_info.valid ){ sprintf( buffer, MESSAGE_SAVE_EXIST, save_item_name, save_file_info.sjis_no, save_file_info.sjis_month, save_file_info.sjis_day, save_file_info.sjis_hour, save_file_info.sjis_minute ); nofile_flag = false; } else{ sprintf( buffer, MESSAGE_SAVE_EMPTY, save_item_name, save_file_info.sjis_no ); nofile_flag = true; } ButtonLink *button = getSelectableSentence( buffer, &menu_font, false, nofile_flag ); root_button_link.insert( button ); button->no = i; flush( refreshMode() ); } delete[] buffer; refreshMouseOverButton(); event_mode = WAIT_BUTTON_MODE; int file_no = 0; while(1){ waitEventSub(-1); if ( current_button_state.button > 0 ){ file_no = current_button_state.button; searchSaveFile( save_file_info, file_no ); if ( !save_file_info.valid ) continue; } if (current_button_state.button != 0) break; } if ( current_button_state.button > 0 ){ deleteButtonLink(); if (executeSystemYesNo( SYSTEM_LOAD, file_no )){ current_font = &sentence_font; system_menu_mode = NULL; // for fadeout in mp3stopCommand() if ( loadSaveFile( file_no ) ) return false; leaveSystemCall( false ); refreshSurface(backup_surface, NULL, REFRESH_NORMAL_MODE); saveon_flag = true; internal_saveon_flag = true; text_on_flag = false; indent_offset = 0; line_enter_status = 0; page_enter_status = 0; string_buffer_offset = 0; break_flag = false; flushEvent(); if (loadgosub_label) gosubReal( loadgosub_label, script_h.getCurrent() ); return true; } return false; } deleteButtonLink(); leaveSystemCall(); return false; }
bool ONScripterLabel::executeSystemYesNo( int caller, int file_no ) { current_font = &menu_font; text_info.fill( 0, 0, 0, 0 ); dirty_rect.fill( screen_width, screen_height ); char name[64] = {'\0'}; if ( caller == SYSTEM_SAVE ){ SaveFileInfo save_file_info; searchSaveFile( save_file_info, file_no ); sprintf( name, getMessageString(MESSAGE_SAVE_CONFIRM), save_item_name, save_file_info.sjis_no ); } else if ( caller == SYSTEM_LOAD ){ SaveFileInfo save_file_info; searchSaveFile( save_file_info, file_no ); sprintf( name, getMessageString(MESSAGE_LOAD_CONFIRM), save_item_name, save_file_info.sjis_no ); } else if ( caller == SYSTEM_RESET ) strcpy( name, getMessageString(MESSAGE_RESET_CONFIRM) ); else if ( caller == SYSTEM_END ) strcpy( name, getMessageString(MESSAGE_END_CONFIRM) ); menu_font.num_xy[0] = strlen(name)/2; menu_font.num_xy[1] = 3; menu_font.top_xy[0] = (ContractPos(screen_width) - menu_font.num_xy[0] * menu_font.pitch_xy[0]) / 2; menu_font.top_xy[1] = (ContractPos(screen_height) - menu_font.num_xy[1] * menu_font.pitch_xy[1]) / 2; menu_font.setXY(0, 0); //Mion: fixed the menu title bug noted in the past by Seung Park: // the menu title must be drawn close to last during refresh, // not in the textwindow, since there could be sprites above the // window if windowback is used. if (system_menu_title){ dirty_rect.add( system_menu_title->pos ); delete system_menu_title; system_menu_title = NULL; } system_menu_title = getSentence( name, &menu_font, 1, false ); flush( refreshMode() ); int offset1 = strlen(name)/5; int offset2 = strlen(name)/2 - offset1; strcpy( name, getMessageString(MESSAGE_YES) ); menu_font.setXY(offset1-2, 2); ButtonLink *button = getSelectableSentence( name, &menu_font, false ); root_button_link.insert( button ); button->no = 1; strcpy( name, getMessageString(MESSAGE_NO) ); menu_font.setXY(offset2, 2); button = getSelectableSentence( name, &menu_font, false ); root_button_link.insert( button ); button->no = 2; flush( refreshMode() ); refreshMouseOverButton(); event_mode = WAIT_BUTTON_MODE; do waitEventSub(-1); while (current_button_state.button == 0); deleteButtonLink(); if (system_menu_title){ dirty_rect.add( system_menu_title->pos ); delete system_menu_title; system_menu_title = NULL; } if ( current_button_state.button == 1 ){ // yes is selected if ( menuselectvoice_file_name[MENUSELECTVOICE_YES] ) playSound(menuselectvoice_file_name[MENUSELECTVOICE_YES], SOUND_WAVE|SOUND_OGG, false, MIX_WAVE_CHANNEL); return true; } else{ if ( menuselectvoice_file_name[MENUSELECTVOICE_NO] ) playSound(menuselectvoice_file_name[MENUSELECTVOICE_NO], SOUND_WAVE|SOUND_OGG, false, MIX_WAVE_CHANNEL); return false; } }
void ONScripterLabel::executeSystemSave() { current_font = &menu_font; text_info.fill( 0, 0, 0, 0 ); menu_font.num_xy[0] = (strlen(save_item_name)+1)/2+2+13; menu_font.num_xy[1] = num_save_file+2; menu_font.top_xy[0] = (ContractPos(screen_width) - menu_font.num_xy[0] * menu_font.pitch_xy[0]) / 2; menu_font.top_xy[1] = (ContractPos(screen_height) - menu_font.num_xy[1] * menu_font.pitch_xy[1]) / 2; menu_font.setXY((menu_font.num_xy[0] - (strlen( save_menu_name )+1) / 2 ) / 2, 0); //Mion: fixed the menu title bug noted in the past by Seung Park: // the menu title must be drawn close to last during refresh, // not in the textwindow, since there could be sprites above the // window if windowback is used. if (system_menu_title){ dirty_rect.add( system_menu_title->pos ); delete system_menu_title; system_menu_title = NULL; } system_menu_title = getSentence( save_menu_name, &menu_font, 1, false ); menu_font.newLine(); flush( refreshMode() ); bool nofile_flag; int slen = strlen(save_item_name); char *buffer = new char[ slen + (slen % 2) + 30 + 3 ]; for ( unsigned int i=1 ; i<=num_save_file ; i++ ){ SaveFileInfo save_file_info; searchSaveFile( save_file_info, i ); menu_font.setXY( (menu_font.num_xy[0] - ((strlen( save_item_name )+1) / 2 + 15) ) / 2 ); if ( save_file_info.valid ){ sprintf( buffer, getMessageString(MESSAGE_SAVE_EXIST), save_item_name, save_file_info.sjis_no, save_file_info.sjis_month, save_file_info.sjis_day, save_file_info.sjis_hour, save_file_info.sjis_minute ); nofile_flag = false; } else{ sprintf( buffer, getMessageString(MESSAGE_SAVE_EMPTY), save_item_name, save_file_info.sjis_no ); nofile_flag = true; } ButtonLink *button = getSelectableSentence( buffer, &menu_font, false, nofile_flag ); root_button_link.insert( button ); button->no = i; flush( refreshMode() ); } delete[] buffer; refreshMouseOverButton(); event_mode = WAIT_BUTTON_MODE; do waitEventSub(-1); while (current_button_state.button == 0); deleteButtonLink(); if (system_menu_title){ dirty_rect.add( system_menu_title->pos ); delete system_menu_title; system_menu_title = NULL; } if ( current_button_state.button > 0 ){ int file_no = current_button_state.button; if (executeSystemYesNo( SYSTEM_SAVE, file_no )){ saveSaveFile( file_no ); leaveSystemCall(); } return; } leaveSystemCall(); }