Плохо! Плохо!:  0
Показано с 1 по 6 из 6

Тема: [VX] Реалистичный дождь

  1. #1
    Познающий Аватар для mephis
    Информация о пользователе
    Регистрация
    27.01.2011
    Адрес
    Новосибирск
    Сообщений
    330
    Записей в дневнике
    8
    Репутация: 34 Добавить или отнять репутацию

    По умолчанию [VX] Реалистичный дождь

    Автор: ak47lol
    Перевод: mephis
    Источник: www.rpgmakervx.net/index.php?showtopic=45857


    Реалистичный дождь

    По многочисленным просьбам решил написать туториал о том, как создать эффект идущего дождя.
    В нём я объясню, как с помощью скрипта Multiple Fogs (автор Woratana) можно легко создать красивый и реалистичный дождь в вашей игре.

    Вот примеры такого дождя:

    — в игре:
    Технодемо (80 Мб) Низкая прозрачность
    Технодемо (80 Мб) Высокая прозрачность

    — на видео:
    Низкая прозрачность


    Высокая прозрачность


    Видео снято с игры
    Amulet of Athos: Legend of the Sarian Knights

    ПРИМЕЧАНИЕ:
    Этот эффект невозможно сделать без чудесного скрипта Multiple Fogs Script за авторством Woratana. Не забудьте вписать его в титры!


    ШАГ 1

    Первым делом разыщите скрипт Multiple Fogs, если ещё этого не сделали. Его можно взять в разделе скриптов нашего сайта (прим. пер.: имеется в виду сайт http://www.rpgmakervx.net ). И вставьте его в вашу игру через редактор скриптов, поместите его выше Main.


    ШАГ 2

    Теперь вам надо сделать графику дождя, хотя вы можете взять мою по этой ссылке.
    Мой вариант очень простой, я сделал его буквально за несколько минут в Фотошопе. Так что вы сможете сделать гораздо лучше. Но я не буду возражать, если вы воспользуетесь моим вариантом.

    Рекомендую назвать этот файл Rain.png и положить его в папку Pictures вашего проекта.


    ШАГ 3

    У нас теперь есть всё, что нам надо, поэтому приступим.

    1. Перейдите на карту, где вы хотите сделать эффект дождя.
    2. Создайте на этой карте новый ивент, назовите его Эффект Дождя и установите его в параллельный запуск.
    3. Откройте меню команд этого ивента.
    Перейдите на закладку №3 > Дополнительно > Выполнить скрипт...
    И скопируйте туда приведённый ниже код.

    PHP код:
    $fog.name 'Rain'
    $fog.hue 0
    $fog
    .tone = [0,0,0,0]
    $fog.opacity 190
    $fog
    .blend 1
    $fog
    .zoom 100
    $fog
    .sx 0
    $fog
    .sy 50

    $fog
    .show(1
    Щёлкните OК. Затем ещё раз добавьте такую же команду, но с этим кодом:

    PHP код:
    $fog.name 'Rain'
    $fog.hue 0
    $fog
    .tone = [0,0,0,0]
    $fog.opacity 100
    $fog
    .blend 2
    $fog
    .zoom 130
    $fog
    .sx 2
    $fog
    .sy 50

    $fog
    .show(2
    Вы спросите, а зачем нам два тумана Rain (дождь)?

    Первый будет прокручиваться только вертикально. Это значит, что дождь будет просто лить вниз.

    Второй будет прокручиваться ещё и немного горизонтально, что сделает анимацию намного реалистичнее.

    Обратите внимание, что тип смешивания (blend) и непрозрачность (opacity) второго тумана отличается от первого. Всё это нужно для того, чтобы дождь выглядел лучше. Вы можете поиграть с этими параметрами и подобрать наиболее подходящий для вас вариант.

    Вы также можете поменять значение в строке $fog.sy = 50: чем оно меньше, тем медленнее дождь будет литься на землю.

    4. После команд скрипта добавьте эти:
    Fadein Screen (Показать экран)
    Erase Event (Удалить событие)

    Перед тем, как перенести игрока на эту карту или из неё, УБЕДИТЕСЬ, что у вас выполнится команда Fadeout Screen. Благодаря этому вы не будете видеть дождь во время перехода между картами.

    В итоге, ваш ивент будет выглядеть примерно так:




    Настройки для тёмных карт.

    Если ваши карты очень тёмные и без затенения, то можете использовать указанные ниже настройки.

    Все мои карты довольно тёмные, затенение на большинстве ниже -60. И для них отлично подходят эти настройки тумана. НО, на очень уж тёмных картах, где нет затенения, дождь будет выглядеть довольно паршиво. Поэтому вы ДОЛЖНЫ снизить уровень непрозрачности первого тумана. Либо немного затенить карту, думаю, -17 должно хватить.

    Эти настройки для тёмных карт без затенения.

    PHP код:
    $fog.name 'rain'
    $fog.hue 0
    $fog
    .tone = [0,0,0,0]
    $fog.opacity 90
    $fog
    .blend 2
    $fog
    .zoom 100
    $fog
    .sx 0
    $fog
    .sy 50

    $fog
    .show(1
    PHP код:
    $fog.name 'rain'
    $fog.hue 0
    $fog
    .tone = [0,0,0,0]
    $fog.opacity 100
    $fog
    .blend 1
    $fog
    .zoom 130
    $fog
    .sx 2
    $fog
    .sy 50

    $fog
    .show(2
    КОНЕЦ
    ________________________________

    Дополнительные материалы:

    Сам скрипт:
    Спойлер Multiple Fogs:
    PHP код:
    #===============================================================
    # ● [VX] ◦ Multiple Fogs ◦ □
    # * Use unlimited layers of fog *
    #--------------------------------------------------------------
    # ◦ by Woratana [woratana@hotmail.com]
    # ◦ Thaiware RPG Maker Community
    # ◦ Released on: 13/05/2008
    # ◦ Version: 1.0
    #--------------------------------------------------------------

    #==================================================================
    # ** HOW TO USE **
    # * use event command 'Script...' for the any script line below~
    #-----------------------------------------------------------------
    #
    #---------------------------------------------------------------
    # ** SETUP FOG PROPERTIES & SHOW FOG **
    # * You have to setup fog properties, before show fog~
    #-------------------------------------------------------------
    # * There are 3 ways to setup fog properties:
    # >> Setup Fog [Custom]:
    # $fog.name = 'image_name' # Image file name, must be in fog image path (setup path below).
    # $fog.hue = (integer) # Fog's hue. 0 - 360, 0 for no hue.
    # $fog.tone = [red, green, blue, gray] # Fog's tone color.
    # $fog.opacity = (integer) # Fog's opacity. 0 - 255, you will not see fog in 0.
    # $fog.blend = (0, 1, or 2) # Fog's blend type. 0 for Normal, 1 for Add, 2 for Subtract.
    # $fog.zoom = (integer) # Fog's size (in %). 100 for normal size.
    # $fog.sx = (+ or - integer) # Fog's horizontal move speed.
    # $fog.sy = (+ or - integer) # Fog's vertical move speed.
    #
    # >> Setup Fog [From Preset]:
    # (You can setup fog presets, in part FOG PRESET SETUP below)
    # $fog.load_preset(preset_id)
    #
    # >> Setup Fog [From Fog that showing]:
    # $fog.load_fog(fog_id)
    #
    #--------------------------------------------------------------
    # ** SHOW FOG **
    #-------------------------------------------------------------
    # After setup the fog, show fog by call script:
    # $fog.show(fog_id)
    #
    # In case you want to show new fog on same ox, oy, tone as old fog. Call Script:
    # $fog.show(old_fog_id, false)
    #
    # * fog_id: the ID number you want to put this fog in.
    # (It can be any positive number or zero)
    #
    # After you show fog, the fog properties you've set will replace with default setting.
    # (You can setup default setting, in part FOG DEFAULT SETTING below)
    #
    #--------------------------------------------------------------
    # ** DELETE FOG **
    #-------------------------------------------------------------
    # You can delete 1 or more fog(s) at a time by call script:
    # $fog.delete(fog_id, fog_id, fog_id, ...)
    #
    #---------------------------------------------------------------
    # ** OLD FOG CONTROL EVENT COMMANDS **
    #-------------------------------------------------------------
    # Change Fog Tone:
    # $game_map.fogtone(fog_id, [red, green, blue, gray], duration)
    # e.g. $game_map.fogtone(1, [100,200,-100,0], 10)

    # Change Fog Opacity:
    # $game_map.fogopac(fog_id, new_opacity, duration)
    # e.g. $game_map.fogopac(2, 200, 10)
    #
    #---------------------------------------------------------------
    # ** ADDITIONAL SETTINGS **
    #-------------------------------------------------------------
    # Change Fog Image's Path:
    # $game_map.fog_path = 'image_path'
    # e.g. $game_map.fog_path = 'Graphics/Pictures/'

    # Turn ON/OFF [Automatically clear all fogs when transfer player]:
    # $game_map.fog_reset = (true / false)
    #
    #===============================================================

    #==================================================================
    # START ** MULTIPLE FOG SETUP **
    #==================================================================
    class Game_Map
      alias wora_mulfog_gammap_ini initialize
      def initialize
        wora_mulfog_gammap_ini
        
        
    #==================================================================
        # ** MULTIPLE FOG SETUP ** SETTINGS
        #--------------------------------------------------------------
        
    @fog_path 'Graphics/Pictures/'
        
    # Fog image's path
        
    @fog_reset true # (true or false)
        # Automatically clear all multiple fogs when transfer player
        #==================================================================
        
        
    @mulfog_name = []
        @
    mulfog_hue = []
        @
    mulfog_opacity = []
        @
    mulfog_blend_type = []
        @
    mulfog_zoom = []
        @
    mulfog_sx = []
        @
    mulfog_sy = []
        @
    mulfog_ox = []
        @
    mulfog_oy = []
        @
    mulfog_tone = []
        @
    mulfog_tone_target = []
        @
    mulfog_tone_duration = []
        @
    mulfog_opacity_duration = []
        @
    mulfog_opacity_target = []
      
    end
    end
    class Wora_Multiple_Fog
      def set_default
        
    #==================================================================
        # ** MULTIPLE FOG SETUP ** FOG DEFAULT SETTING
        #--------------------------------------------------------------
        
    @name ''
        
    @hue 0
        
    @opacity 64
        
    @blend 0
        
    @zoom 200
        
    @sx 0
        
    @sy 0
        
    @tone = [0,0,0,0]
        
    #==================================================================
      
    end
      
      def load_preset
    (preset_id)
        case 
    preset_id
        
    #==================================================================
        # ** MULTIPLE FOG SETUP ** FOG PRESET SETUP
        #--------------------------------------------------------------
        
    when 1 # Preset ID 1
          
    @name '001-Fog01'
          
    @hue 0
          
    @tone = [100,-255,20,0]
          @
    opacity 60
          
    @blend 0
          
    @zoom 200
          
    @sx 10
          
    @sy 0
        when 2 
    # Preset ID 2
          
    @name '002-Clouds01'
          
    @hue 0
          
    @tone = [0,0,0,0]
          @
    opacity 200
          
    @blend 1
          
    @zoom 200
          
    @sx = -2
          
    @sy = -2
        
    #==================================================================
        
    end
      end
    #==================================================================
    # END ** MULTIPLE FOG SETUP **
    # * Don't change anything below unless you know what you're doing.
    #==================================================================

      
    attr_accessor :name, :hue, :opacity, :blend, :zoom, :sx, :sy, :tone
      def initialize
        set_default
      end
      
      def load_fog
    (id)
        @
    name $game_map.mulfog_name[id].sub($game_map.fog_path'')
        @
    hue $game_map.mulfog_hue[id]
        @
    opacity $game_map.mulfog_opacity[id]
        @
    blend $game_map.mulfog_blend_type[id]
        @
    zoom $game_map.mulfog_zoom[id]
        @
    sx $game_map.mulfog_sx[id]
        @
    sy $game_map.mulfog_sy[id]
        
    tn $game_map.mulfog_tone[id]
        @
    tone = [tn.redtn.bluetn.greentn.gray]
      
    end

      def show
    (idreset_all true)
        
    $game_map.mulfog_name[id] = $game_map.fog_path + @name
        $game_map
    .mulfog_hue[id] = @hue
        $game_map
    .mulfog_opacity[id] = @opacity
        $game_map
    .mulfog_blend_type[id] = @blend
        $game_map
    .mulfog_zoom[id] = @zoom
        $game_map
    .mulfog_sx[id] = @sx
        $game_map
    .mulfog_sy[id] = @sy
        $game_map
    .mulfog_tone[id] = Tone.new(@tone[0], @tone[1], @tone[2], @tone[3])
        if 
    $game_map.mulfog_ox[id].nil? or reset_all
          $game_map
    .mulfog_ox[id] = 0
          $game_map
    .mulfog_oy[id] = 0
          $game_map
    .mulfog_tone_target[id] = Tone.new(0000)
          
    $game_map.mulfog_tone_duration[id] = 0
          $game_map
    .mulfog_opacity_duration[id] = 0
          $game_map
    .mulfog_opacity_target[id] = 0
        end
        set_default
      end
      
      def delete
    (*args)
        
    args.each do |id|
          
    $game_map.mulfog_name[id] = ''
        
    end
      end
    end

    class Game_Interpreter
      alias wora_mulfog_interpret_com201 command_201
      
    #--------------------------------------------------------------------------
      # * Transfer Player
      #--------------------------------------------------------------------------
      
    def command_201
        
    if $game_map.fog_reset
          
    if @params[0] == 0id_map = @params[1]
          else; 
    id_map $game_variables[@params[1]]
          
    end
          $game_map
    .clear_mulfog if id_map != @map_id
        end
        wora_mulfog_interpret_com201
      end
    end

    class Game_Map
      attr_accessor 
    :mulfog_name, :mulfog_hue, :mulfog_opacity, :mulfog_blend_type,
      :
    mulfog_zoom, :mulfog_sx, :mulfog_sy, :mulfog_ox, :mulfog_oy, :mulfog_tone,
      :
    mulfog_tone_target, :mulfog_tone_duration, :mulfog_opacity_duration,
      :
    mulfog_opacity_target, :fog_reset, :fog_path
      
      alias wora_mulfog_gammap_upd update
      def update
        wora_mulfog_gammap_upd
        
    @mulfog_name.each_index do |i|
          
    next if @mulfog_name[i].nil? or @mulfog_name[i] == ''
          
    # Manage fog scrolling
          
    @mulfog_ox[i] -= @mulfog_sx[i] / 8.0
          
    @mulfog_oy[i] -= @mulfog_sy[i] / 8.0
          
    # Manage change in fog color tone
          
    if @mulfog_tone_duration[i] >= 1
            d 
    = @mulfog_tone_duration[i]
            
    target = @mulfog_tone_target[i]
            @
    mulfog_tone[i].red = (@mulfog_tone[i].red * (1) + target.red) / d
            
    @mulfog_tone[i].green = (@mulfog_tone[i].green * (1) + target.green) / d
            
    @mulfog_tone[i].blue = (@mulfog_tone[i].blue * (1) + target.blue) / d
            
    @mulfog_tone[i].gray = (@mulfog_tone[i].gray * (1) + target.gray) / d
            
    @mulfog_tone_duration[i] -= 1
          end
          
    # Manage change in fog opacity level
          
    if @mulfog_opacity_duration[i] >= 1
            d 
    = @mulfog_opacity_duration[i]
            @
    mulfog_opacity[i] = (@mulfog_opacity[i] * (1) + @mulfog_opacity_target[i]) / d
            
    @mulfog_opacity_duration[i] -= 1
          end
        end
      end
      
    #--------------------------------------------------------------------------
      # * Start Changing Fog Color Tone
      #--------------------------------------------------------------------------
      
    def fogtone(itoneduration)
        
    duration duration 2
        tone 
    Tone.new(tone[0], tone[1], tone[2], tone[3])
        @
    mulfog_tone_target[i] = tone.clone
        @
    mulfog_tone_duration[i] = duration
        
    if @mulfog_tone_duration[i] == 0
          
    @mulfog_tone[i] = @mulfog_tone_target[i].clone
        
    end
      end
      
    #--------------------------------------------------------------------------
      # * Start Changing Fog Opacity Level
      #--------------------------------------------------------------------------
      
    def fogopac(iopacityduration)
        
    duration duration 2
        
    @mulfog_opacity_target[i] = opacity 1.0
        
    @mulfog_opacity_duration[i] = duration
        
    if @mulfog_opacity_duration[i] == 0
          
    @mulfog_opacity[i] = @mulfog_opacity_target[i]
        
    end
      end
      
      def clear_mulfog
        
    @mulfog_name.each_index {|i| @mulfog_name[i] = '' }
      
    end
    end
    $worale 
    = {} if !$worale
    $worale
    ['MutipleFog'] = true
    $fog 
    Wora_Multiple_Fog.new
    class 
    Spriteset_Map
      alias wora_mulfog_sprmap_crepal create_parallax
      alias wora_mulfog_sprmap_updpal update_parallax
      alias wora_mulfog_sprmap_dispal dispose_parallax
      
      def create_parallax
        
    @mulfog = []
        @
    mulfog_name = []
        @
    mulfog_hue = []
        
    wora_mulfog_sprmap_crepal
      end
      
      def update_parallax
        wora_mulfog_sprmap_updpal
        $game_map
    .mulfog_name.each_index do |i|
          
    next if $game_map.mulfog_name[i].nil?
          
    # If fog is different than current fog
          
    if @mulfog_name[i] != $game_map.mulfog_name[i] or @mulfog_hue[i] != $game_map.mulfog_hue[i]
            @
    mulfog_name[i] = $game_map.mulfog_name[i]
            @
    mulfog_hue[i] = $game_map.mulfog_hue[i]
            if @
    mulfog[i].nil?
              @
    mulfog[i] = Plane.new(@viewport1)
              @
    mulfog[i].3000
            end
            
    if @mulfog[i].bitmap != nil
              
    @mulfog[i].bitmap.dispose
              
    @mulfog[i].bitmap nil
            end
            
    if @mulfog_name[i] != ''
              
    @mulfog[i].bitmap Cache.load_bitmap('', @mulfog_name[i], @mulfog_hue[i])
            
    end
            Graphics
    .frame_reset
          end
          next 
    if @mulfog[i].bitmap.nil?
          
    # Update fog plane
          
    @mulfog[i].zoom_x = ($game_map.mulfog_zoom[i] / 100.0) if @mulfog[i].zoom_x != ($game_map.mulfog_zoom[i] / 100.0)
          @
    mulfog[i].zoom_y = ($game_map.mulfog_zoom[i] / 100.0) if @mulfog[i].zoom_y != ($game_map.mulfog_zoom[i] / 100.0)
          @
    mulfog[i].opacity $game_map.mulfog_opacity[i] if @mulfog[i].opacity != $game_map.mulfog_opacity[i]
          @
    mulfog[i].blend_type $game_map.mulfog_blend_type[i] if @mulfog[i].blend_type != $game_map.mulfog_blend_type[i]
          @
    mulfog[i].ox = ($game_map.display_x 8.0 $game_map.mulfog_ox[i]) if @mulfog[i].ox != ($game_map.display_x 8.0 $game_map.mulfog_ox[i])
          @
    mulfog[i].oy = ($game_map.display_y 8.0 $game_map.mulfog_oy[i]) if @mulfog[i].oy != ($game_map.display_y 8.0 $game_map.mulfog_oy[i])
          @
    mulfog[i].tone $game_map.mulfog_tone[i] if @mulfog[i].tone != $game_map.mulfog_tone[i]
        
    end
      end
      
      def dispose_parallax
        
    @mulfog.each_index do |i|
          
    next if @mulfog[i].nil?
          @
    mulfog[i].bitmap.dispose if !@mulfog[i].bitmap.nil?
          @
    mulfog[i].dispose
        end
        wora_mulfog_sprmap_dispal
      end
    end
    #==================================================================
    # [END] VX Multiple Fog by Woratana [woratana@hotmail.com]
    #================================================================== 


    Для тех, кому не хочется качать 80 Мб технодемки, могут посмотреть в этой демке на эффект дождя:
    Маленькая демка (500 Кб)

    В большой технодемке, понятное дело, этот эффект намного лучше смотрится. Красивый лес, хороший звук дождя и всё такое.

  2. #2
    Бывалый Аватар для Inkognitoo
    Информация о пользователе
    Регистрация
    30.09.2008
    Адрес
    Пермь.
    Сообщений
    988
    Записей в дневнике
    4
    Репутация: 16 Добавить или отнять репутацию

    По умолчанию

    Чёрт, круто, очень..

  3. #3
    Авторитет Аватар для Злодей
    Информация о пользователе
    Регистрация
    28.05.2010
    Адрес
    Краснодар
    Сообщений
    1,516
    Записей в дневнике
    7
    Репутация: 62 Добавить или отнять репутацию

    По умолчанию

    Офигенно!


    Спойлер 1:


  4. #4
    Хранитель Форума Аватар для Валера
    Информация о пользователе
    Регистрация
    15.04.2008
    Адрес
    Москва
    Сообщений
    14,006
    Записей в дневнике
    3
    Репутация: 166 Добавить или отнять репутацию

    По умолчанию

    А почему круто? Задался человек целью - сделать нестандартный дождь и сделал. На его месте мог быть каждый из нас.

    Спойлер И как тебе не стыдно-то, а, Валера?:


    Оборона форта: http://rghost.ru/8kLGxFtD2
    Сделать, чтоб все происходило, как я хочу, - вот, собственно, и весь мейкер!
    Адский Рейд: http://rpgmaker.su/vbdownloads.php?d...downloadid=106

  5. #5
    Новичок Аватар для DECL
    Информация о пользователе
    Регистрация
    01.01.2012
    Сообщений
    25
    Записей в дневнике
    7
    Репутация: 1 Добавить или отнять репутацию

    По умолчанию

    Что то я не нашёл как сделать скрипт Multiple Fogs Script помогите плиз,Дождь крутой!

  6. #6
    Супер-модератор Аватар для Fox
    Информация о пользователе
    Регистрация
    21.04.2008
    Адрес
    Москва
    Сообщений
    1,804
    Записей в дневнике
    13
    Репутация: 105 Добавить или отнять репутацию

    По умолчанию

    Реалистичный дождь такой реалистичный.
    YouTube-канал Мэйкерского Засланца - http://www.youtube.com/channel/UCCny...MakerZaslanetz
    Группа в ВК - https://vk.com/public120874868

    Спойлер :

    Ну и немного большой и чистой любви
    Спойлер :
    Гость - Так! Мы отошли от темы! Ваши предложения, кого нужно забанить, чтобы не было срачей и тралей?

    Kerloeda - сосало завали, не с тобой говорю, ты уже показал какой ты собеседник.

    Алюка - «Нам насрать на низшие существа!» — раздался пронзительный голос со стороны параши.
    Но пацаны, как всегда, не обратили внимания на это визгливое кукареканье.

    Доктор СИД - же в который раз захожу на форум и вижу одну флудоту, срачи, троллоту жирности 100%, бессмысленные или идиотские темы, и безыгорье. Всё в говне, всё засрали, черт вас дери!

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
[VX] Реалистичный дождь