赞 | 27 |
VIP | 400 |
好人卡 | 13 |
积分 | 17 |
经验 | 69730 |
最后登录 | 2023-6-12 |
在线时间 | 3038 小时 |
Lv3.寻梦者 (暗夜天使) 精灵族の天使
- 梦石
- 0
- 星屑
- 1697
- 在线时间
- 3038 小时
- 注册时间
- 2007-3-16
- 帖子
- 33731
|
2楼
楼主 |
发表于 2008-12-10 22:06:10
|
只看该作者
占楼
Sprite_Shadow
- #==============================================================================
- # 阴影精灵(活动块) (渐变精灵(活动块))
- #------------------------------------------------------------------------------
- # 以 Genzai Kawakami的阴影脚本为基础。
- # 由 Rataime 重新编写功能并改进
- # 由 Boushy 增添新的功能。
- # 由 DerVVulfman 重新编辑。
- # 由 Syvkal 改写为VX版(精灵:依然有XP版的……)
- # 由 Painhurt 修正错误
- # 由 精灵使者 翻译并改进
- # 2008 年 10月 14日
- #
- #------------------------------------------------------------------------------
- #
- # 介绍
- #
- # 这个系统允许角色和所有“预定的”事件在地图上产生阴影。角色可以在“光源”四周
- # 移动,同时产生阴影。当然,特殊注释过的事件也会产生此光源的阴影。
- #
- #------------------------------------------------------------------------------
- #
- # 使用方法
- #
- # -- 灯光光源
- # 为了制作光源,你需要在地图上建立一个作为灯光的事件。大多数情况下,这个事件
- # 使用“火炬”或者“灯”的行走图。举个例子,默认VX的other02的火炬和others03的
- # 灯。
- #
- # 如果想让其中的一个事件作为光源的话,你需要在光源的事件页里添加一系列东西。
- # 这些东西,仅仅是一些注释而已。
- #
- # 你需要加的第一条注释是 begin Shadow Source (请不要加引号,大小写切记)。这
- # 个注释告知了系统,这个事件是一个光源。剩下的4个参数是可选的,而且在脚本的默
- # 认参数里已经定义过。当然,这些也可以加入做为注释。书写范例为:
- # anglemin 90(不加引号)
- #
- # anglemin 数字 --- 光源发光的起始扇形弧度(以逆时针旋转),0-360
- # anglemax 数字 --- 光源发光的结束扇形弧度(以逆时针旋转),0-360
- # *结束弧度一定要大于等于起始弧度值,如果相等则是360度普通光源
- # distancemax 数字 --- 光源的强度,也就是说,远离光源多远不会产生此光的影子。
- # 光源的强度单位为像素。也就是说,32像素为一格,要计算好了。
- # self_opacity 数字 --- 影子的深度,也就是你的影子的透明度是多少,(0-255)
- #
- # 然后,你的角色就可以移动的时候产生影子了。
- # -- 其他的事件
- #
- # 事件可不会知道他们如何会产生阴影。如果想让他们产生影子的话,你只需要在相应
- # 的事件页里放置一个解释,解释的事件里只需要一句短语“begin Shadow”(注意!
- # 不要带引号!)。
- #
- # -- 阻挡阴影
- # 为了防止当穿过一些可以移动的事件时候还有影子,例如门,墙壁,橱柜或者其他类
- # 型的家具,你需要在这些事件里面使用“与角色相同”或者”在角色上方“的优先级
- # 。在普通的情况下,在默认图块里的墙等物体,没有优先级标志,那么他们就仅仅阻
- # 挡玩家通行。
- #
- #------------------------------------------------------------------------------
- #
- # 更新日志
- #
- # 1) 在脚本中增添了更人性化的标签和标题头。
- # 2) 在XPML模块里压缩了关键字分隔符和参数。
- # 3) 为了降低资源,将太阳产生的影子数组设成了实例变量。
- # 4) 与Near Fantastica 的人物跟随脚本兼容。
- # 5) 与Ccoa的人物跟随脚本兼容。
- # 6) 与Trickster的人物跟随脚本兼容。
- # 7) 在设定区段增加了默认的影子设定。
- #
- #==============================================================================
- #========================================================================
- # 设 定 系 统 部 分 #
- #========================================================================
- # 跟随系统部分设定(如果选用了相应的系统请选true,否则选false)
- CATERPILLAR_COMPATIBLE = true # 原版跟随系统兼容开关
- SQUAD_MOVE_COMPATIBLE = false # Near Fantastica的跟随系统兼容开关
- CCOA_CATER_COMPATIBLE = false # Ccoa的跟随系统兼容开关
- TRICKSTER_CATER_COMPATIBLE = false # Trickster的跟随系统兼容开关
-
- #阴影系统的特殊设定
- SHADOW_WARN = true # 检查是否兼容老版本的阴影系统
- SHADOW_MIN = 0 # 光源发光的起始扇形弧度
- SHADOW_MAX = 0 # 光源发光的结束扇形弧度
- SHADOW_OPACITY = 150 # 影子的深度
- SHADOW_DISTANCE = 350 # 光源的强度(单位为像素)
- # 光源的弧度 单位为角度,这个是控制光源强制往某个特定的角度发光,从
- # 而使其产生阴影。这个在绘制挂在墙壁上的灯的时候特别有用。
- # 从而防止他产生透过墙壁的阴影。
- #
- # 如果能准确的确定90度为界限的发射方向,还得需要好好的练习
- # 。例如,0-90度是右上方向部分,90-180度是左上方向的部分等
- # 等,以逆时针方向旋转。
- #
- #========================================================================
- # 设 定 部 分 结 束 #
- #========================================================================
-
-
- #==============================================================================
- # ■ Game_Temp
- #------------------------------------------------------------------------------
- # 在没有存档的情况下,处理临时数据的类。这个类的实例请参考 $game_temp 。
- #=============================================================================
- class Game_Temp
- #--------------------------------------------------------------------------
- # ● 定义实例变量
- #--------------------------------------------------------------------------
- attr_accessor :shadow_spriteset # 维持影子的活动块
- end
- #==============================================================================
- # ■ Game_Party
- #------------------------------------------------------------------------------
- # 处理同伴的类。包含金钱以及物品的信息。本类的实例请参考 $game_party。
- #==============================================================================
- class Game_Party
- #--------------------------------------------------------------------------
- # ● 定义实例变量
- #--------------------------------------------------------------------------
- attr_reader :characters
- end
- #==============================================================================
- # Sprite_Shadow
- #------------------------------------------------------------------------------
- # 根据角色的地图位置来处理角色阴影角度的精灵(活动块)类。Game_Character 类的实例
- # 监视、活动块状态的自动变化。
- #==============================================================================
- class Sprite_Shadow < Sprite_Base
- #--------------------------------------------------------------------------
- # ● 定义实例变量
- #--------------------------------------------------------------------------
- attr_accessor :character
- #--------------------------------------------------------------------------
- # ● 初始化对象
- # viewport : 显示端口
- # character : 角色 (Game_Character)
- # id : 角色ID
- #--------------------------------------------------------------------------
- def initialize(viewport, character = nil, id = 0)
- super(viewport)
- params = $game_temp.shadow_spriteset.shadows[id]
- @source = params[0]
- # 默认设置
- @anglemin = SHADOW_MIN
- @anglemax = SHADOW_MAX
- @self_opacity = SHADOW_OPACITY
- @distancemax = SHADOW_DISTANCE
- # 根据参数设置
- @anglemin = params[1] if params.size > 1
- @anglemax = params[2] if params.size > 2
- @distancemax = params[3] if params.size > 3
- @self_opacity = params[4] if params.size > 4
- @character = character
- update
- end
- #--------------------------------------------------------------------------
- # ● 更新画面
- #--------------------------------------------------------------------------
- def update
- # 如果影子在光源范围之外的情况下
- if !in_range?(@character, @source, @distancemax)
- self.opacity = 0
- return
- end
- super
- # 在图块ID,文件名或者色相不同于当前的情况下
- if @tile_id != @character.tile_id or
- @character_name != @character.character_name or
- @character_index != @character.character_index
- @tile_id = @character.tile_id
- @character_name = @character.character_name
- @character_index = @character.character_index
- if @tile_id > 0
- sx = (@tile_id / 128 % 2 * 8 + @tile_id % 8) * 32;
- sy = @tile_id % 256 / 8 % 16 * 32;
- set_number = @tile_id / 256
- self.bitmap = Cache.system("TileB") if set_number == 0
- self.bitmap = Cache.system("TileC") if set_number == 1
- self.bitmap = Cache.system("TileD") if set_number == 2
- self.bitmap = Cache.system("TileE") if set_number == 3
- self.src_rect.set(sx, sy, 32, 32)
- self.ox = 16
- self.oy = 32
- else
- self.bitmap = Cache.character(@character_name)
- sign = @character_name[/^[\!\$]./]
- if sign != nil and sign.include?('$')
- @cw = bitmap.width / 3
- @ch = bitmap.height / 4
- else
- @cw = bitmap.width / 12
- @ch = bitmap.height / 8
- end
- self.ox = @cw / 2
- self.oy = @ch
- end
- end
- # 设置可见状况
- self.visible = (not @character.transparent)
- # 如果画面是角色的情况下
- if @tile_id == 0
- index = @character.character_index
- pattern = @character.pattern < 3 ? @character.pattern : 1
- # 矩形本体设定
- sx = (index % 4 * 3 + pattern) * @cw
- sy = (index / 4 * 4 + (@character.direction - 2) / 2) * @ch
- if self.angle > 90 or angle < -90
- sy = ( 4 - 2) / 2 * @ch if @character.direction == 6
- sy = ( 6 - 2) / 2 * @ch if @character.direction == 4
- sy = ( 8 - 2) / 2 * @ch if @character.direction == 2
- sy = ( 2 - 2) / 2 * @ch if @character.direction == 8
- end
- self.src_rect.set(sx, sy, @cw, @ch)
- end
- # 设置精灵(活动块)的坐标
- self.x = @character.screen_x
- self.y = @character.screen_y-5
- self.z = 10 #@character.screen_z-1
- # 设置合成方式和草木深度
- self.blend_type = @character.blend_type
- self.bush_depth = @character.bush_depth
- # 显示动画
- if @character.animation_id != 0
- animation = $data_animations[@character.animation_id]
- animation(animation, true)
- @character.animation_id = 0
- end
- @deltax = @source.screen_x - self.x
- @deltay = @source.screen_y - self.y
- self.color = Color.new(0, 0, 0)
- @distance = ((@deltax ** 2) + (@deltay ** 2))
- # 按照光源离自己的距离来设置透明度
- self.opacity = @self_opacity * 13000 /
- ((@distance * 370 / @distancemax) + 6000)
- self.angle = 57.3 * Math.atan2(@deltax, @deltay )
- @angle_trigo = self.angle+90
- if @angle_trigo < 0
- @angle_trigo = 360 + @angle_trigo
- end
- if @anglemin != 0 or @anglemax != 0
- if (@angle_trigo < @anglemin or @angle_trigo > @anglemax) and
- @anglemin < @anglemax
- self.opacity = 0
- return
- end
- if (@angle_trigo < @anglemin and @angle_trigo > @anglemax) and
- @anglemin > @anglemax
- self.opacity=0
- return
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 范围脚本 (从Near的防卡脚本中获取,已编辑)
- # element: 元件
- # object : 对象
- # range : 图块间的范围
- #--------------------------------------------------------------------------
- def in_range?(element, object, range)
- x = (element.screen_x - object.screen_x) * (element.screen_x - object.screen_x)
- y = (element.screen_y - object.screen_y) * (element.screen_y - object.screen_y)
- r = x + y
- if r <= (range * range)
- return true
- else
- return false
- end
- end
- end
- #==============================================================================
- # ■ Sprite_Character
- #------------------------------------------------------------------------------
- # 角色显示用脚本。监视 Game_Character 类的实例、自动变化脚本状态。
- #==============================================================================
- class Sprite_Character < Sprite_Base
- #--------------------------------------------------------------------------
- # ● 重命名函数列表
- #--------------------------------------------------------------------------
- alias shadow_initialize initialize
- alias shadow_update update
- #--------------------------------------------------------------------------
- # ● 初始化对像
- # viewport : 显示端口
- # character : 角色 (Game_Character)
- #--------------------------------------------------------------------------
- def initialize(viewport, character = nil)
- @viewport0 = Viewport.new(0, 0, 544, 416)
- @viewport0.z = 1
- @character = character
- super(viewport)
- @ombrelist = Array.new
- @ombrelist = []
- if character.is_a?(Game_Event) and $game_temp.shadow_spriteset.shadows != []
- params = XPML.XPML_read("Shadow", @character.id, 5)
- if params != nil
- for i in 0...$game_temp.shadow_spriteset.shadows.size
- @ombrelist.push(Sprite_Shadow.new(@viewport0, @character,i))
- end
- end
- end
- if character.is_a?(Game_Player) and $game_temp.shadow_spriteset.shadows != []
- for i in 0...$game_temp.shadow_spriteset.shadows.size
- @ombrelist.push(Sprite_Shadow.new(@viewport0, $game_player,i))
- end
- #===================================================
- # ● 与人物跟随功能兼容脚本
- #===================================================
- if CATERPILLAR_COMPATIBLE and $game_party.characters != nil
- for member in $game_party.characters
- for i in 0...$game_temp.shadow_spriteset.shadows.size
- @ombrelist.push(Sprite_Shadow.new(@viewport0, member, i))
- end
- end
- end
- if SQUAD_MOVE_COMPATIBLE and $game_allies.values != nil
- for member in $game_allies.values
- for i in 0...$game_temp.shadow_spriteset.shadows.size
- @ombrelist.push(Sprite_Shadow.new(@viewport0, member, i))
- end
- end
- end
- if CCOA_CATER_COMPATIBLE and $game_train.actors != nil
- for member in $game_train.actors
- for i in 0...$game_temp.shadow_spriteset.shadows.size
- @ombrelist.push(Sprite_Shadow.new(@viewport0, member, i))
- end
- end
- end
- if TRICKSTER_CATER_COMPATIBLE and $game_party.followers != nil
- for member in $game_party.followers
- for i in 0...$game_temp.shadow_spriteset.shadows.size
- @ombrelist.push(Sprite_Shadow.new(@viewport0, member, i))
- end
- end
- end
- #===================================================
- # ● 兼容脚本结束
- #===================================================
- end
- # 执行原始函数调用
- shadow_initialize(viewport, @character)
- end
- #--------------------------------------------------------------------------
- # ● 更新画面
- #--------------------------------------------------------------------------
- def update
- shadow_update
- if @ombrelist != []
- for i in [email protected]
- @ombrelist[i].update
- end
- end
- end
- end
- #==================================================================================
- # ■ Game_Event
- #------------------------------------------------------------------------------
- # 处理事件的类。条件判断、事件页的切换、并行处理、执行事件功能
- # 在 Game_Map 类的内部使用。
- #==================================================================================
- class Game_Event < Game_Character
- #--------------------------------------------------------------------------
- # ● 定义实例变量
- #--------------------------------------------------------------------------
- attr_accessor :id
- end
- #==================================================================================
- # ■ Spriteset_Map
- #------------------------------------------------------------------------------
- # 处理地图画面活动块和元件的类。本类在 Scene_Map 类的内部使用。
- #================================================================================
- class Spriteset_Map
- #--------------------------------------------------------------------------
- # ● 定义实例变量
- #--------------------------------------------------------------------------
- attr_accessor :shadows
- #--------------------------------------------------------------------------
- # ● 重命名函数列表
- #--------------------------------------------------------------------------
- alias shadow_initialize initialize
- #--------------------------------------------------------------------------
- # ● 初始化对象
- #--------------------------------------------------------------------------
- def initialize
- $game_temp.shadow_spriteset = self
- @shadows = []
- warn = false
- for k in $game_map.events.keys.sort
- if ($game_map.events[k].list != nil and
- $game_map.events[k].list[0].code == 108 and
- ($game_map.events[k].list[0].parameters == ["s"] or
- $game_map.events[k].list[0].parameters == ["o"]))
- warn = true
- end
- params = XPML.XPML_read("Shadow Source", k, 5)
- if params != nil
- $game_temp.shadow_spriteset.shadows.push([$game_map.events[k]] + params)
- end
- end
- if warn == true and SHADOW_WARN
- p "警告:在地图上至少有一个事件使用了过去的方法来添加阴影效果"
- end
- # 执行原始函数调用
- shadow_initialize
- end
- end
- #==============================================================================
- # ■ module XPML
- #------------------------------------------------------------------------------
- # 本模块用来读取并传递注释中的参数。
- #
- # 使用此模块的主要用途就是检查和读出事件的注释。
- # * 标记的关键字的注明方法:
- # begin 关键字
- # * 注意参数之间必须用关键字隔开。
- # * 调用此函数的方法:
- # XPML_read("关键字",事件ID,读取参数的最大值)
- # * 最后一项可以忽略,默认为整个事件。
- # * 赋值方法:
- # 变量名 参数
- # * 每个变量名和参数各占一行。
- # * 如果指明的关键字在事件里面不存在的话,则返回nil。
- # * 如果两个标记之间没有参数的话,则返回空数组。
- # * 如果参数中有数字参数的话,会自动返回为数字变量。
- # 举例:在一个事件中的注释写入
- # begin first # 第一关键字
- # begin second #第二关键字
- # 变量1 1
- # 变量2 two
- # begin third #第三关键字
- # 任何东西 3
- # 然后得出转换结果:
- # p XPML_read("first", event_id) -> [] #第一关键字和第二关键字没有参数
- # p XPML_read("second", event_id) -> [1,"two"] #第二关键字和第三关键字之间有2个参数
- # p XPML_read("third", event_id) -> [3] #第三关键字之间有一个参数
- # p XPML_read("forth", event_id) -> nil #找不到第四关键字则返回nil
- #===================================================
- module XPML
- module_function
- #--------------------------------------------------------------------------
- # ● XPML_read
- # markup : 需要在文件注释里检查的关键字。
- # event_id : 事件ID
- # max_param_number : 读取参数/注释的最大值,0为事件内的所有注释
- #--------------------------------------------------------------------------
- def XPML_read(markup, event_id, max_param_number = 0)
- parameter_list = nil
- event = $game_map.events[event_id]
- return if event.list == nil
- for i in 0...event.list.size
- if event.list[i].code == 108 and
- event.list[i].parameters[0].downcase == "begin " + markup.downcase
- parameter_list = [] if parameter_list == nil
- for j in i + 1...event.list.size
- if event.list[j].code == 108
- parts = event.list[j].parameters[0].split
- if parts.size != 1 and parts[0].downcase != "begin"
- if parts[1].to_i != 0 or parts[1] == "0"
- parameter_list.push(parts[1].to_i)
- else
- parameter_list.push(parts[1])
- end
- else
- return parameter_list
- end
- else
- return parameter_list
- end
- if max_param_number != 0 and j == i + max_param_number
- return parameter_list
- end
- end
- end
- end
- return parameter_list
- end
- end
复制代码 [LINE]1,#dddddd[/LINE]版主对此帖的认可:『800for debug&重写 1200for 翻译 200 for 讲解』,积分『+2200』。
顺手贴一个XP的影子脚本(由于用法十分简单,就不放工程了。p.s.光线是无限远的。)
- #使用方法:不透明的物体在光源旁边会产生一个阴影。
- #所以,在光源的事件里面(例如火),请在第一页加上一个注释“s”(请不要带引号)
- #然后将此脚本命名为“人物阴影”插入到main上方即可。
- #==============================================================================
- # ■ 阴影精灵 (渐变精灵 )
- # 以 Genzai Kawakami的阴影脚本为基础,
- # Rataime为其重写和更新,
- # Boushy 为其添加附属功能
- # 精灵使者汉化
- #==============================================================================
- CATERPILLAR_COMPATIBLE = true
- class Game_Party
- attr_reader :characters
- end
- class Sprite_Shadow < RPG::Sprite
- attr_accessor :character
- def initialize(viewport, character = nil,source = nil,anglemin=0,anglemax=0,distancemax=0)
- super(viewport)
- @anglemin=anglemin.to_f
- @anglemax=anglemax.to_f
- @distancemax=distancemax.to_f
- @character = character
- @source = source
- update
- end
- def update
- super
-
- if @tile_id != @character.tile_id or
- @character_name != @character.character_name or
- @character_hue != @character.character_hue
- @tile_id = @character.tile_id
- @character_name = @character.character_name
- @character_hue = @character.character_hue
- if @tile_id >= 384
- self.bitmap = RPG::Cache.tile($game_map.tileset_name,
- @tile_id, @character.character_hue)
- self.src_rect.set(0, 0, 32, 32)
- self.ox = 16
- self.oy = 32
- else
- self.bitmap = RPG::Cache.character(@character.character_name,
- @character.character_hue)
- @cw = bitmap.width / 4
- @ch = bitmap.height / 4
- self.ox = @cw / 2
- self.oy = @ch
- end
- end
- self.visible = (not @character.transparent)
- if @tile_id == 0
- sx = @character.pattern * @cw
- sy = (@character.direction - 2) / 2 * @ch
- if self.angle>90 or angle<-90
- if @character.direction== 6
- sy = ( 4- 2) / 2 * @ch
- end
- if @character.direction== 4
- sy = ( 6- 2) / 2 * @ch
- end
- if @character.direction== 2
- sy = ( 8- 2) / 2 * @ch
- end
- if @character.direction== 8
- sy = ( 2- 2) / 2 * @ch
- end
- end
- self.src_rect.set(sx, sy, @cw, @ch)
- end
- self.x = @character.screen_x
- self.y = @character.screen_y-5
- self.z = @character.screen_z(@ch)-1
- self.opacity = @character.opacity
- self.blend_type = @character.blend_type
- self.bush_depth = @character.bush_depth
- if @character.animation_id != 0
- animation = $data_animations[@character.animation_id]
- animation(animation, true)
- @character.animation_id = 0
- end
- @[email protected]
- @deltay= @source.y-self.y
- self.angle = 57.3*Math.atan2(@deltax, @deltay )
- @angle_trigo=self.angle+90
- if @angle_trigo<0
- @angle_trigo=360+@angle_trigo
- end
- self.color = Color.new(0, 0, 0)
- @distance = ((@deltax ** 2) + (@deltay ** 2))
- if$game_map.shadows==-1
- self.opacity = 0
- else
- self.opacity = 1200000/(@distance+6000)
- end
- @distance = @distance ** 0.5
- if @distancemax !=0 and @distance>=@distancemax
- self.opacity=0
- end
- if @anglemin !=0 or @anglemax !=0
- if (@angle_trigo<@anglemin or @angle_trigo>@anglemax) and @anglemin<@anglemax
- self.opacity=0
- end
- if (@angle_trigo<@anglemin and @angle_trigo>@anglemax) and @anglemin>@anglemax
- self.opacity=0
- end
- end
- end
- end
- #===================================================
- # ■ 重定义 Sprite_Character
- #===================================================
- class Sprite_Character < RPG::Sprite
- alias shadow_initialize initialize
-
- def initialize(viewport, character = nil)
- @character = character
- super(viewport)
- @ombrelist=[]
- if (character.is_a?(Game_Event) and character.list!=nil and character.list[0].code == 108 and character.list[0].parameters == ["s"])
- if (character.list[1]!=nil and character.list[1].code == 108)
- @anglemin=character.list[1].parameters[0]
- end
- if (character.list[2]!=nil and character.list[2].code == 108)
- @anglemax=character.list[2].parameters[0]
- end
- if (character.list[3]!=nil and character.list[3].code == 108)
- @distancemax=character.list[3].parameters[0]
- end
- for i in $game_map.events.keys.sort
- if ($game_map.events[i].is_a?(Game_Event) and $game_map.events[i].list!=nil and $game_map.events[i].list[0].code == 108 and $game_map.events[i].list[0].parameters == ["o"])
- @ombrelist[i+1] = Sprite_Shadow.new(viewport, $game_map.events[i],self,@anglemin,@anglemax,@distancemax)
- end
- end
- @ombrelist[1] = Sprite_Shadow.new(viewport, $game_player,self,@anglemin,@anglemax,@distancemax)
- #===================================================
- # ● 原装人物跟随兼容脚本
- #===================================================
- if CATERPILLAR_COMPATIBLE and $game_party.characters!=nil
- for member in $game_party.characters
- @ombrelist.push(Sprite_Shadow.new(viewport, member,self,@anglemin,@anglemax,@distancemax))
- end
- end
- #===================================================
- # ● 兼容脚本结束
- #===================================================
- end
- shadow_initialize(viewport, @character)
- end
-
- alias shadow_update update
-
- def update
- shadow_update
- if @ombrelist!=[]
- for i in [email protected]
- if @ombrelist[i]!=nil
- @ombrelist[i].update
- end
- end
- end
- end
-
- end
- #===================================================
- # ■ 新定义类Scene_Save
- #===================================================
- class Scene_Save < Scene_File
-
- alias shadows_write_save_data write_save_data
-
- def write_save_data(file)
- $game_map.shadows = nil
- shadows_write_save_data(file)
- end
- end
- #===================================================
- # ■ 新定义类 Game_Map
- #===================================================
- class Game_Map
- attr_accessor :shadows
- end
复制代码 |
|