设为首页收藏本站同能贴吧 切换语言 繁体中文
开启辅助访问 切换到窄版
扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 104|回复: 0

[转载发布] Neo Save System-like for ace v2

[复制链接]
累计送礼:
0 个
累计收礼:
1 个
  • TA的每日心情
    开心
    2026-7-12 04:10
  • 签到天数: 209 天

    连续签到: 2 天

    [LV.7]常住居民III

    9071

    主题

    864

    回帖

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    7
    卡币
    58883
    OK点
    16
    推广点
    0
    同能卷
    50
    积分
    68848

    灌水之王

    发表于 2026-8-3 13:45:53 | 显示全部楼层 |阅读模式
    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:       
    1. #==============================================================================
    2. # Neo Save System for VX ace v2
    3. # Recreates the Neo Save System on VX ace using Yanfly Save Manager and Zeus Bitmap Export
    4. #------------------------------------------------------------------------------
    5. # Author: Timtrack
    6. # date: 11/09/2025
    7. # Requires:
    8. # -Ace Save Engine 1.03 by Yanfly
    9. # -Bitmap Export v5.4 by Zeus81
    10. #==============================================================================
    11. $imported = {} if $imported.nil?
    12. raise "Neo save requires Ace Save Engine by Yanfly!" unless $imported["YEA-SaveEngine"]
    13. raise "Neo save requires Zeus Bitmap Export!" unless $imported[:Zeus_Bitmap_Export]
    14. $imported["TIM-NeoSave"] = true
    15. #==============================================================================
    16. # Version History
    17. #------------------------------------------------------------------------------
    18. # 24/02/2025: Original release
    19. # 30/04/2025: v1.1 to access the take picture method from other scripts
    20. # 09/05/2025: v1.2 to have a black border around the screenshot
    21. # 11/09/2025: v2   removes the picture file and saves it directly into the
    22. #                  savefile header instead (makes savefiles heavier)
    23. #==============================================================================
    24. # Description
    25. #------------------------------------------------------------------------------
    26. # This script will display a screenshot of the map the characters are in
    27. # the save/load menu.
    28. #
    29. # The display will look like this:
    30. # ------------------------------------------------
    31. # Gold                                    Playtime
    32. #                  
    33. #                     Picture
    34. #
    35. #
    36. # Location name
    37. # Party members
    38. # Variables -> hidden deppending on the size of the picture
    39. #==============================================================================
    40. # Installation: put it after the required scripts and before main
    41. # Compatibility: with almost anything except scripts modifying file save display
    42. #==============================================================================
    43. # Terms of use: free for commercial and non-commercial project,
    44. # credit is not mandatory but nice if you do
    45. #==============================================================================
    46. module NeoSave
    47.   SCREENSHOT_HEIGHT = 140#200
    48.   MAP_BORDER_COLOR = Color.new(0,0,0,200)
    49.   MAP_BORDER_SIZE = 2 #in pixels
    50. end #NeoSave
    51. #==============================================================================
    52. # DataManager -> saves the screenshot into the savefile
    53. #==============================================================================
    54. module DataManager
    55.   #--------------------------------------------------------------------------
    56.   # alias method: self.make_save_header
    57.   #--------------------------------------------------------------------------
    58.   class <<self; alias neo_make_save_header make_save_header; end
    59.   def self.make_save_header
    60.     header = neo_make_save_header
    61.     header[:neo_save_screenshot] = Scene_Map.temp_bit_map
    62.     header
    63.   end
    64. end # DataManager
    65. #==============================================================================
    66. # Window_FileStatus
    67. #==============================================================================
    68. class Window_FileStatus < Window_Base
    69.   #--------------------------------------------------------------------------
    70.   # overwrite method: draw_save_contents
    71.   #--------------------------------------------------------------------------
    72.   def draw_save_contents
    73.     #draw_save_slot(4, 0, contents.width/2-8)
    74.     draw_save_playtime(contents.width/2+4, 0, contents.width/2-8)
    75.     #draw_save_total_saves(4, line_height, contents.width/2-8)
    76.     draw_save_gold(4, 0, contents.width/2-8)
    77.     draw_map_picture(4,line_height, contents.width-8)
    78.     dy = NeoSave::SCREENSHOT_HEIGHT + line_height
    79.     draw_save_location(4, dy, contents.width-8) #line_height*2
    80.     draw_save_characters(0, dy+line_height*3 + line_height/3)
    81.     draw_save_column1(16, dy+line_height*5, contents.width/2-48)
    82.     draw_save_column2(contents.width/2+16, dy+line_height*5, contents.width/2-48)
    83.   end
    84.   #--------------------------------------------------------------------------
    85.   # new method: draw_map_picture
    86.   #--------------------------------------------------------------------------
    87.   def draw_map_picture(dx, dy, dw)
    88.     bitmap = get_screenshot_bitmap
    89.     return unless bitmap
    90.     shift_x = (bitmap.width - dw)/2
    91.     shift_y = (bitmap.height - NeoSave::SCREENSHOT_HEIGHT)/2
    92.     inside_rect = Rect.new(dx,dy,dw,NeoSave::SCREENSHOT_HEIGHT)
    93.     contents.fill_rect(inside_rect, NeoSave::MAP_BORDER_COLOR)
    94.     d = NeoSave::MAP_BORDER_SIZE
    95.     rect = Rect.new(shift_x,shift_y,dw-2*d,NeoSave::SCREENSHOT_HEIGHT-2*d)
    96.     contents.blt(dx+d, dy+d, bitmap, rect, 255)
    97.     bitmap.dispose
    98.   end
    99.   #--------------------------------------------------------------------------
    100.   # new method: get_screenshot_bitmap
    101.   #--------------------------------------------------------------------------
    102.   def get_screenshot_bitmap
    103.     @header[:neo_save_screenshot]
    104.   end
    105. end #Window_FileStatus
    106. #==============================================================================
    107. # Scene_Map
    108. #==============================================================================
    109. class Scene_Map < Scene_Base
    110.   @@tmp_bitmap = nil
    111.   #--------------------------------------------------------------------------
    112.   # alias method: start
    113.   #--------------------------------------------------------------------------
    114.   alias neo_save_map_start start
    115.   def start
    116.     if @@tmp_bitmap
    117.       @@tmp_bitmap.dispose
    118.       @@tmp_bitmap = nil
    119.     end
    120.     neo_save_map_start
    121.   end
    122.   #--------------------------------------------------------------------------
    123.   # alias method: terminate
    124.   #--------------------------------------------------------------------------
    125.   alias neo_save_map_terminate terminate
    126.   def terminate
    127.     Scene_Map.take_picture
    128.     neo_save_map_terminate
    129.   end
    130.   #--------------------------------------------------------------------------
    131.   # new class method: temp_bit_map
    132.   #--------------------------------------------------------------------------
    133.   def self.temp_bit_map
    134.     return @@tmp_bitmap
    135.   end
    136.   #--------------------------------------------------------------------------
    137.   # new class method: take_picture
    138.   #--------------------------------------------------------------------------
    139.   def self.take_picture
    140.     @@tmp_bitmap.dispose unless @@tmp_bitmap.nil?
    141.     @@tmp_bitmap = Graphics.snap_to_bitmap
    142.   end
    143. 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:       
    1. #==============================================================================
    2. # Neo Save System for VX ace v1.2
    3. # Recreates the Neo Save System on VX ace using Yanfly Save Manager and Zeus Bitmap Export
    4. #------------------------------------------------------------------------------
    5. # Author: Timtrack
    6. # date: 24/02/2025
    7. # modified the 30/04/2025
    8. # Requires:
    9. # -Ace Save Engine 1.03 by Yanfly
    10. # -Bitmap Export v5.4 by Zeus81
    11. #==============================================================================
    12. $imported = {} if $imported.nil?
    13. raise "Neo save requires Ace Save Engine by Yanfly!" unless $imported["YEA-SaveEngine"]
    14. raise "Neo save requires Zeus Bitmap Export!" unless $imported[:Zeus_Bitmap_Export]
    15. $imported["TIM-NeoSave"] = true
    16. #==============================================================================
    17. # Description
    18. #------------------------------------------------------------------------------
    19. # This script will display a screenshot of the map the characters are in
    20. # the save/load menu.
    21. #
    22. # The display will look like this:
    23. # ------------------------------------------------
    24. # Gold                                    Playtime
    25. #                 
    26. #                     Picture
    27. #
    28. #
    29. # Location name
    30. # Party members
    31. # Variables -> hidden deppending on the size of the picture
    32. #==============================================================================
    33. # Installation: put it after the required scripts and before main
    34. # Compatibility: with almost anything except scripts modifying file save display
    35. #==============================================================================
    36. # Terms of use: free for commercial and non-commercial project,
    37. # credit is not mandatory but nice if you do
    38. #==============================================================================
    39. module NeoSave
    40.   Picture_dir = "" #fill this if you use a subdir
    41.   Picture_location = "save_pic_%02d.png" #%02d is the id of the save file
    42.   SCREENSHOT_HEIGHT = 140
    43.   MAP_BORDER_COLOR = Color.new(0,0,0,200)
    44.   MAP_BORDER_SIZE = 2 #in pixels
    45.   def self.get_picture_name(file_index)
    46.     return sprintf(Picture_location,file_index+1)
    47.   end
    48. end #NeoSave
    49. #==============================================================================
    50. # Window_FileStatus
    51. #==============================================================================
    52. class Window_FileStatus < Window_Base
    53.   #--------------------------------------------------------------------------
    54.   # override method: draw_save_contents
    55.   #--------------------------------------------------------------------------
    56.   def draw_save_contents
    57.     #draw_save_slot(4, 0, contents.width/2-8)
    58.     draw_save_playtime(contents.width/2+4, 0, contents.width/2-8)
    59.     #draw_save_total_saves(4, line_height, contents.width/2-8)
    60.     draw_save_gold(4, 0, contents.width/2-8)
    61.     draw_map_picture(4,line_height, contents.width-8)
    62.     dy = NeoSave::SCREENSHOT_HEIGHT + line_height
    63.     draw_save_location(4, dy, contents.width-8) #line_height*2
    64.     draw_save_characters(0, dy+line_height*3 + line_height/3)
    65.     draw_save_column1(16, dy+line_height*5, contents.width/2-48)
    66.     draw_save_column2(contents.width/2+16, dy+line_height*5, contents.width/2-48)
    67.   end
    68.   #--------------------------------------------------------------------------
    69.   # new method: draw_map_picture
    70.   #--------------------------------------------------------------------------
    71.   def draw_map_picture(dx, dy, dw)
    72.     bitmap = Cache.load_bitmap(NeoSave::Picture_dir, NeoSave.get_picture_name(@current_index)) rescue return
    73.     shift_x = (bitmap.width - dw)/2
    74.     shift_y = (bitmap.height - NeoSave::SCREENSHOT_HEIGHT)/2
    75.     inside_rect = Rect.new(dx,dy,dw,NeoSave::SCREENSHOT_HEIGHT)
    76.     contents.fill_rect(inside_rect, NeoSave::MAP_BORDER_COLOR)
    77.     d = NeoSave::MAP_BORDER_SIZE
    78.     rect = Rect.new(shift_x,shift_y,dw-2*d,NeoSave::SCREENSHOT_HEIGHT-2*d)
    79.     contents.blt(dx+d, dy+d, bitmap, rect, 255)
    80.     bitmap.dispose
    81.   end
    82. end #Window_FileStatus
    83. #==============================================================================
    84. # Scene_File
    85. #==============================================================================
    86. class Scene_File < Scene_MenuBase
    87.   #--------------------------------------------------------------------------
    88.   # alias method: on_save_success
    89.   #--------------------------------------------------------------------------
    90.   alias neo_on_save_success on_save_success
    91.   def on_save_success
    92.     save_map_picture
    93.     neo_on_save_success
    94.   end
    95.   #--------------------------------------------------------------------------
    96.   # alias method: on_delete_success
    97.   #--------------------------------------------------------------------------
    98.   alias neo_on_delete_success on_delete_success
    99.   def on_delete_success
    100.     File.delete(NeoSave::Picture_dir + NeoSave.get_picture_name(@file_window.index)) rescue nil
    101.     neo_on_delete_success
    102.   end
    103.   #--------------------------------------------------------------------------
    104.   # new method: save_map_picture
    105.   #--------------------------------------------------------------------------
    106.   def save_map_picture
    107.     Scene_Map.temp_bit_map.export(NeoSave::Picture_dir + NeoSave.get_picture_name(@file_window.index))
    108.   end
    109. end #Scene_File
    110. #==============================================================================
    111. # Scene_Map
    112. #==============================================================================
    113. class Scene_Map < Scene_Base
    114.   @@tmp_bitmap = nil
    115.   #--------------------------------------------------------------------------
    116.   # alias method: start
    117.   #--------------------------------------------------------------------------
    118.   alias neo_save_map_start start
    119.   def start
    120.     if @@tmp_bitmap
    121.       @@tmp_bitmap.dispose
    122.       @@tmp_bitmap = nil
    123.     end
    124.     neo_save_map_start
    125.   end
    126.   #--------------------------------------------------------------------------
    127.   # alias method: terminate
    128.   #--------------------------------------------------------------------------
    129.   alias neo_save_map_terminate terminate
    130.   def terminate
    131.     Scene_Map.take_picture
    132.     neo_save_map_terminate
    133.   end
    134.   #--------------------------------------------------------------------------
    135.   # new class method: temp_bit_map
    136.   #--------------------------------------------------------------------------
    137.   def self.temp_bit_map
    138.     return @@tmp_bitmap
    139.   end
    140.   #--------------------------------------------------------------------------
    141.   # new class method: take_picture
    142.   #--------------------------------------------------------------------------
    143.   def self.take_picture
    144.     @@tmp_bitmap.dispose unless @@tmp_bitmap.nil?
    145.     @@tmp_bitmap = Graphics.snap_to_bitmap
    146.   end
    147. 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
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    简体中文
    繁體中文
    English(英语)
    日本語(日语)
    Deutsch(德语)
    Русский язык(俄语)
    بالعربية(阿拉伯语)
    Türkçe(土耳其语)
    Português(葡萄牙语)
    ภาษาไทย(泰国语)
    한어(朝鲜语/韩语)
    Français(法语)
    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2026-8-17 06:17 , Processed in 0.107744 second(s), 52 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表