赞 | 138 |
VIP | 123 |
好人卡 | 5 |
积分 | 271 |
经验 | 44877 |
最后登录 | 2019-12-24 |
在线时间 | 1535 小时 |
Lv5.捕梦者
- 梦石
- 0
- 星屑
- 27118
- 在线时间
- 1535 小时
- 注册时间
- 2006-1-10
- 帖子
- 2063
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
rpgmakervx.net
在上面看中了几个脚本,请人翻译讲解一下~~~{/wx}
Sprite Shadows/Sprite Sun VX
http://www.rpgmakervx.net/index.php?showtopic=5623
影子效果
How to Use
Place these scripts above main, with the Spriteset Map script above the other two. Instructions are included inside.
The 'anglemin' and the 'anglemax' values are set in degrees, in a counterclockwise manner. For example, if i want to make a shadow source that casts shadows only in a right angle, id add to the event
anglemin 0
anglemax 90
Here is a picture for reference
Also, for Sprite Shadow, when adding optional values for 'distancemax' and 'self_opacity' you have to specify 'anglemin' and 'anglemax' before them, otherwise it won't work. Here is how it should be:
anglemin 'value'
anglemax 'value'
distancemax 'value'
self_opacity 'value'
Scripts
- #==============================================================================
- # ** Spriteset_Map
- #------------------------------------------------------------------------------
- # This class edits problems cause by Sprite_Shadow and Sprite_Sun
- #==============================================================================
- class Spriteset_Map
- #--------------------------------------------------------------------------
- # * Alias Listings
- #--------------------------------------------------------------------------
- alias create_viewports_original create_viewports
- alias dispose_viewports_original dispose_viewports
- alias update_viewports_original update_viewports
- alias update_tilemap_original update_tilemap
- alias dispose_tilemap_original dispose_tilemap
- alias create_tilemap_original create_tilemap
- #--------------------------------------------------------------------------
- # * Create Viewport
- #--------------------------------------------------------------------------
- def create_viewports
- create_viewports_original
- @viewport0 = Viewport.new(0, 0, 544, 416)
- @viewport0.z = 1
- @viewport1.z = 20
- end
- #--------------------------------------------------------------------------
- # * Create Tilemap
- #--------------------------------------------------------------------------
- def create_tilemap
- create_tilemap_original
- @tilemap0 = Tilemap.new(@viewport0)
- @tilemap0.bitmaps[0] = Cache.system("TileA1")
- @tilemap0.bitmaps[1] = Cache.system("TileA2")
- @tilemap0.bitmaps[4] = Cache.system("TileA5")
- @tilemap = Tilemap.new(@viewport1)
- @tilemap.bitmaps[2] = Cache.system("TileA3")
- @tilemap.bitmaps[3] = Cache.system("TileA4")
- @tilemap.bitmaps[5] = Cache.system("TileB")
- @tilemap.bitmaps[6] = Cache.system("TileC")
- @tilemap.bitmaps[7] = Cache.system("TileD")
- @tilemap.bitmaps[8] = Cache.system("TileE")
- @tilemaps = [@tilemap, @tilemap0]
- @tilemaps.each {|x| x.map_data = $game_map.data}
- @tilemaps.each {|x| x.passages = $game_map.passages}
- end
- #--------------------------------------------------------------------------
- # * Dispose of Tilemap
- #--------------------------------------------------------------------------
- def dispose_tilemap
- dispose_tilemap_original
- @tilemap0.dispose
- end
- #--------------------------------------------------------------------------
- # * Dispose of Viewport
- #--------------------------------------------------------------------------
- def dispose_viewports
- @viewport0.dispose
- dispose_viewports_original
- end
- #--------------------------------------------------------------------------
- # * Update Tilemap
- #--------------------------------------------------------------------------
- def update_tilemap
- update_tilemap_original
- @tilemap0.ox = $game_map.display_x / 8
- @tilemap0.oy = $game_map.display_y / 8
- @tilemap0.update
- end
- #--------------------------------------------------------------------------
- # * Update Viewport
- #--------------------------------------------------------------------------
- def update_viewports
- update_viewports_original
- @viewport0.tone = $game_map.screen.tone
- @viewport0.ox = $game_map.screen.shake
- @viewport0.update
- end
- end
复制代码
- #==============================================================================
- # ** Sprite Sun
- #------------------------------------------------------------------------------
- # Based on Sprite Shadow
- # modified by Rataime
- # New Edits by DerVVulfman
- # Modified for VX by Syvkal
- # Fixes by Painhurt
- # October 14, 2008
- #------------------------------------------------------------------------------
- #
- # Introduction:
- #
- # This system allows you and all 'prepared' events to generate shadows while
- # on the field map. The player can move around while a programmed 'sun' will
- # display a shadow. Likewise, events with a special comment within their
- # event list can also generate shadows.
- #
- #------------------------------------------------------------------------------
- #
- # Instructions:
- #
- # -- The Sun
- # To create a sun effect, you'll need to create a map event that's to be
- # used 'as' the sun itself. Under most circumstances, this will be an
- # event without a characterset graphic. You don't want to 'SEE' the sun,
- # do you?
- #
- # To make one of these events a 'sun, you'll need to insert a couple of
- # things into that event's "List of Event Commands". These things are
- # nothing more than comments.
- #
- # The first comment to add is "begin Sun" (without quotes). It informs
- # the system that this map has a sun effect in use. The remaining two
- # values are optional and have default values in the configuration
- # section (only just added into the script). They too are added as
- # comments.
- #
- # self_angle 'number' --- How much of an angle each shadow will have.
- # self_opacity 'number' --- How dark the shadow will be.
- #
- # After that, your characters can now move about and generate shadows.
- #
- # -- Other Events
- # Events do not know that they can generate shadows. To let them gene-
- # rate a shadow, all you need to do is add a special comment into their
- # "List of Event Commands". This comment needed is merely the phrase
- # 'begin Shadow' (again, without quotes).
- #
- #
- #------------------------------------------------------------------------------
- #
- # Revisions to note:
- #
- # 1) Added formatted headers and comments throughout the script.
- # 2) Encapsulated a comment/parameter code in an XPML module.
- # 3) Set the sun shadow array into an instance value to lower resource costs.
- # 4) Compatability with Near Fantastica's Squad Movement systems.
- # 5) Compatability with Ccoa's Caterpillar system.
- # 6) Compatability with Trickster's Caterpillar system.
- # 7) Added default shadow settings into the configuration section.
- #
- #==============================================================================
- #========================================================================
- # ** C O N F I G U R A T I O N S Y S T E M ** #
- #========================================================================
- # Caterpillar Systems
- CATERPILLAR_COMPATIBLE = true # Toggle for Fukuyama's original
- SQUAD_MOVE_COMPATIBLE = false # Toggle for Near Fantastica's SBABS
- CCOA_CATER_COMPATIBLE = false # Toggle for Ccoa's Caterpillar
- TRICKSTER_CATER_COMPATIBLE = false # Toggle for Trickster's Caterpillar
-
- # Sun Specific Systems
- SUN_WARN = true # Checks for older sun systems
- SUN_ANGLE = 45 # Angle for sun-generated shadow
- SUN_OPACITY = 128 # Darkness setting for sun shadow
-
- #========================================================================
- # **** E N D O F C O N F I G U R A T I O N S Y S T E M **** #
- #========================================================================
-
-
- #==============================================================================
- # ** Game_Temp
- #------------------------------------------------------------------------------
- # This class handles temporary data that is not included with save data.
- # Refer to "$game_temp" for the instance of this class.
- #==============================================================================
- class Game_Temp
- #--------------------------------------------------------------------------
- # * Public Instance Variables
- #--------------------------------------------------------------------------
- attr_accessor :sun_spriteset # holds spritesets for 'sun' shadows
- end
- #==============================================================================
- # ** Game_Party
- #------------------------------------------------------------------------------
- # This class handles the party. It includes information on amount of gold
- # and items. Refer to "$game_party" for the instance of this class.
- #==============================================================================
- class Game_Party
- #--------------------------------------------------------------------------
- # * Public Instance Variables
- #--------------------------------------------------------------------------
- attr_reader :characters
- end
- #==============================================================================
- # ** Sprite_Sun
- #------------------------------------------------------------------------------
- # This sprite is used to position character shadows relative to map position.
- # It observes the Game_Character class and automatically changes sprite
- # conditions.
- #==============================================================================
- class Sprite_Sun < Sprite_Base
- #--------------------------------------------------------------------------
- # * Public Instance Variables
- #--------------------------------------------------------------------------
- attr_accessor :character
- #--------------------------------------------------------------------------
- # * Object Initialization
- # viewport : viewport
- # character : character (Game_Character)
- # id : id
- #--------------------------------------------------------------------------
- def initialize(viewport, character = nil, id=0)
- super(viewport)
- @character = character
- params=$game_temp.sun_spriteset.sun[id]
- self_angle = SUN_ANGLE
- self_opacity = SUN_OPACITY
- self_angle = params[0] if params.size > 0
- self_opacity = params[1] if params.size > 1
- @self_angle = self_angle
- @self_opacity = self_opacity
- update
- end
- #--------------------------------------------------------------------------
- # * Frame Update
- #--------------------------------------------------------------------------
- def update
- super
- # If tile ID, file name, or hue are different from current ones
- 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
- # Set visible situation
- self.visible = (not @character.transparent)
- # If graphic is character
- if @tile_id == 0
- index = @character.character_index
- pattern = @character.pattern < 3 ? @character.pattern : 1
- # Set rectangular transfer
- sx = (index % 4 * 3 + pattern) * @cw
- @direct = @character.direction
- if self.angle > 90 or angle < -90
- sy = ( 4 - 2) / 2 * @ch if @direct == 6
- sy = ( 6 - 2) / 2 * @ch if @direct == 4
- sy = (@character.direction - 2) / 2 * @ch if @direct != 4 and @direct != 6
- else
- sy = (index / 4 * 4 + (@character.direction - 2) / 2) * @ch
- end
- self.src_rect.set(sx, sy, @cw, @ch)
- end
- # Set sprite coordinates
- self.x = @character.screen_x
- self.y = @character.screen_y-5
- self.z = @character.screen_z- 1
- # Set opacity level, blend method, and bush depth
- self.opacity = @self_opacity
- self.blend_type = @character.blend_type
- self.bush_depth = @character.bush_depth
- # Animation
- if @character.animation_id != 0
- animation = $data_animations[@character.animation_id]
- animation(animation, true)
- @character.animation_id = 0
- end
- self.angle = @self_angle.to_i - 90
- self.color = Color.new(0, 0, 0)
- end
- end
- #==============================================================================
- # ** Sprite_Character
- #------------------------------------------------------------------------------
- # This sprite is used to display the character.It observes the Game_Character
- # class and automatically changes sprite conditions.
- #==============================================================================
- class Sprite_Character < Sprite_Base
- #--------------------------------------------------------------------------
- # * Alias Listings
- #--------------------------------------------------------------------------
- alias sun_initialize initialize
- alias sun_update update
- #--------------------------------------------------------------------------
- # * Object Initialization
- # viewport : viewport
- # character : character (Game_Character)
- #--------------------------------------------------------------------------
- def initialize(viewport, character = nil)
- @viewport0 = Viewport.new(0, 0, 544, 416)
- @viewport0.z = 1
- @character = character
- super(viewport)
- @sunlist=[]
- if character.is_a?(Game_Event) and $game_temp.sun_spriteset.sun != []
- params = XPML.XPML_read("Shadow", @character.id, 2)
- if params != nil
- for i in 0...$game_temp.sun_spriteset.sun.size
- @sunlist.push(Sprite_Sun.new(@viewport0, @character, i))
- end
- end
- end
- if character.is_a?(Game_Player) and $game_temp.sun_spriteset.sun != []
- for i in 0...$game_temp.sun_spriteset.sun.size
- @sunlist.push(Sprite_Sun.new(@viewport0, $game_player, i))
- end
- #===================================================
- # * Compatibility with Caterpillar Functions
- #===================================================
- if CATERPILLAR_COMPATIBLE and $game_party.characters != nil
- for member in $game_party.characters
- for i in 0...$game_temp.sun_spriteset.sun.size
- @sunlist.push(Sprite_Sun.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.sun_spriteset.sun.size
- @sunlist.push(Sprite_Sun.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.sun_spriteset.sun.size
- @sunlist.push(Sprite_Sun.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.sun_spriteset.sun.size
- @sunlist.push(Sprite_Sun.new(@viewport0, member, i))
- end
- end
- end
- #===================================================
- # ** End of the compatibility
- #===================================================
- end
- # Perform the original call
- sun_initialize(viewport, @character)
- end
- #--------------------------------------------------------------------------
- # * Frame Update
- #--------------------------------------------------------------------------
- def update
- sun_update
- if @sunlist != []
- for i in [email protected]
- @sunlist[i].update
- end
- end
- end
- end
- #==============================================================================
- # ** Game_Event
- #------------------------------------------------------------------------------
- # This class deals with events. It handles functions including event page
- # switching via condition determinants, and running parallel process events.
- # It's used within the Game_Map class.
- #==============================================================================
- class Game_Event < Game_Character
- #--------------------------------------------------------------------------
- # * Public Instance Variables
- #--------------------------------------------------------------------------
- attr_accessor :id
- end
- #==============================================================================
- # ** Spriteset_Map
- #------------------------------------------------------------------------------
- # This class brings together map screen sprites, tilemaps, etc.
- # It's used within the Scene_Map class.
- #==============================================================================
- class Spriteset_Map
- #--------------------------------------------------------------------------
- # * Public Instance Variables
- #--------------------------------------------------------------------------
- attr_accessor :sun
- #--------------------------------------------------------------------------
- # * Alias Listings
- #--------------------------------------------------------------------------
- alias sun_initialize initialize
- #--------------------------------------------------------------------------
- # * Object Initialization
- #--------------------------------------------------------------------------
- def initialize
- @sun = []
- $game_temp.sun_spriteset = self
- 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 == ["sun"] or
- $game_map.events[k].list[0].parameters == ["o"]))
- warn = true
- end
- params = XPML.XPML_read("Sun", k, 2)
- $game_temp.sun_spriteset.sun.push(params) if params != nil
- end
- if warn == true and SUN_WARN
- p "Warning : At least one event on this map uses an obsolete way to add a sun effect"
- end
- # Perform the original call
- sun_initialize
- end
- end
- #==============================================================================
- # ** module XPML
- #------------------------------------------------------------------------------
- # This module handles the reading and passing of 'comment' parameters
- #
- # The main XPML method is used to check and read event comments.
- # * It returns 'nil' if the markup 'check' text isn't even present.
- # * It returns [] if no parameters are passed
- # * It returns a parameter list with "int" converted as int.
- # eg :
- # begin first
- # begin second
- # param1 1
- # param2 two
- # begin third
- # anything 3
- #
- # p XPML_read("first", event_id) -> []
- # p XPML_read("second", event_id) -> [1,"two"]
- # p XPML_read("third", event_id) -> [3]
- # p XPML_read("forth", event_id) -> nil
- #===================================================
- module XPML
- module_function
- #--------------------------------------------------------------------------
- # * XPML_read
- # markup : text in event comment to check
- # event_id : event ID
- # max_param_number : maximum number of parameter/comments to load
- #--------------------------------------------------------------------------
- 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
复制代码
版务信息:本贴由楼主自主结贴~ |
|