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

Project1

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

[已经解决] 求一个能够使分辨率大于640x480的工具/脚本(非拉伸)

[复制链接]

Lv2.观梦者

梦石
0
星屑
472
在线时间
40 小时
注册时间
2017-12-20
帖子
40
跳转到指定楼层
1
发表于 2018-1-1 12:12:08 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
在外网翻了一下,据说是因为必须修改DLL(触犯EULA)所以没人做,不知道本坛有没有相关大牛研究过?(本国特殊国情应该可以无视EULA把?非商业用途)

Lv2.观梦者

梦石
0
星屑
472
在线时间
40 小时
注册时间
2017-12-20
帖子
40
7
 楼主| 发表于 2018-1-2 18:37:12 | 只看该作者
xiaohuangdi 发表于 2018-1-2 05:00
貢獻一個神級腳本吧,除了圖片在544會有丁點模糊, 640下基本無差別

多谢,这个貌似是Fullscreen++的改版?就是不知道能不能自定义缩放倍率
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
8064
在线时间
1862 小时
注册时间
2017-10-23
帖子
355
6
发表于 2018-1-2 05:00:03 | 只看该作者
貢獻一個神級腳本吧,除了圖片在544會有丁點模糊, 640下基本無差別



#--------------------------------------------------------------------------------
#                        ==[LEGAL CRAP]==
# - You may modify this script as you see fit
# - You may use this script freely in any commercial or free game
# - Due to the simplicity of the script, you are not required to credit the author
# if you use it in any of your games. Credit is nice, but not required.
#
# Script Authored by: Matt Sully aka "Gump",修改整合by:NTRPG天空花嫁
#================================================================================
# Fullscreen++ v2.2 for VX and VXace by Zeus81
# Free for non commercial and commercial use
# Licence : http://creativecommons.org/licenses/by-sa/3.0/
# Contact : [email protected]
# (fr) Manuel d'utilisation : http://pastebin.com/raw.php?i=1TQfMnVJ
# (en) User Guide           : http://pastebin.com/raw.php?i=EgnWt9ur
# (cn) NTRPG天空花嫁        : http://patreon.com/NTRPG
# 放在Main前面  
#==============================================================================
# ★ RGSS3_解像度変更
#==============================================================================

Graphics.resize_screen(544, 416)    # 更改窗口大小(640, 480)
#==============================================================================
# ■ Game_Troop
#==============================================================================
class Game_Troop < Game_Unit
  #--------------------------------------------------------------------------
  # ● セットアップ
  #--------------------------------------------------------------------------
  alias tmwresize_game_troop_setup setup
  def setup(troop_id)
    tmwresize_game_troop_setup(troop_id)
    @enemies.each do |enemy|                  # バトラー座標の補正
      enemy.screen_x = enemy.screen_x * Graphics.width / 544
      enemy.screen_y = enemy.screen_y * Graphics.height / 416
      # 解像度が変わっても Window_BattleStatus のサイズは変わらないため
      # その誤差を埋めるためにY座標だけさらに微調整します
      h = 120   # Window_BattleStatus の高さ
      enemy.screen_y += h * Graphics.height / 416 - h
    end
  end
end


#================================================================================

$imported ||= {}
$imported[:Zeus_Fullscreen] = __FILE__

class << Graphics
  Disable_VX_Fullscreen = false

    GetActiveWindow = Win32API.new('user32', 'GetActiveWindow', '', 'i')
    GetClientRect = Win32API.new('user32', 'GetClientRect', 'ip', 'i')
    GetWindowPlacement = Win32API.new('user32', 'GetWindowPlacement', 'ip', 'i')
    Active_Window = GetActiveWindow.call   
  CreateWindowEx            = Win32API.new('user32'  , 'CreateWindowEx'           , 'ippiiiiiiiii', 'i')
  GetClientRect             = Win32API.new('user32'  , 'GetClientRect'            , 'ip'          , 'i')
  GetDC                     = Win32API.new('user32'  , 'GetDC'                    , 'i'           , 'i')
  GetSystemMetrics          = Win32API.new('user32'  , 'GetSystemMetrics'         , 'i'           , 'i')
  GetWindowRect             = Win32API.new('user32'  , 'GetWindowRect'            , 'ip'          , 'i')
  FillRect                  = Win32API.new('user32'  , 'FillRect'                 , 'ipi'         , 'i')
  FindWindow                = Win32API.new('user32'  , 'FindWindow'               , 'pp'          , 'i')
  ReleaseDC                 = Win32API.new('user32'  , 'ReleaseDC'                , 'ii'          , 'i')
  SendInput                 = Win32API.new('user32'  , 'SendInput'                , 'ipi'         , 'i')
  SetWindowLong             = Win32API.new('user32'  , 'SetWindowLong'            , 'iii'         , 'i')
  SetWindowPos              = Win32API.new('user32'  , 'SetWindowPos'             , 'iiiiiii'     , 'i')
  ShowWindow                = Win32API.new('user32'  , 'ShowWindow'               , 'ii'          , 'i')
  SystemParametersInfo      = Win32API.new('user32'  , 'SystemParametersInfo'     , 'iipi'        , 'i')
  UpdateWindow              = Win32API.new('user32'  , 'UpdateWindow'             , 'i'           , 'i')
  GetPrivateProfileString   = Win32API.new('kernel32', 'GetPrivateProfileString'  , 'ppppip'      , 'i')
  WritePrivateProfileString = Win32API.new('kernel32', 'WritePrivateProfileString', 'pppp'        , 'i')
  CreateSolidBrush          = Win32API.new('gdi32'   , 'CreateSolidBrush'         , 'i'           , 'i')
  DeleteObject              = Win32API.new('gdi32'   , 'DeleteObject'             , 'i'           , 'i')
  Win32API.new("user32", "ActivateKeyboardLayout", "l", "l").call(0x04090409) #关闭输入法
  unless method_defined?(:zeus_fullscreen_update)
    HWND     = FindWindow.call('RGSS Player', 0)
    BackHWND = CreateWindowEx.call(0x08000008, 'Static', '', 0x80000000, 0, 0, 0, 0, 0, 0, 0, 0)
    alias zeus_fullscreen_resize_screen resize_screen
    alias zeus_fullscreen_update        update
  end
private
  def initialize_fullscreen_rects
    @borders_size    ||= borders_size
    @fullscreen_rect ||= screen_rect
    @workarea_rect   ||= workarea_rect
  end
  def borders_size
    GetWindowRect.call(HWND, wrect = [0, 0, 0, 0].pack('l4'))
    GetClientRect.call(HWND, crect = [0, 0, 0, 0].pack('l4'))
    wrect, crect = wrect.unpack('l4'), crect.unpack('l4')
    Rect.new(0, 0, wrect[2]-wrect[0]-crect[2], wrect[3]-wrect[1]-crect[3])
  end
  def screen_rect
    Rect.new(0, 0, GetSystemMetrics.call(0), GetSystemMetrics.call(1))
  end
  def workarea_rect
    SystemParametersInfo.call(0x30, 0, rect = [0, 0, 0, 0].pack('l4'), 0)
    rect = rect.unpack('l4')
    Rect.new(rect[0], rect[1], rect[2]-rect[0], rect[3]-rect[1])
  end
  def hide_borders() SetWindowLong.call(HWND, -16, 0x14000000) end
  def show_borders() SetWindowLong.call(HWND, -16, 0x14CA0000) end
  def hide_back()    ShowWindow.call(BackHWND, 0)              end
  def show_back
    ShowWindow.call(BackHWND, 3)
    UpdateWindow.call(BackHWND)
    dc    = GetDC.call(BackHWND)
    rect  = [0, 0, @fullscreen_rect.width, @fullscreen_rect.height].pack('l4')
    brush = CreateSolidBrush.call(0)
    FillRect.call(dc, rect, brush)
    ReleaseDC.call(BackHWND, dc)
    DeleteObject.call(brush)
  end
  def resize_window(w, h)
    if @fullscreen
      x, y, z = (@fullscreen_rect.width-w)/2, (@fullscreen_rect.height-h)/2, -1
    else
      w += @borders_size.width
      h += @borders_size.height
      x = @workarea_rect.x + (@workarea_rect.width  - w) / 2
      y = @workarea_rect.y + (@workarea_rect.height - h) / 2
      z = -2
    end
    SetWindowPos.call(HWND, z, x, y, w, h, 0)
  end
  def release_alt
    inputs = [1,18,2, 1,164,2, 1,165,2].pack('LSx2Lx16'*3)
    SendInput.call(3, inputs, 28)
  end
public
  def load_fullscreen_settings
    buffer = [].pack('x256')
    section = 'Fullscreen++'
    filename = './Game.ini'
    get_option = Proc.new do |key, default_value|
      l = GetPrivateProfileString.call(section, key, default_value, buffer, buffer.size, filename)
      buffer[0, l]
    end
    @fullscreen       = get_option.call('Fullscreen'     , '0') == '1'
    @fullscreen_ratio = get_option.call('FullscreenRatio', '0').to_i
    @windowed_ratio   = get_option.call('WindowedRatio'  , '1').to_i
    toggle_vx_fullscreen if Disable_VX_Fullscreen and vx_fullscreen?
    fullscreen? ? fullscreen_mode : windowed_mode
  end
  def save_fullscreen_settings
    section = 'Fullscreen++'
    filename = './Game.ini'
    set_option = Proc.new do |key, value|
      WritePrivateProfileString.call(section, key, value.to_s, filename)
    end
    set_option.call('Fullscreen'     , @fullscreen ? '1' : '0')
    set_option.call('FullscreenRatio', @fullscreen_ratio)
    set_option.call('WindowedRatio'  , @windowed_ratio)
  end
  def fullscreen?
    @fullscreen or vx_fullscreen?
  end
  def vx_fullscreen?
    rect = screen_rect
    rect.width == 816 and rect.height == 624  #544:416
  end
  def toggle_fullscreen
    fullscreen? ? windowed_mode : fullscreen_mode
  end
  def toggle_vx_fullscreen
    windowed_mode if @fullscreen and !vx_fullscreen?
    inputs = [1,18,0, 1,13,0, 1,13,2, 1,18,2].pack('LSx2Lx16'*4)
    SendInput.call(4, inputs, 28)
    zeus_fullscreen_update
    self.ratio += 0 # refresh window size
  end
  def vx_fullscreen_mode
    return if vx_fullscreen?
    toggle_vx_fullscreen
  end
  def fullscreen_mode
    return if vx_fullscreen?
    initialize_fullscreen_rects
    show_back
    hide_borders
    @fullscreen = true
    self.ratio += 0 # refresh window size
  end
  def windowed_mode
    toggle_vx_fullscreen if vx_fullscreen?
    initialize_fullscreen_rects
    hide_back
    show_borders
    @fullscreen = false
    self.ratio += 0 # refresh window size
  end
  def toggle_ratio
    return if vx_fullscreen?
    self.ratio += 1
  end
  def ratio
    return 1 if vx_fullscreen?
    @fullscreen ? @fullscreen_ratio : @windowed_ratio
  end
  def ratio=(r)
    return if vx_fullscreen?
    initialize_fullscreen_rects
    r = 0 if r < 0
    if @fullscreen
      @fullscreen_ratio = r
      w_max, h_max = @fullscreen_rect.width, @fullscreen_rect.height
    else
      @windowed_ratio = r
      w_max = @workarea_rect.width  - @borders_size.width
      h_max = @workarea_rect.height - @borders_size.height
    end
    if r == 0
      w, h = w_max, w_max * height / width
      h, w = h_max, h_max * width / height if h > h_max
    else
      w, h = width * r, height * r
      return self.ratio = 0 if w > w_max or h > h_max
    end
    resize_window(w, h)
    save_fullscreen_settings
  end
  def update
    release_alt if Disable_VX_Fullscreen and Input.trigger?(Input::ALT)
    zeus_fullscreen_update
    toggle_fullscreen if Input.trigger?(Input::F5)
#   toggle_ratio      if Input.trigger?(Input::F6)
  end
  def resize_screen(width, height)
    zeus_fullscreen_resize_screen(width, height)
    self.ratio += 0 # refresh window size
  end
end
Graphics.load_fullscreen_settings
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
8064
在线时间
1862 小时
注册时间
2017-10-23
帖子
355
5
发表于 2018-1-2 04:53:20 | 只看该作者
視野擴大到800?   除非你行走圖用大體形的 地圖全部用畫的比原來大,不然你肯定會改回來。  544*416的比列才是最好的 MV也是這比例只是擴大了。
640*480是失敗的比例。  VX時候就撤掉了 是玩家硬改回640.

拉伸擴大才是王道,只是你們手裏的腳本會嚴重失真變得模糊。


回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
472
在线时间
40 小时
注册时间
2017-12-20
帖子
40
4
 楼主| 发表于 2018-1-1 23:17:26 | 只看该作者
喵呜喵5 发表于 2018-1-1 15:18
https://rpg.blue/forum.php?mod=viewthread&tid=222831&highlight=%E5%85%8DDLL

多谢,但看来这个消耗系统资源有点大,还是老老实实改DLL把

点评

这个脚本的运行效率理论上和改dll没多大差别吧 目测顶多多了几个不干事的线程  发表于 2018-1-2 09:01
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21631
在线时间
9415 小时
注册时间
2012-6-19
帖子
7118

开拓者短篇九导演组冠军

3
发表于 2018-1-1 15:18:02 | 只看该作者
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

漾夕☽星化残月☾

梦石
0
星屑
8596
在线时间
3857 小时
注册时间
2015-5-12
帖子
2077

剧作品鉴家

2
发表于 2018-1-1 15:10:42 | 只看该作者
本帖最后由 御曹司 于 2018-1-1 15:11 编辑

我记得不修改dll无法拉到640x480以上
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 13:29

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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