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

Project1

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

[已经解决] 【ACE`S 分辨率】 非拉伸性扩大 > 1024X768

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
521 小时
注册时间
2011-12-7
帖子
305
跳转到指定楼层
1
发表于 2013-7-14 21:04:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 Ceopal 于 2013-7-14 21:06 编辑

   

        数月前只是询问过

      非拉伸性扩大分辨率 比1024x768更大的办法是?



Lv1.梦旅人

梦石
0
星屑
50
在线时间
381 小时
注册时间
2012-8-13
帖子
113
2
发表于 2013-7-15 12:47:20 | 只看该作者
要必要搞那么大的分辨率吗?除了卡还可能造成各种问题。。。不过如果真的需要的话,这个脚本可以给你想要的效果:
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ String
  4. #------------------------------------------------------------------------------
  5. #  String 类追加定义。
  6. #==============================================================================

  7. class String
  8.   #----------------------------------------------------------------------------
  9.   # ● API
  10.   #----------------------------------------------------------------------------
  11.   @@MultiByteToWideChar  = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
  12.   @@WideCharToMultiByte  = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')
  13.   #----------------------------------------------------------------------------
  14.   # ● UTF-8 转 Unicode
  15.   #----------------------------------------------------------------------------
  16.   def u2w
  17.     i = @@MultiByteToWideChar.call(65001, 0 , self, -1, nil,0)
  18.     buffer = "\0" * (i*2)
  19.     @@MultiByteToWideChar.call(65001, 0 , self, -1, buffer, i)
  20.     buffer.chop!
  21.     return buffer
  22.   end  
  23.   #----------------------------------------------------------------------------
  24.   # ● UTF-8 转系统编码
  25.   #----------------------------------------------------------------------------
  26.   def u2s
  27.     i = @@MultiByteToWideChar.call(65001, 0 , self, -1, nil,0)
  28.     buffer = "\0" * (i*2)
  29.     @@MultiByteToWideChar.call(65001, 0 , self, -1, buffer, i)
  30.     i = @@WideCharToMultiByte.call(0, 0, buffer, -1, nil, 0, nil, nil)
  31.     result = "\0" * i
  32.     @@WideCharToMultiByte.call(0, 0, buffer, -1, result, i, nil, nil)
  33.     result.chop!
  34.     return result
  35.   end
  36.   #----------------------------------------------------------------------------
  37.   # ● 系统编码转 UTF-8
  38.   #----------------------------------------------------------------------------
  39.   def s2u
  40.     i = @@MultiByteToWideChar.call(0, 0, self, -1, nil, 0)
  41.     buffer = "\0" * (i*2)
  42.     @@MultiByteToWideChar.call(0, 0, self, -1, buffer, buffer.size / 2)
  43.     i = @@WideCharToMultiByte.call(65001, 0, buffer, -1, nil, 0, nil, nil)
  44.     result = "\0" * i
  45.     @@WideCharToMultiByte.call(65001, 0, buffer, -1, result, result.size, nil, nil)
  46.     result.chop!
  47.     return result
  48.   end
  49. end

  50. #==============================================================================
  51. # ■ AceResolutionMemoryPatch
  52. #------------------------------------------------------------------------------
  53. #  用于调整RMACE分辨率的内存补丁脚本,免修改DLL。
  54. #
  55. #   by 灼眼的夏娜(感谢fux2君提供内存地址)
  56. #==============================================================================
  57. # 更多脚本请转到 [url]www.66rpg.com[/url]。
  58. #==============================================================================
  59. module AceResolutionMemoryPatch

  60.   GetModuleFileName       = Win32API.new("kernel32", "GetModuleFileName", "lpl", "l")
  61.   GetPrivateProfileString = Win32API.new("kernel32", "GetPrivateProfileString", "pppplp", "l")
  62.   GetModuleHandle         = Win32API.new("kernel32", "GetModuleHandle", "p", "l")
  63.   RtlMoveMemory           = Win32API.new("kernel32", "RtlMoveMemory", "pli", "v")
  64.   RtlMoveMemoryLP         = Win32API.new("kernel32", "RtlMoveMemory", "lpi", "v")
  65.   VirtualProtect          = Win32API.new("kernel32", "VirtualProtect", "lllp", "i")
  66.   FindWindow              = Win32API.new("user32", "FindWindow", "pp", "l")

  67.   module_function

  68.   def patch(width = 800, height = 600)
  69.     # 获取句柄
  70.     path = 0.chr * 256
  71.     return false if 0 == GetModuleFileName.call(0, path, path.size)
  72.     path = path.s2u.gsub!(/.exe/ ,".ini").u2s
  73.     buff = 0.chr * 256
  74.     return false if 0 == GetPrivateProfileString.call("Game", "Library", nil, buff, buff.size, path)
  75.     buff.delete!("\0")
  76.     rgsshandle = GetModuleHandle.call(buff)
  77.     # 获取标题名和脚本名字
  78.     title = 0.chr * 256
  79.     return false if 0 == GetPrivateProfileString.call("Game", "Title", nil, title, title.size, path)
  80.     title = title.s2u.delete("\0").u2s
  81.     scripts = 0.chr * 256
  82.     return false if 0 == GetPrivateProfileString.call("Game", "Scripts", nil, scripts, scripts.size, path)
  83.     scripts = scripts.s2u.delete("\0").u2w
  84.     # 地址表
  85.     addr =
  86.     {
  87.       # 直接宽度替换
  88.       :w0 => [0x000016EE, 0x000020F6, 0x000020FF, 0x0010DFED, 0x0010E025, 0x0010E059, 0x0010E08D, 0x000019AA, 0x00001A5B, 0x0001C528, 0x0001F49C, 0x0010E7E7, 0x0010EFE9],
  89.       # 直接高度替换
  90.       :h0 => [0x000016E9, 0x00002106, 0x0000210F, 0x0010DFE8, 0x0010E020, 0x0010E054, 0x0010E088, 0x000019A5, 0x00001A56, 0x0001C523, 0x0001F497, 0x0010E803, 0x0010EFF9],

  91.       # 宽度+32
  92.       :w1 => [0x000213E4],
  93.       # 高度+32
  94.       :h1 => [0x000213DF],

  95.       # 最大宽度/32+1
  96.       :w2 => [0x00021FE1],
  97.       # 最大高度/32+1
  98.       :h2 => [0x00021F5D]
  99.     }
  100.     # 更新
  101.     w0 = [width].pack("L")
  102.     addr[:w0].each{|ofs| return false if !write_memory(rgsshandle + ofs, w0)}
  103.     h0 = [height].pack("L")
  104.     addr[:h0].each{|ofs| return false if !write_memory(rgsshandle + ofs, h0)}
  105.     w1 = [width + 32].pack("L")
  106.     addr[:w1].each{|ofs| return false if !write_memory(rgsshandle + ofs, w1)}
  107.     h1 = [height + 32].pack("L")
  108.     addr[:h1].each{|ofs| return false if !write_memory(rgsshandle + ofs, h1)}
  109.     w2 = [width / 32 + 1].pack("C")
  110.     addr[:w2].each{|ofs| return false if !write_memory(rgsshandle + ofs, w2)}
  111.     h2 = [height / 32 + 1].pack("C")
  112.     addr[:h2].each{|ofs| return false if !write_memory(rgsshandle + ofs, h2)}
  113.     # 重启
  114.     rgssgamemain = Win32API.new(buff, "RGSSGameMain", "ipp", "v")
  115.     rgssgamemain.call(FindWindow.call("RGSS Player", title), scripts, "")
  116.     # 补丁成功
  117.     return true
  118.   end

  119.   def write_memory(addr, str)
  120.     old = 0.chr * 4
  121.     return false if 0 == VirtualProtect.call(addr, str.size, 0x40, old)
  122.     RtlMoveMemoryLP.call(addr, str, str.size)
  123.     return false if 0 == VirtualProtect.call(addr, str.size, old.unpack("L").first, old)
  124.     return true
  125.   end
  126.   private_class_method :write_memory

  127.   def read_byte(addr)
  128.     dst = 0.chr * 1
  129.     RtlMoveMemory.call(dst, addr, dst.size)
  130.     return dst.unpack("C").first
  131.   end
  132.   private_class_method :read_byte

  133.   def read_dword(addr)
  134.     dst = 0.chr * 4
  135.     RtlMoveMemory.call(dst, addr, dst.size)
  136.     return dst.unpack("L").first
  137.   end
  138.   private_class_method :read_dword

  139. end

  140. unless $ace_patched
  141.   $ace_patched = true
  142.   raise "应用分辨率补丁失败!" unless AceResolutionMemoryPatch.patch
  143.   #raise RGSSReset.new
  144. end

  145. Graphics.resize_screen(800, 600)
复制代码

点评

非常感谢提供.... [size=2]虽然和自己工程里五个脚本冲突之后运行不能....[/size]  发表于 2013-7-15 20:09
73行:def patch(width = 800, height = 600)以及最后一行Graphics.resize_screen(800, 600)设为你想要的分辨率即可  发表于 2013-7-15 12:48

评分

参与人数 1星屑 +100 收起 理由
Mic_洛洛 + 100 回复奖励

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-18 06:15

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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