设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 34243|回复: 48
打印 上一主题 下一主题

[RMVA发布] ACE分辨率内存补丁(免DLL修改)感谢小黄鸡(:

  [复制链接]

Lv1.梦旅人

炎发灼眼的讨伐者

梦石
0
星屑
50
在线时间
1707 小时
注册时间
2007-8-4
帖子
904
跳转到指定楼层
1
发表于 2012-2-14 22:07:39 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 灼眼的夏娜 于 2012-2-15 20:43 编辑

更新,调整reset方式。(修正过渡问题

RUBY 代码复制
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ String
  4. #------------------------------------------------------------------------------
  5. #  String 类追加定义。
  6. #==============================================================================
  7.  
  8. class String
  9.   #----------------------------------------------------------------------------
  10.   # ● API
  11.   #----------------------------------------------------------------------------
  12.   @@MultiByteToWideChar  = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
  13.   @@WideCharToMultiByte  = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')
  14.   #----------------------------------------------------------------------------
  15.   # ● UTF-8 转 Unicode
  16.   #----------------------------------------------------------------------------
  17.   def u2w
  18.     i = @@MultiByteToWideChar.call(65001, 0 , self, -1, nil,0)
  19.     buffer = "\0" * (i*2)
  20.     @@MultiByteToWideChar.call(65001, 0 , self, -1, buffer, i)
  21.     buffer.chop!
  22.     return buffer
  23.   end  
  24.   #----------------------------------------------------------------------------
  25.   # ● UTF-8 转系统编码
  26.   #----------------------------------------------------------------------------
  27.   def u2s
  28.     i = @@MultiByteToWideChar.call(65001, 0 , self, -1, nil,0)
  29.     buffer = "\0" * (i*2)
  30.     @@MultiByteToWideChar.call(65001, 0 , self, -1, buffer, i)
  31.     i = @@WideCharToMultiByte.call(0, 0, buffer, -1, nil, 0, nil, nil)
  32.     result = "\0" * i
  33.     @@WideCharToMultiByte.call(0, 0, buffer, -1, result, i, nil, nil)
  34.     result.chop!
  35.     return result
  36.   end
  37.   #----------------------------------------------------------------------------
  38.   # ● 系统编码转 UTF-8
  39.   #----------------------------------------------------------------------------
  40.   def s2u
  41.     i = @@MultiByteToWideChar.call(0, 0, self, -1, nil, 0)
  42.     buffer = "\0" * (i*2)
  43.     @@MultiByteToWideChar.call(0, 0, self, -1, buffer, buffer.size / 2)
  44.     i = @@WideCharToMultiByte.call(65001, 0, buffer, -1, nil, 0, nil, nil)
  45.     result = "\0" * i
  46.     @@WideCharToMultiByte.call(65001, 0, buffer, -1, result, result.size, nil, nil)
  47.     result.chop!
  48.     return result
  49.   end
  50. end
  51.  
  52. #==============================================================================
  53. # ■ AceResolutionMemoryPatch
  54. #------------------------------------------------------------------------------
  55. #  用于调整RMACE分辨率的内存补丁脚本,免修改DLL。
  56. #
  57. #   by 灼眼的夏娜(感谢fux2君提供内存地址)
  58. #==============================================================================
  59. # 更多脚本请转到 [url]www.66rpg.com[/url]。
  60. #==============================================================================
  61. module AceResolutionMemoryPatch
  62.  
  63.   GetModuleFileName       = Win32API.new("kernel32", "GetModuleFileName", "lpl", "l")
  64.   GetPrivateProfileString = Win32API.new("kernel32", "GetPrivateProfileString", "pppplp", "l")
  65.   GetModuleHandle         = Win32API.new("kernel32", "GetModuleHandle", "p", "l")
  66.   RtlMoveMemory           = Win32API.new("kernel32", "RtlMoveMemory", "pli", "v")
  67.   RtlMoveMemoryLP         = Win32API.new("kernel32", "RtlMoveMemory", "lpi", "v")
  68.   VirtualProtect          = Win32API.new("kernel32", "VirtualProtect", "lllp", "i")
  69.   FindWindow              = Win32API.new("user32", "FindWindow", "pp", "l")
  70.  
  71.   module_function
  72.  
  73.   def patch(width = 800, height = 600)
  74.     # 获取句柄
  75.     path = 0.chr * 256
  76.     return false if 0 == GetModuleFileName.call(0, path, path.size)
  77.     path = path.s2u.gsub!(/.exe/ ,".ini").u2s
  78.     buff = 0.chr * 256
  79.     return false if 0 == GetPrivateProfileString.call("Game", "Library", nil, buff, buff.size, path)
  80.     buff.delete!("\0")
  81.     rgsshandle = GetModuleHandle.call(buff)
  82.     # 获取标题名和脚本名字
  83.     title = 0.chr * 256
  84.     return false if 0 == GetPrivateProfileString.call("Game", "Title", nil, title, title.size, path)
  85.     title = title.s2u.delete("\0").u2s
  86.     scripts = 0.chr * 256
  87.     return false if 0 == GetPrivateProfileString.call("Game", "Scripts", nil, scripts, scripts.size, path)
  88.     scripts = scripts.s2u.delete("\0").u2w
  89.     # 地址表
  90.     addr =
  91.     {
  92.       # 直接宽度替换
  93.       :w0 => [0x000016EE, 0x000020F6, 0x000020FF, 0x0010DFED, 0x0010E025, 0x0010E059, 0x0010E08D, 0x000019AA, 0x00001A5B, 0x0001C528, 0x0001F49C, 0x0010E7E7, 0x0010EFE9],
  94.       # 直接高度替换
  95.       :h0 => [0x000016E9, 0x00002106, 0x0000210F, 0x0010DFE8, 0x0010E020, 0x0010E054, 0x0010E088, 0x000019A5, 0x00001A56, 0x0001C523, 0x0001F497, 0x0010E803, 0x0010EFF9],
  96.  
  97.       # 宽度+32
  98.       :w1 => [0x000213E4],
  99.       # 高度+32
  100.       :h1 => [0x000213DF],
  101.  
  102.       # 最大宽度/32+1
  103.       :w2 => [0x00021FE1],
  104.       # 最大高度/32+1
  105.       :h2 => [0x00021F5D]
  106.     }
  107.     # 更新
  108.     w0 = [width].pack("L")
  109.     addr[:w0].each{|ofs| return false if !write_memory(rgsshandle + ofs, w0)}
  110.     h0 = [height].pack("L")
  111.     addr[:h0].each{|ofs| return false if !write_memory(rgsshandle + ofs, h0)}
  112.     w1 = [width + 32].pack("L")
  113.     addr[:w1].each{|ofs| return false if !write_memory(rgsshandle + ofs, w1)}
  114.     h1 = [height + 32].pack("L")
  115.     addr[:h1].each{|ofs| return false if !write_memory(rgsshandle + ofs, h1)}
  116.     w2 = [width / 32 + 1].pack("C")
  117.     addr[:w2].each{|ofs| return false if !write_memory(rgsshandle + ofs, w2)}
  118.     h2 = [height / 32 + 1].pack("C")
  119.     addr[:h2].each{|ofs| return false if !write_memory(rgsshandle + ofs, h2)}
  120.     # 重启
  121.     rgssgamemain = Win32API.new(buff, "RGSSGameMain", "ipp", "v")
  122.     rgssgamemain.call(FindWindow.call("RGSS Player", title), scripts, "")
  123.     # 补丁成功
  124.     return true
  125.   end
  126.  
  127.   def write_memory(addr, str)
  128.     old = 0.chr * 4
  129.     return false if 0 == VirtualProtect.call(addr, str.size, 0x40, old)
  130.     RtlMoveMemoryLP.call(addr, str, str.size)
  131.     return false if 0 == VirtualProtect.call(addr, str.size, old.unpack("L").first, old)
  132.     return true
  133.   end
  134.   private_class_method :write_memory
  135.  
  136.   def read_byte(addr)
  137.     dst = 0.chr * 1
  138.     RtlMoveMemory.call(dst, addr, dst.size)
  139.     return dst.unpack("C").first
  140.   end
  141.   private_class_method :read_byte
  142.  
  143.   def read_dword(addr)
  144.     dst = 0.chr * 4
  145.     RtlMoveMemory.call(dst, addr, dst.size)
  146.     return dst.unpack("L").first
  147.   end
  148.   private_class_method :read_dword
  149.  
  150. end
  151.  
  152. unless $ace_patched
  153.   $ace_patched = true
  154.   raise "应用分辨率补丁失败!" unless AceResolutionMemoryPatch.patch
  155.   #raise RGSSReset.new
  156. end
  157.  
  158. Graphics.resize_screen(800, 600)

评分

参与人数 3星屑 +620 +1 收起 理由
夏箜洛 + 1 太棒了!!!
david50407 + 20 膜拜
退屈£无聊 + 600

查看全部评分

RMXP&RMVX通用Web化完成- -|||

Lv4.逐梦者

梦石
0
星屑
11175
在线时间
2066 小时
注册时间
2013-6-10
帖子
1516
37
发表于 2023-6-11 17:25:19 | 只看该作者
十年过去,小黄鸡变成老黄鸡了(

点评

而我也变成了老怪兽奇奇侠  发表于 2023-6-11 17:26
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
132
在线时间
11 小时
注册时间
2023-5-6
帖子
7
36
发表于 2023-6-11 17:02:25 | 只看该作者
呜呜呜,大佬,我用您这个脚本,结果报错了,而且不是一点半点的错误,您有什么解决办法吗
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
844
在线时间
11 小时
注册时间
2015-6-3
帖子
8
35
发表于 2023-5-26 21:33:41 | 只看该作者
wbsy8241 发表于 2012-2-15 00:51
测试系统:XP SP3
1.下面有黑条(非左上角对齐以后:上下位移,左右正常 上下移动后最下格是黑的然后画面滚动 ...

我把这里的32全部改成31了亲测有效!!!
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3780
在线时间
204 小时
注册时间
2018-6-17
帖子
172
34
发表于 2019-2-25 21:34:17 | 只看该作者
感謝~!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
9 小时
注册时间
2014-7-18
帖子
16
33
发表于 2017-6-11 15:59:12 | 只看该作者
好卡啊大佬,走路都一卡一卡。。。。。。。。。。。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
2801
在线时间
27 小时
注册时间
2015-2-28
帖子
4
32
发表于 2015-12-19 18:03:55 | 只看该作者
怎么使用时显示脚本scene-title第41行发生typeerror
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
116 小时
注册时间
2012-10-4
帖子
193
31
发表于 2015-3-11 20:08:19 | 只看该作者
樓主,我用這個腳本測試遊戲時,跳出程式停止運作的訊息
連腳本哪裡有問題都無法得知
可否請樓主幫忙,謝謝
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
1055
在线时间
14 小时
注册时间
2012-11-26
帖子
2
30
发表于 2013-11-20 23:18:14 | 只看该作者
夏娜殿下您好TUT我一直用您的分辨率脚本,但是升级了va,也就是用了sp脚本升级之后发现和您的脚本冲突了怎么办QAQ因为va老版本消除图片不干净逐渐累积会越来越卡,但升级后不能改分辨率也很蛋疼QAQ不知道您有什么解决办法吗QAQQQ
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
4 小时
注册时间
2013-11-1
帖子
5
29
发表于 2013-11-4 18:48:58 | 只看该作者
感谢分享。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-21 21:52

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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