Jeśli chodzi o oświetlenie to mogę zaproponować coś takiego:
#==============================================================================
# ** Dynamic Lights
#------------------------------------------------------------------------------
# by kellessdee
# Version: 1.00
# Date: 23/05/2011
#------------------------------------------------------------------------------
# Version History:
#
# 1.00 - First release
#------------------------------------------------------------------------------
# Description:
#
# Allows the user to set up dynamic lights on the game map
#------------------------------------------------------------------------------
# Compatibility:
#
#------------------------------------------------------------------------------
# Instructions:
#
# To create an event as a light source, create an event and set the first
# command as a comment. The syntax is as follows:
# render_light filename
# radius
# tone_red tone_green tone_blue
# flicker
# glow
# brightness
#------------------------------------------------------------------------------
# Parameters:
#
# filename :the light picture file
# radius :radius in pixels
# tone_red :tone red value to be mixed (0 - 255)
# tone_green :tone green value to be mixed (0 - 255)
# tone_blue :tone blue value to be mixed (0 - 255)
# flicker :type true if you want the lights to flicker
# glow :type true if you want the lights to glow
# brightness :the brightness of the light source (0 - 255)
#------------------------------------------------------------------------------
# Notes:
#
# Any questions, comments or issues you may reach me at:
#
# kellessdee@gmail.com
# http://www.rmxpunlimited.com/forums (look for kellessdee)
# http://wakingdreams.weebly.com/
#
#==============================================================================
#==============================================================================
# ** Sprite_Light_Source
#------------------------------------------------------------------------------
# Displays the light on the screen
#==============================================================================
class Light_Source < Sprite
#----------------------------------------------------------------------------
# * Constants
#----------------------------------------------------------------------------
DEFAULT = 'light_render'
#----------------------------------------------------------------------------
# * Public Instance Variables
#----------------------------------------------------------------------------
attr_accessor :event
#----------------------------------------------------------------------------
# * Object Initialization
#----------------------------------------------------------------------------
def initialize(event, radius, tone, flicker, glow, brightness, filename)
super()
self.z = 1000
self.tone = tone
self.opacity = brightness
self.x = (event.real_x - radius * 2 - $game_map.display_x) / 4 + 12
self.y = (event.real_y - radius * 2 - $game_map.display_y) / 4 + 6
bmp = filename == nil ? RPG::Cache.picture(DEFAULT) : RPG::Cache.picture(filename)
self.bitmap = Bitmap.new(radius, radius)
self.bitmap.stretch_blt(Rect.new(0, 0, radius, radius), bmp, bmp.rect)
@radius = radius
@brightness = brightness
@event = event
@flicker = flicker
@glow = glow
@step = 0.001
@flicker_count = -1
@count = 0
end
#----------------------------------------------------------------------------
# * Update Frame
#----------------------------------------------------------------------------
def update
# Update flicker effect
if @flicker
self.opacity += rand(5) * @flicker_count
@flicker_count = -@flicker_count if self.opacity >= @brightness || self.opacity <= 0
end
# Update Glow effect
if @glow
self.zoom_x += @step
self.zoom_y += @step
@count += 1
if @count == 220
@step = -@step
@count = 0
end
end
self.x = (@event.real_x - (@radius * 2).to_f * self.zoom_x - $game_map.display_x) / 4 + 12
self.y = (@event.real_y - (@radius * 2).to_f * self.zoom_y - $game_map.display_y) / 4 + 6
end
end
#==============================================================================
# ** Spriteset_Map
#------------------------------------------------------------------------------
# Redefine initialization to create light array
# Redefine update to update light array
# Redefine dispose to destroy light array
# Added render light method to set up light array
#==============================================================================
class Spriteset_Map
#----------------------------------------------------------------------------
# * Method Aliases
#----------------------------------------------------------------------------
unless self.method_defined?(:new_light_render_init)
alias :new_light_render_init :initialize
end
unless self.method_defined?(:new_light_render_updt)
alias :new_light_render_updt :update
end
unless self.method_defined?(:new_light_render_disp)
alias :new_light_render_disp :dispose
end
#----------------------------------------------------------------------------
# * Object Initialization
#----------------------------------------------------------------------------
def initialize
@light_source = []
render_light_source
new_light_render_init
end
#----------------------------------------------------------------------------
# * Update Frame
#----------------------------------------------------------------------------
def update
@light_source.each {|light| light.update } unless @light_source == []
new_light_render_updt
end
#----------------------------------------------------------------------------
# * Dispose Object
#----------------------------------------------------------------------------
def dispose
new_light_render_disp
@light_source.each {|light| light.dispose }
@light_source = []
end
#----------------------------------------------------------------------------
# * Render Light Source
#----------------------------------------------------------------------------
def render_light_source
$game_map.events.values.each {|event|
next if event.list == nil
if event.list[0].code == 108 && event.list[0].parameters[0].split[0] == 'render_light'
# Get file name
filename = event.list[0].parameters[0].split[1]
parms = []
(1..5).each {|i|
if event.list[i].code == 108
parms << event.list[i].parameters
end
}
5.times {|i| parms[i] = [0] if parms[i] == [nil] }
# Get Radius
rad = parms[0][0].to_i
t = parms[1][0].split
ton = Tone.new(-t[0].to_i, -t[1].to_i, -t[2].to_i)
fli = (parms[2] == ['true'])
glo = (parms[3] == ['true'])
bri = parms[4][0].to_i
@light_source << Light_Source.new(event, rad, ton, fli, glo, bri, filename)
@light_source << Light_Source.new(event, rad + 50, ton, fli, glo, bri - 25, filename)
@light_source << Light_Source.new(event, rad + 100, ton, fli, glo, bri - 50, filename)
end
}
end
end
W skrócie, skrypt pozwala na stworzenie światła o różnych barwach lub efektu migania (jak u świeczki o którą Ci chodzi). Tworzysz zdarzenie które ma emitować światło, a następnie dopisujesz do niego 6 komentarzy. Każda linijka będzie zawierała informacje o tym, jak owe światło ma się zachowywać - jaki ma mieć zasięg, barwę, jasność, czy ma migotać itp.
Instrukcja jest w skrypcie, a demo można pobrać tutaj:
http://dl.dropbox.com/u/30100812/DynamicLighting.rar
Źródło:
http://www.gdunlimited.net/forums/topic/...g-effects/
Skryptu na nazwy nad zdarzeniami nie trzeba było daleko szukać, bo jeden zakurzył się na starej ultimie. Proszę:
#===============================================================
# [XP] Unoszące się nazwy zdarzeń
# Skrypt wyświetla na mapie nazwy zdarzeń.
# Skrypt przerobiony z wersji VX na XP by Ayene
#--------------------------------------------------------------
# Autor VX: Woratana [woratana@hotmail.com]
# Tłumaczenie i poprawki: Ayene [yurika@o2.pl]
#--------------------------------------------------------------
# Umieść skrypt nad Main
#=================================================================
module Ayene
KOLOR_CZCIONKI = Color.new(0,0,127, 255) # Kolor RGB i przezroczystość 0~255
ROZMIAR_CZCIONKI = 16 # Rozmiar czcionki
NAZWA_CZCIONKI = "Arial" # Czcionka (folder Fonts)
KURSYWA = false # Kursywa (true / false)
POGRUBIENIE = false # Pogrubienie (true / false)
end
class Sprite_Character < RPG::Sprite
#=================================================================
# POCZĄTEK KONFIGURACJI
#=================================================================
FLOAT_NAME_SHOW_ALL = false
# Czy chcesz, aby wyświetlały się nazwy wszystkich zdarzeń?
# (true - tak / false - nie)
# Jeżeli wybrano u góry false, nazwę zdarzenia można wyświetlić dopisując [FS]
# w jego edycji...
# np. Statek[FS]
FLOAT_NAME_SHOW_TAG = '[FS]'
# Jeżeli wybrano u góry true, nazwę zdarzenia można ukryć dopisując [FNS]
# w jego edycji...
# np. Statek[FNS]
FLOAT_NAME_NOT_SHOW_TAG = '[FNS]'
# Tutaj można ukryć słowa, które mają się nie wyświetlać w nazwie zdarzenia
# np. FLOAT_NAME_NOT_SHOW_WORDS = ['[ny]', '[ss]', 'lol']
# Wówczas w nazwie zdarzenia nie wyświetlą się słowa [ny], [ss] i lol.
FLOAT_NAME_NOT_SHOW_WORDS = []
FLOAT_NAME_X_OFFSET = 10 # Przesunięcie nazwy zdarzenia w poziomie (+ / -)
FLOAT_NAME_Y_OFFSET = 0 # Przesunięcie nazwy zdarzenia w pionie (+ / -)
FLOAT_NAME_Z = 198 # Przesunięcie nazwy zdarzenia nad (+) lub pod (-) inne zdarzenia.
#=================================================================
# KONIEC KONFIGURACJI
#=================================================================
alias wora_floatevn_sprcha_dis dispose
alias wora_floatevn_sprcha_upd update
def dispose
if !@charname_box.nil? and @charname_box.is_a?(Sprite)
@charname_box.bitmap.dispose
@charname_box.dispose
end
wora_floatevn_sprcha_dis
end
def update
wora_floatevn_sprcha_upd
if @character.is_a?(Game_Event)
if @charname_box.nil?
if (FLOAT_NAME_SHOW_ALL and !@character.event.name.include?(FLOAT_NAME_NOT_SHOW_TAG)) or
(!FLOAT_NAME_SHOW_ALL and @character.event.name.include?(FLOAT_NAME_SHOW_TAG))
@float_charname = @character.event.name.dup
not_show_words = FLOAT_NAME_NOT_SHOW_WORDS.clone.push FLOAT_NAME_SHOW_TAG,
FLOAT_NAME_NOT_SHOW_TAG
not_show_words.each {|w| @float_charname.gsub!(w) {''} }
@charname_box = Sprite.new
@charname_box.z = FLOAT_NAME_Z
bitmap = Bitmap.new(1,1)
nsize = bitmap.text_size(@float_charname)
bitmap.dispose
@charname_box.bitmap = Bitmap.new(nsize.width, nsize.height)
@charname_box.bitmap.font.color = Ayene::KOLOR_CZCIONKI
@charname_box.bitmap.font.size = Ayene::ROZMIAR_CZCIONKI
@charname_box.bitmap.font.name = Ayene::NAZWA_CZCIONKI
@charname_box.bitmap.font.italic = Ayene::KURSYWA
@charname_box.bitmap.font.bold = Ayene::POGRUBIENIE
@charname_box.bitmap.draw_text(0, 0, nsize.width, nsize.height, @float_charname)
else
@charname_box = 0
end
end
if @charname_box.is_a?(Sprite)
# @charname_box.x = self.x + FLOAT_NAME_X_OFFSET
# @charname_box.y = self.y + FLOAT_NAME_Y_OFFSET
@charname_box.x = self.x - (@charname_box.bitmap.width / 2) + FLOAT_NAME_X_OFFSET
@charname_box.y = self.y - self.oy - @charname_box.bitmap.height + FLOAT_NAME_Y_OFFSET
end
end
end
end
class Game_Event < Game_Character
attr_reader :event
end
Instrukcja w skrypcie jest po polsku, więc nie powinno być problemu z jego używaniem.
Źródło:
http://www.ultimateam.pl/viewtopic.php?t=2430