累计送礼: 0 个 累计收礼: 1 个 TA的每日心情 开心 2026-7-12 04:10
签到天数: 209 天
连续签到: 2 天
[LV.7]常住居民III
管理员
VIP
7
卡币
58883
OK点
16
推广点
0
同能卷
50
积分 68848
Hi everyone,
Remember the Neo Save System from rpg maker vx that greatly improved the save menu interface? I did not find anything looking like this for VX ace, so I decided to code it.
Using Yanfly Save Manager to have a better interface and Zeus81 Bitmap Export, it adds a picture of the map that is displayed in the save/load menu.
For space reasons, I removed some data from Yanfly Save Manager and kept only the gold, the time, the name of the location and the characters like this:
(text here is in french but all the vocab is defined by your system or Yanfly Save Manager)
How to use
This script is not a standalone, it requires both:
-
Yanfly Ace Save Engine
-
Zeus81 Bitmap Export
Put the script after the two required scripts and before main.
You may change the constant in module NeoSave to change the height of the screenshot displayed or the color or the size of the border around it.
Spoiler: Latest version of the script
Ruby: #============================================================================== # Neo Save System for VX ace v2 # Recreates the Neo Save System on VX ace using Yanfly Save Manager and Zeus Bitmap Export #------------------------------------------------------------------------------ # Author: Timtrack # date: 11/09/2025 # Requires: # -Ace Save Engine 1.03 by Yanfly # -Bitmap Export v5.4 by Zeus81 #============================================================================== $imported = {} if $imported.nil? raise "Neo save requires Ace Save Engine by Yanfly!" unless $imported["YEA-SaveEngine"] raise "Neo save requires Zeus Bitmap Export!" unless $imported[:Zeus_Bitmap_Export] $imported["TIM-NeoSave"] = true #============================================================================== # Version History #------------------------------------------------------------------------------ # 24/02/2025: Original release # 30/04/2025: v1.1 to access the take picture method from other scripts # 09/05/2025: v1.2 to have a black border around the screenshot # 11/09/2025: v2 removes the picture file and saves it directly into the # savefile header instead (makes savefiles heavier) #============================================================================== # Description #------------------------------------------------------------------------------ # This script will display a screenshot of the map the characters are in # the save/load menu. # # The display will look like this: # ------------------------------------------------ # Gold Playtime # # Picture # # # Location name # Party members # Variables -> hidden deppending on the size of the picture #============================================================================== # Installation: put it after the required scripts and before main # Compatibility: with almost anything except scripts modifying file save display #============================================================================== # Terms of use: free for commercial and non-commercial project, # credit is not mandatory but nice if you do #============================================================================== module NeoSave SCREENSHOT_HEIGHT = 140#200 MAP_BORDER_COLOR = Color.new(0,0,0,200) MAP_BORDER_SIZE = 2 #in pixels end #NeoSave #============================================================================== # DataManager -> saves the screenshot into the savefile #============================================================================== module DataManager #-------------------------------------------------------------------------- # alias method: self.make_save_header #-------------------------------------------------------------------------- class <<self; alias neo_make_save_header make_save_header; end def self.make_save_header header = neo_make_save_header header[:neo_save_screenshot] = Scene_Map.temp_bit_map header end end # DataManager #============================================================================== # Window_FileStatus #============================================================================== class Window_FileStatus < Window_Base #-------------------------------------------------------------------------- # overwrite method: draw_save_contents #-------------------------------------------------------------------------- def draw_save_contents #draw_save_slot(4, 0, contents.width/2-8) draw_save_playtime(contents.width/2+4, 0, contents.width/2-8) #draw_save_total_saves(4, line_height, contents.width/2-8) draw_save_gold(4, 0, contents.width/2-8) draw_map_picture(4,line_height, contents.width-8) dy = NeoSave::SCREENSHOT_HEIGHT + line_height draw_save_location(4, dy, contents.width-8) #line_height*2 draw_save_characters(0, dy+line_height*3 + line_height/3) draw_save_column1(16, dy+line_height*5, contents.width/2-48) draw_save_column2(contents.width/2+16, dy+line_height*5, contents.width/2-48) end #-------------------------------------------------------------------------- # new method: draw_map_picture #-------------------------------------------------------------------------- def draw_map_picture(dx, dy, dw) bitmap = get_screenshot_bitmap return unless bitmap shift_x = (bitmap.width - dw)/2 shift_y = (bitmap.height - NeoSave::SCREENSHOT_HEIGHT)/2 inside_rect = Rect.new(dx,dy,dw,NeoSave::SCREENSHOT_HEIGHT) contents.fill_rect(inside_rect, NeoSave::MAP_BORDER_COLOR) d = NeoSave::MAP_BORDER_SIZE rect = Rect.new(shift_x,shift_y,dw-2*d,NeoSave::SCREENSHOT_HEIGHT-2*d) contents.blt(dx+d, dy+d, bitmap, rect, 255) bitmap.dispose end #-------------------------------------------------------------------------- # new method: get_screenshot_bitmap #-------------------------------------------------------------------------- def get_screenshot_bitmap @header[:neo_save_screenshot] end end #Window_FileStatus #============================================================================== # Scene_Map #============================================================================== class Scene_Map < Scene_Base @@tmp_bitmap = nil #-------------------------------------------------------------------------- # alias method: start #-------------------------------------------------------------------------- alias neo_save_map_start start def start if @@tmp_bitmap @@tmp_bitmap.dispose @@tmp_bitmap = nil end neo_save_map_start end #-------------------------------------------------------------------------- # alias method: terminate #-------------------------------------------------------------------------- alias neo_save_map_terminate terminate def terminate Scene_Map.take_picture neo_save_map_terminate end #-------------------------------------------------------------------------- # new class method: temp_bit_map #-------------------------------------------------------------------------- def self.temp_bit_map return @@tmp_bitmap end #-------------------------------------------------------------------------- # new class method: take_picture #-------------------------------------------------------------------------- def self.take_picture @@tmp_bitmap.dispose unless @@tmp_bitmap.nil? @@tmp_bitmap = Graphics.snap_to_bitmap end end #Scene_Map 复制代码
Spoiler: Older version: v1.2
This previous version saved the screenshot as a .png file, this behavior is no longer present in subsequent versions.
Ruby: #============================================================================== # Neo Save System for VX ace v1.2 # Recreates the Neo Save System on VX ace using Yanfly Save Manager and Zeus Bitmap Export #------------------------------------------------------------------------------ # Author: Timtrack # date: 24/02/2025 # modified the 30/04/2025 # Requires: # -Ace Save Engine 1.03 by Yanfly # -Bitmap Export v5.4 by Zeus81 #============================================================================== $imported = {} if $imported.nil? raise "Neo save requires Ace Save Engine by Yanfly!" unless $imported["YEA-SaveEngine"] raise "Neo save requires Zeus Bitmap Export!" unless $imported[:Zeus_Bitmap_Export] $imported["TIM-NeoSave"] = true #============================================================================== # Description #------------------------------------------------------------------------------ # This script will display a screenshot of the map the characters are in # the save/load menu. # # The display will look like this: # ------------------------------------------------ # Gold Playtime # # Picture # # # Location name # Party members # Variables -> hidden deppending on the size of the picture #============================================================================== # Installation: put it after the required scripts and before main # Compatibility: with almost anything except scripts modifying file save display #============================================================================== # Terms of use: free for commercial and non-commercial project, # credit is not mandatory but nice if you do #============================================================================== module NeoSave Picture_dir = "" #fill this if you use a subdir Picture_location = "save_pic_%02d.png" #%02d is the id of the save file SCREENSHOT_HEIGHT = 140 MAP_BORDER_COLOR = Color.new(0,0,0,200) MAP_BORDER_SIZE = 2 #in pixels def self.get_picture_name(file_index) return sprintf(Picture_location,file_index+1) end end #NeoSave #============================================================================== # Window_FileStatus #============================================================================== class Window_FileStatus < Window_Base #-------------------------------------------------------------------------- # override method: draw_save_contents #-------------------------------------------------------------------------- def draw_save_contents #draw_save_slot(4, 0, contents.width/2-8) draw_save_playtime(contents.width/2+4, 0, contents.width/2-8) #draw_save_total_saves(4, line_height, contents.width/2-8) draw_save_gold(4, 0, contents.width/2-8) draw_map_picture(4,line_height, contents.width-8) dy = NeoSave::SCREENSHOT_HEIGHT + line_height draw_save_location(4, dy, contents.width-8) #line_height*2 draw_save_characters(0, dy+line_height*3 + line_height/3) draw_save_column1(16, dy+line_height*5, contents.width/2-48) draw_save_column2(contents.width/2+16, dy+line_height*5, contents.width/2-48) end #-------------------------------------------------------------------------- # new method: draw_map_picture #-------------------------------------------------------------------------- def draw_map_picture(dx, dy, dw) bitmap = Cache.load_bitmap(NeoSave::Picture_dir, NeoSave.get_picture_name(@current_index)) rescue return shift_x = (bitmap.width - dw)/2 shift_y = (bitmap.height - NeoSave::SCREENSHOT_HEIGHT)/2 inside_rect = Rect.new(dx,dy,dw,NeoSave::SCREENSHOT_HEIGHT) contents.fill_rect(inside_rect, NeoSave::MAP_BORDER_COLOR) d = NeoSave::MAP_BORDER_SIZE rect = Rect.new(shift_x,shift_y,dw-2*d,NeoSave::SCREENSHOT_HEIGHT-2*d) contents.blt(dx+d, dy+d, bitmap, rect, 255) bitmap.dispose end end #Window_FileStatus #============================================================================== # Scene_File #============================================================================== class Scene_File < Scene_MenuBase #-------------------------------------------------------------------------- # alias method: on_save_success #-------------------------------------------------------------------------- alias neo_on_save_success on_save_success def on_save_success save_map_picture neo_on_save_success end #-------------------------------------------------------------------------- # alias method: on_delete_success #-------------------------------------------------------------------------- alias neo_on_delete_success on_delete_success def on_delete_success File.delete(NeoSave::Picture_dir + NeoSave.get_picture_name(@file_window.index)) rescue nil neo_on_delete_success end #-------------------------------------------------------------------------- # new method: save_map_picture #-------------------------------------------------------------------------- def save_map_picture Scene_Map.temp_bit_map.export(NeoSave::Picture_dir + NeoSave.get_picture_name(@file_window.index)) end end #Scene_File #============================================================================== # Scene_Map #============================================================================== class Scene_Map < Scene_Base @@tmp_bitmap = nil #-------------------------------------------------------------------------- # alias method: start #-------------------------------------------------------------------------- alias neo_save_map_start start def start if @@tmp_bitmap @@tmp_bitmap.dispose @@tmp_bitmap = nil end neo_save_map_start end #-------------------------------------------------------------------------- # alias method: terminate #-------------------------------------------------------------------------- alias neo_save_map_terminate terminate def terminate Scene_Map.take_picture neo_save_map_terminate end #-------------------------------------------------------------------------- # new class method: temp_bit_map #-------------------------------------------------------------------------- def self.temp_bit_map return @@tmp_bitmap end #-------------------------------------------------------------------------- # new class method: take_picture #-------------------------------------------------------------------------- def self.take_picture @@tmp_bitmap.dispose unless @@tmp_bitmap.nil? @@tmp_bitmap = Graphics.snap_to_bitmap end end #Scene_Map 复制代码
Terms and Credits
Free for commercial and non-commercial projects, credit is not mandatory but nice if you do.
The script should work but feel free to report any bug or if there is already a better implementation please tell me!
EDIT: updated to version 1.1, it does not change anything except that the 'screenshot' may now be called from oustide of the Scene_Map class
EDIT 09/05/2025: updated to version 1.2 to have a black border around the map
EDIT 10/05/2025: fixed the script in the post (forgot the code environment ~)
EDIT 11/09/2025: updated to v2 to integrate the picture into the savefile
本贴来自国际rpgmaker官方论坛作者:Timtrack处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:
https://forums.rpgmakerweb.com/threads/neo-save-system-like-for-ace-v2.175784/
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x