Войти на сайт

Авторизация, ждите ...
×

ТЕМА: Перевод Actor Duel Mini Game

Перевод Actor Duel Mini Game 10 года 7 мес. назад #64503

  • yros 98
  • yros 98 аватар
  • Вне сайта
  • Оседлый
  • Сообщений: 44
  • Спасибо получено: 24
Это перевод скрипта Actor Duel Mini Game
#-------------------------------------------------------------------------------
#  Galv's Actor Duel Mini Game
#-------------------------------------------------------------------------------
#  Автор:Galv's
#  Для: RPG MAKER VX ACE
#  Версия 1.4
#  Перевёл:Yros 98 специально для rpg-maker.info
#-------------------------------------------------------------------------------
#  2013-07-13 - Версия 1.4 - Исправлена ошибка с изменением музыки вызов скрипта
#  2013-07-11 - Версия 1.3 - добавлена совместимость с Виктором анимированные бойци
#                          - добавлен новый тег для актера играть на победу
#  2013-07-11 - Версия 1.2 - фиксированной(надеюсь)аварии с боевыми AI.Обновленный
#                            AI стал использовать навыки чаще.
#  2013-07-10 - Версия 1.1 - добавлены иконки состояния,движется кнопка комбо, 
#                          - работая маны,яды, метательные атаки.
#  2013-07-08 - Версия 1.0 - первая версия
#-------------------------------------------------------------------------------
#  Этот скрипт добавляет сцену, где вы можете столкнуться с двумя 
#  субъектами друг против друга в мини-игры поединке, который похожий на файтинг.
#  Вы можете сделать играть так Player1 против ИИ или Player1 VS player2 
#  (на одном компьютере)
#  
#  Актеры используют свою статистику и HP в поединке.Они могут двигаться,прыгать,
#  блокировать атаки и использование кнопки комбо навыки.
#  Нормальная формула урона берется из Навык 1 по умолчанию.
#
#  Актеры,восстанавливают выносливость во время боя.Каждая атака использует
#  определенное количество выносливости,тоесть бойци не могут сражаться когда 
#  выносливость истекла.
#
#  Яды,рекуперация-эти параметры повышения статистики работают.  
#
#-------------------------------------------------------------------------------
#  Основные инструкции
#-------------------------------------------------------------------------------
#  1. Получить анимированных бойцов(http://animatedbattlers.wordpress.com/)
#  2. Импортировать бойцов в /Graphics/Battlers 
#  3. Копировать FightSkills.png из демки в ваш проэкт
#  4. Копировать kombat_bar.png from из демки в ваш проэкт
#  5. Поместите этот скрипт ниже материалов но выше основного.
#  6. Прочитайте все инструкции и настройки
#  7. Помните,начните новую игру вместо загрузки сохронённого файла перед 
#     добавлением данного скрипта.
#     
#-------------------------------------------------------------------------------
 
#-------------------------------------------------------------------------------
#   Команды скрипта
#-------------------------------------------------------------------------------
#
#  set_fighters(id1,id2)         # Начинается битва между участниками с id1 & id2
#
#  set_fbacks("back1","back2")   # Изменить battlebacks в в бою можно при помощи следующих команд:"back1"
#                                # от/Graphics/Battlebacks1/и"back2"
#                                # от/Graphics/Battlebacks2/ 
#
#  set_fmusic("Название музыки") # Изменение музыки битвы.
#
#  set_fmode(x)                  # 0 = P1 vs AI      1 = P1 vs P2    (Default 0)
#
#  add_fskill(a_id,s_id,[btns])  # a_id = персонаж id... s_id = умение id
#                                # [кнопок BTN] это массив кнопка комбокоторая может
#                                # включать:   :l   :r   :u   :d
#                                # (См. объяснение ниже)
#
#-------------------------------------------------------------------------------
#  btn       информация
#  -----------------------------
#  :l        Левая клавиша для того, кто находится на левой сторне.
#  :r        Правая клавиша для того, кто находится на правой стороне. 
#  :u        В верх по ключу
#  :d        В низ по ключу
#
#  Пример сценария зовите,чтобы добавить умения:
#  add_fskill(1,80,[:l,:l,:r])     # Это даст актеру 1 кнопку комбо:
#                                  # Влево, влево, вправо, атака (в то время когда находишся с слева)
#                                  # (Вправо, вправо, влево, в то время когда находишся с справа)
#                                  # Какой будет активировать навык 80
#
#-------------------------------------------------------------------------------
 
#-------------------------------------------------------------------------------
#  Примечание:теги для актеров требуються
#-------------------------------------------------------------------------------
#
#  <изображения: название>       # Имя владельца спрайт листа 
#                                # изображение из /Graphics/Battlers/
#
#-------------------------------------------------------------------------------
#  Метки Примечание для актеров, чтобы переопределить значения по умолчанию
#-------------------------------------------------------------------------------
#
#  <fatks: x,x,x,x>          # Строки в спрайт лист, используемый для обычного 
#                            # нападения актера.По умолчанию комбо ниже. 
#
#  <fse miss: sename>        # SE по умолчанию комбо ниже
#
#  <fhit: x>                 # Анимация играет при ударе врага
#
#  <frange: x>               # Насколько близко нужно быть, чтобы атаковать 
#
#  <fviconeanim>             # Это будет означать что победная поза героя будет
#                            # показана один раз в место повтора.
#
#-------------------------------------------------------------------------------
 
#-------------------------------------------------------------------------------
#  Метки Примечание к навыкам
#-------------------------------------------------------------------------------
#
#  <fpose: x>            # Эта поза используется для актера при использовании этого навыка.
#                        # По умолчанию будет грести 7, если не добавленна анимация.
#
#  <fcost: x>            # Показует сколько необходимо выносливости для испоьзования навыка.
#
#  <fse: sename>         # SE которая играет при использовании умения
#
#  <fp: p,s,a,t,r>       # Используйте этот тег, если навык будет снаряд.
#                        # p = Представляет ряд умений спрайт листа.
#                        # s = Скорость снаряда путешествует.
#                        # a = ID анимации, когда снаряд создается
#                        # t = Время,прежде чем снаряд исчезает (60 в секунду)
#                        # r = Как близко снаряд должен быть чтобы вступить в контакт
#                        # Области видимости Навыки должны быть установлены на 
#                        # врага, чтобы это работало.
#                        
#
#
#-------------------------------------------------------------------------------
#  ПРИМЕЧАНИЕ КНОПКА КОМБО
#  Если навык имеет возможности союзника, анимация в базе навык играет
#  на пользователя. Если нет, то анимация будет проигрываться когда мастерство 
#  поражает врага.
#-------------------------------------------------------------------------------
 
#-------------------------------------------------------------------------------
#  Таблица стилей по умолчанию.
#-------------------------------------------------------------------------------
#  ряд     поза                   Используемые в скрипте по умолчанию
#
#   0      Незанятый                Yes
#   1      Защита                   Yes
#   2      Плохое состояние         Yes
#   3      Получаете удар           Yes
#   4      Обычная атака            Yes
#   5      Используйте вещь
#   6      Используйте умение
#   7      Используйте магию        Yes
#   8      Двигайтесь к             Yes
#   9      Двигайтесь от            Yes
#   10     Победа                   Yes
#   11     Начало битвы
#   12     Смерть                   Yes
#   13     Spritesheet Info
#-------------------------------------------------------------------------------
 
($imported ||= {})["Galv_ActorDuel"] = true
module GALVFIGHT
 
#-------------------------------------------------------------------------------
#
#  ** УСТАНОВКИ
#
#-------------------------------------------------------------------------------
 
  FONT = "Arial"  # Шрифт, используемый в сценарии
  VICTOR_VAR = 1  # Переменные используются для хранения ID победителя дюйма 0, если никто не победит.
 
  QUIT_SWITCH = 1 # Включите эту адекватными ON, чтобы отключить бросить меню. OFF, чтобы выключить
 
  CMD_QUIT = "Quit Match"  # Чтобы выйти из боя
  CMD_CANCEL = "Cancel"    # При отмене бросить меню
 
  # Спрай лист
 
  COLS = 4        # Количество столбцов в анимации спрайт листа
  ROWS = 14       # Количество строк в спрайтов лист
  SIZE = 2        # Размер бойцов (2 = 2-кратным зумом. 1 = нормально)
 
  SKILLIMAGE = "FightSkills"  # Название умения лист спрайт, в /Graphics/Battlers/
  SKILLCOLS = 4   # Количество столбцов в анимации навыков листе спрайтов
  SKILLROWS = 14  # Количество строк в листе навыков спрайтов
 
 
  # Актер по умолчанию
 
  COMBO = [4]           # Массив строк спрайт лист, цикл с атаками
                        # например. [4,5,6] переключает строки 4,5 и 6 при атаке
  MISS_SE = "Wind7"     # "SE_Имя"  звук атаки
  HIT_ANIM = 115        # Анимация играет при ударе врага.
  GUARD_ANIM = 116      # Анимация играет при ударе врага.
  RANGE = 45            # Расстояние от противника, прежде чем атака вступает в контакт
 
  JUMP_POSE = 8         # Поза для прыжка.
 
  SKILLSE = "Wind7"     # "SE_Имя" играет при использовании умения
 
 
  # Level Defaults
 
  MUSIC = "Battle6"        # По умолчанию битвы BGM
  VICTORY_ME = "Victory1"  # По умолчанию победы ME
 
  BATTLEBACK1 = "Ship"  # Default battleback 1 from /Graphics/Battlebacks1/
  BATTLEBACK2 = "Ship"  # Default battleback 2 from /Graphics/Battlebacks2/
 
  P1_X = 100            # Starting X position of player 1
  P2_X = 455            # Starting X position of player 2
  Y = 310               # Grounded Y position
 
 
  # Fighting
 
  MAX_STAMINA = 500      # Выносливости каждого бойца 
  STAMINA_COST = 100     # Количество выносливость из 1000,что нападение использования
  REGEN_RATE = 1.3       # Скорость востоновления выносливости.
 
  GUARD_DAMAGE = 0.25    # Обычный урон умножается на это, когда охрана.
 
  ATTACK_SKILL = 1       # Навык, используемый для базовой атаки
 
  TURNTIMER = 150        # Количество кадров, прежде чем он считается новый 
 
                         # повтор.
 
 
  # Text
 
  START1 = "Ready?"      # Текст,который появляется в начале
  START2 = "FIGHT!"
 
  NOWINNER = "MATCH OVER!"   # Сообщение,когда игрок выходит из матча
  WINS = " WINS!"            # Сообщение,которое приходит после имени победителя
 
 
 
#-------------------------------------------------------------------------------
#  Управление - игрок 1
#-------------------------------------------------------------------------------
  P1_UP =     :UP        # Прыжок
  P1_DOWN =   :DOWN      # Блок
  P1_LEFT =   :LEFT      # Двигаться в лево
  P1_RIGHT =  :RIGHT     # Двигаться в право
  P1_ACTION = :C         # (Кнопка действия) Атака
 
#-------------------------------------------------------------------------------
#  Управление - игрок 2
#-------------------------------------------------------------------------------
  P2_UP =     :R         # (W key) Прыжок
  P2_DOWN =   :Y         # (S key) Блок
  P2_LEFT =   :X         # (A key) Двигаться в лево
  P2_RIGHT =  :Z         # (D key) Двигаться в право
  P2_ACTION = :CTRL      # Атака
 
#-------------------------------------------------------------------------------
 
end
 
#-------------------------------------------------------------------------------
#
#  ** END SETTINGS
#
#-------------------------------------------------------------------------------
 
 
    #---------------#
#---|   GFIGHT_AI   |-----------------------------------------------------------
    #---------------#
 
module GFIGHT_AI
  def update_f2_ai
    update_ai_random
    update_ai_decision
    update_ai_action
    update_timer
    update_victorcheck
  end
 
  def p1; @f1; end
  def ai; @f2; end
 
  def update_ai_random
    if !ai_timer_running?
      @chance = (rand(10) + 1).to_i
      @schance = (rand(10) + 1).to_i
    end
  end
 
  def update_ai_decision
    if ai.in_range_x
      update_ai_in_range
    else
      update_ai_out_of_range
    end
  end
 
  def update_ai_in_range
    if p1.attacking?
      # IF PLAYER IS ATTACKING
      if ai.getting_hit? && @chance > 2
        @ai_move = :down
        @ai_action = false
        @ai_timer = rand(50) + 10 if !ai_timer_running?
      else
        if @chance > 5
          @ai_move = :down
          @ai_action = false
          @ai_timer = rand(50) + 10 if !ai_timer_running?
        elsif @chance > 2
          ai_melee_action
          @ai_timer = rand(20) + 5 if !ai_timer_running?
        else
          @ai_move = random_move_in_range
          @ai_timer = rand(50) + 10 if !ai_timer_running?
        end
      end
    else
      # IF PLAYER IS NOT ATTACKING
      if @chance > 4
        ai_melee_action
        @ai_timer = rand(20) + 10 if !ai_timer_running?
      elsif @chance > 2
        @ai_move = :down
        @ai_action = false
        @ai_timer = rand(40) + 20 if !ai_timer_running?
      else
        @ai_move = random_move_in_range
        @ai_timer = rand(40) + 20 if !ai_timer_running?
      end
    end
  end
 
  def update_ai_out_of_range
    @ai_move = random_move_out_of_range
    @ai_action = false
    @ai_raction = true
  end
 
  def ai_jump
    if ai.fjumping?
      @ai_move = :none
    else
      @ai_move = :up
      ai.fight_pose = 0
    end
  end
 
  def random_move_in_range
    if ai.fight_x <= 20 + 10
      return @chance > 7 ? :right : :none
    elsif ai.fight_x >= Graphics.width - 20 - 10
      return @chance > 7 ? :left : :none
    elsif @chance >= 8
      return :right
    elsif @chance >= 5
      return :left
    elsif @chance == 1
      return ai.fjumping? ? :left : :up
    elsif @chance == 2
      return ai.fjumping? ? :right : :up
    else
      return :none
    end
  end
 
  def random_move_out_of_range
    if ai.fight_x <= 20 + 10
      @ai_timer = rand(30) + 10 if !ai_timer_running?
      return @chance > 4 ? :right : :none
    elsif ai.fight_x >= Graphics.width - 20 - 10
      @ai_timer = rand(30) + 10 if !ai_timer_running?
      return @chance > 4 ? :left : :none
    elsif @chance >= 7
      @ai_timer = rand(40) + 10 if !ai_timer_running?
      return ai_advance
    elsif @chance >= 4
      @ai_timer = rand(40) + 10 if !ai_timer_running?
      return ai_retreat
    else
      @ai_timer = rand(30) + 10 if !ai_timer_running?
      return :none
    end
  end
 
  def ai_timer_running?
    @ai_timer > 0
  end
 
  def update_ai_action
    ai.fight_move(@ai_move)
    ai_melee_action if @ai_action
    ai_range_action if @ai_raction
  end
 
  def ai_melee_action
    if @schance <= 2
      bcs = get_ai_random_skill
      ai.fight_combo_skill(bcs) if bcs > 0
    else
      ai.fight_action
    end
  end
 
  def ai_range_action
    if @schance <= 3
      bcs = get_ai_projectile_skill
      ai.fight_combo_skill(bcs) if bcs > 0
    end
  end
 
  def get_ai_projectile_skill
    ai.combo_skills.each { |combo|
      return combo[1] if $data_skills[combo[1]].fproj
    }
    return 0
  end
 
  def get_ai_random_skill
    cskills = ai.combo_skills.to_a
    rskill = cskills.sample
    @ai_raction = false
    return 0 if rskill.nil?
    return rskill[1] <= 0 ? 0 : rskill[1]
  end
 
  def ai_make_attack
    if ai.fstamina < GALVFIGHT::STAMINA_COST
      @ai_move = :down
    else
      @ai_action = true
      @ai_move = random_move_in_range
    end
  end
 
  def ai_retreat
    return ai.fight_x > p1.fight_x ? :right : :left
  end
 
  def ai_advance
    return ai.fight_x < p1.fight_x ? :right : :left
  end
 
  def update_timer
    @ai_timer -= 1
  end
 
  def update_victorcheck
    if p1.dead?
      @phase = 2
      @victor = ai
    end
  end
end # GFIGHT_AI
 
 
    #----------------------#
#---|   GAME_INTERPRETER   |----------------------------------------------------
    #----------------------#
 
class Game_Interpreter
  def set_fighters(player1,player2)
    $game_system.save_bgm
    command_221
    a = $game_actors[player1]
    b = $game_actors[player2]
    $game_system.fighters = [a,b]
    SceneManager.call(Scene_ActorDuel)
    wait(1)
    command_222
    $game_system.replay_bgm
  end
 
  def set_fbacks(back1,back2)
    $game_system.fbacks = [back1,back2]
  end
 
  def set_fmusic(music)
    $game_system.fmusic[0] = music
  end
 
  def set_fmode(mode)
    $game_system.fmode = mode
  end
 
  def add_skill(a_id,s_id,btns)
    $game_actors[a_id].combo_skills[btns] = s_id
  end
end
 
 
    #------------------#
#---|   RPG BASEITEM   |--------------------------------------------------------
    #------------------#
 
class RPG::BaseItem
  def f_atks
    if @f_atks.nil?
      if @note =~ /<fatks:[ ](.*)>/i
        @f_atks = $1.to_s.split(",").map {|i| i.to_i}
      else
        @f_atks = GALVFIGHT::COMBO
      end
    end
    @f_atks
  end
end # RPG::Item
 
class RPG::Skill
  def fpose
    if @fpose.nil?
      if @note =~ /<fpose:[ ](.*)>/i
        @fpose = $1.to_i
      else
        @fpose = 7
      end
    end
    @fpose
  end
  def fcost
    if @fcost.nil?
      if @note =~ /<fcost:[ ](.*)>/i
        @fcost = $1.to_i
      else
        @fcost = GALVFIGHT::STAMINA_COST
      end
    end
    @fcost
  end
  def fproj
    if @fproj.nil?
      if @note =~ /<fp:[ ](.*)>/i
        @fproj = $1.to_s.split(",").map {|i| i.to_i}
      else
        @fproj = nil
      end
    end
    @fproj
  end
  def fse
    if @fse.nil?
      if @note =~ /<fpose:[ ](.*)>/i
        @fse = $1.to_s
      else
        @fse = GALVFIGHT::SKILLSE
      end
    end
    @fse
  end
end # RPG::Skill
 
 
    #----------------#
#---|   GAME_ACTOR   |----------------------------------------------------------
    #----------------#
 
class Game_Actor < Game_Battler
  attr_reader :fhit_anim
  attr_reader :frange
  attr_accessor :fight_x
  attr_accessor :fight_y
  attr_accessor :fight_pose
  attr_accessor :fight_sprite
  attr_accessor :fight_speed
  attr_accessor :fight_mspeed
  attr_accessor :fstamina
  attr_accessor :combo_skills
  attr_accessor :fprojectiles
  attr_accessor :fvicpose
 
  alias galv_fight_gagb_setup setup
  def setup(actor_id)
    galv_fight_gagb_setup(actor_id)
    init_fight_vars
    @fight_sprite = actor.note =~ /<fimage: (.*)>/i ? $1 : ""
    @combo = actor.f_atks
    @combo_skills = {}
    @fse_miss = actor.note =~ /<fse miss: (.*)>/i ? $1 : GALVFIGHT::MISS_SE
    @fhit_anim = actor.note =~ /<fhit: (.*)>/i ? $1.to_i : GALVFIGHT::HIT_ANIM
    @frange = actor.note =~ /<frange: (.*)>/i ? $1.to_i : GALVFIGHT::RANGE
    @fvicpose = actor.note =~ /<fviconeanim>/i ? true : false # true = one play
  end
 
  def init_fight_vars
    @fight_x = 0
    @fight_y = GALVFIGHT::Y
    @fight_pose = 0
    @fight_speed = 0.to_f
    @fight_mspeed = 4
    @attack_timer = 0
    @skill_timer = 0
    @takehit_timer = 0
    @jump = 0
    @fstamina = GALVFIGHT::MAX_STAMINA
    @btn_combo = []
    @btn_timer = 0
    @fprojectiles = []
  end
 
  def fight_move(direction)
    case direction
    when :up
      fight_jump
      fight_slowing
    when :down
      fight_guard
      fight_slowing
    when :left
      if !attacking?
        if @fight_x < fight_target.fight_x
          @fight_pose = 9
        else
          @fight_pose = 8
        end
      end
      return @fight_speed = 0 if fight_left_limit
      @fight_speed -= 0.4
      @fight_speed = -@fight_mspeed if @fight_speed <= -@fight_mspeed
    when :right
      if !attacking?
        if @fight_x < fight_target.fight_x
          @fight_pose = 8
        else
          @fight_pose = 9
        end
      end
      return @fight_speed = 0 if fight_right_limit
      @fight_speed += 0.4
      @fight_speed = @fight_mspeed if @fight_speed >= @fight_mspeed
    when :none
      if !attacking?
        @fight_pose = fjumping? ? GALVFIGHT::JUMP_POSE : fight_idle_pose
      end
      fight_slowing
    end
  end
 
  def fight_right_limit; @fight_x >= Graphics.width - 20; end
  def fight_left_limit; @fight_x <= 20; end
 
  def fight_idle_pose
    hp < mhp * 0.25 ? 2 : 0
  end
 
  def fight_slowing
    if moving_right?
      return @fight_speed = 0 if @fight_x >= Graphics.width - 20
      @fight_speed -= [0 + @fight_speed,0.3].min
    elsif moving_left?
      return @fight_speed = 0 if @fight_x <= 20
      @fight_speed += [0 - @fight_speed,0.3].min
    end
  end
 
  def fight_action
    return if attacking? || guarding? || getting_hit?
    bcs = get_combo_skill
    if bcs.nil?
      fight_normal_attack
    else
      fight_combo_skill(bcs)
    end
  end
 
  def get_combo_skill
    @combo_skills.each { |combo|
      if @btn_combo.reverse[0..(combo[0].size - 1)] == combo[0].reverse
        return combo[1]
      end
    }
    return nil
  end
 
  def fight_normal_attack
    return if @fstamina < GALVFIGHT::STAMINA_COST
    @fskill_used = nil
    @fstamina -= GALVFIGHT::STAMINA_COST
    se = @fse_miss
    vol = 80 + rand(20)
    pit = 100 + rand(50)
    RPG::SE.new(se,vol,pit).play
    @combo = @combo.rotate
    @fight_pose = @combo[0]
    @attack_timer = 22
  end
 
  def fight_combo_skill(skill)
    sk = $data_skills[skill]
    return if @fstamina < sk.fcost #fight_normal_attack if @fstamina < sk.fcost
    return if attacking?
    @fstamina -= sk.fcost
    se = sk.fse
    vol = 80 + rand(20)
    pit = 100 + rand(50)
    RPG::SE.new(se,vol,pit).play
    if sk.fproj
      # Create Projectile Here
      @fprojectiles << FightProjectile.new(sk,self)
      self.animation_id = sk.fproj[2]
      @skill_timer = 22
    elsif sk.scope >= 7 
      self.animation_id = sk.animation_id
      self.fight_item_apply(self, sk)
      @skill_timer = 22
    else
      @fskill_used = sk
      @attack_timer = 22
    end
    @fight_pose = sk.fpose
  end
 
  def fight_item_apply(user, item)
    @result.clear
    @result.used = item_test(user, item)
    @result.missed = (@result.used && rand >= item_hit(user, item))
    @result.evaded = (!@result.missed && rand < item_eva(user, item))
    if @result.hit?
      @result.critical = (rand < item_cri(user, item))
      damage = fight_damage_value(self, $data_skills[item.id])
      fight_target.do_damage(guarding?,item.id,damage)
      item.effects.each {|effect| item_effect_apply(user, item, effect) }
      item_user_effect(user, item)
    end
  end
 
  def fight_guard
    return if attacking?
    @fight_pose = 1
  end
 
  def fight_jump
    return if fjumping? || in_air?
    @jump = -10 - GALVFIGHT::SIZE / 2
  end
 
  def fjumping?; @jump < 0; end
  def in_air?; @fight_y < GALVFIGHT::Y; end
  def attacking?; @attack_timer > 0 || @skill_timer > 0; end
  def guarding?; @fight_pose == 1; end
  def getting_hit?; @takehit_timer > 0; end
  def moving_right?; @fight_speed > 0; end
  def moving_left?; @fight_speed < 0; end
  def away(amount)
    if fight_x < fight_target.fight_x
      return amount
    else
      return -amount
    end
  end
 
  def move_pose(direction)
    return 1 if @fight_x < fight_target.fight_x
  end
 
  def update_fight
    @takehit_timer -= 1
    update_fight_movement
    update_gravity
    return @fight_pose = 12 if dead?
    return @fight_pose = 3 if getting_hit? && !guarding?
    update_btn_combo
    update_stamina
    update_hit
    @attack_timer -= 1
    @skill_timer -= 1
  end
 
  def update_stamina
    @fstamina += GALVFIGHT::REGEN_RATE if @fstamina < GALVFIGHT::MAX_STAMINA
  end
 
  def update_fight_movement
    if moving_right?
      @fight_x += [@fight_speed,@fight_mspeed].min
    elsif moving_left?
      @fight_x += [@fight_speed,-@fight_mspeed].max
    end
  end
 
  def update_gravity
    if fjumping? || in_air?
      @fight_y += @jump + $game_system.gravity
      @jump += 0.2
    else
      @fight_y = GALVFIGHT::Y
      @jump = 0
    end
  end
 
  def fight_target
    if $game_system.fighters[0].id == @actor_id
      return $game_system.fighters[1]
    else
      return $game_system.fighters[0]
    end
  end
 
  def update_hit
    if @attack_timer == 8
      if make_contact?
        if fight_target.guarding?
          fight_target.animation_id = GALVFIGHT::GUARD_ANIM
          s = @fskill_used ? @fskill_used : $data_skills[GALVFIGHT::ATTACK_SKILL]
          damage = fight_damage_value(self,s)
          do_damage(true,s.id,damage)
          @fskill_used = nil
        else
          if @fskill_used
            anim = @fskill_used.animation_id
            s = @fskill_used
          else
            anim = @fhit_anim
            s = $data_skills[GALVFIGHT::ATTACK_SKILL]
          end
          fight_target.animation_id = anim
          damage = fight_damage_value(self,s)
          do_damage(false,GALVFIGHT::ATTACK_SKILL,damage)
          @fskill_used = nil
        end
      end
    end
  end
 
  def proj_hit(skill)
    if fight_target.guarding?
      fight_target.animation_id = GALVFIGHT::GUARD_ANIM
    else
      fight_target.animation_id = skill.animation_id
    end
    fight_target.fight_item_apply(self,skill)
  end
 
  def do_damage(guard,s_id,damage,proj = false)
    if guard
      damage *= GALVFIGHT::GUARD_DAMAGE
      if damage > 0
        fight_target.fight_speed += away(2) * GALVFIGHT::SIZE
        @fight_speed += fight_target.away(2) * GALVFIGHT::SIZE if proj
      end
    else
      fight_target.fight_speed += away(4) * GALVFIGHT::SIZE if damage > 0
    end
    fight_target.fight_damage(damage)
  end
 
  def fight_damage_value(user, item)
    value = item.damage.eval(user, self, $game_variables)
    value *= item_element_rate(user, item)
    value *= pdr if item.physical?
    value *= mdr if item.magical?
    value *= rec if item.damage.recover?
    value = apply_variance(value, item.damage.variance)
    return value
  end
 
  def fight_damage(damage)
    change_hp(-damage.to_i,true) if SceneManager.scene.phase == 1
    @attack_timer = 0
    @skill_timer = 0
    if damage > 0
      @takehit_timer = 18 
      remove_states_by_damage
    end
  end
 
  def reach; @frange * GALVFIGHT::SIZE; end
  def range; (fight_target.fight_x - @fight_x).abs; end
  def in_range_x; (fight_target.fight_x - @fight_x).abs < reach; end
  def in_range_y; ((fight_target.fight_y - @fight_y).abs) * 1.2 < reach ;end
  def near_range_x; ((fight_target.fight_x - @fight_x).abs) / 1.5 < reach; end
 
  def make_contact?
    return true if in_range_x && in_range_y
  end
 
  def reset_fight
    erase_state(death_state_id)
    @hp = 1 if @hp <= 0
    init_fight_vars
  end
 
  def end_match
    @fight_pose = 0 if !dead?
  end
 
  def sta_rate
    @fstamina.to_f / GALVFIGHT::MAX_STAMINA
  end
 
  def update_btn_combo
    @btn_combo = [] if @btn_timer == 0
    @btn_timer -= 1
  end
 
  def add_combo(direction)
    @btn_timer = 20
    @btn_combo << direction
  end
end # Game_Actor < Game_Battler
 
 
    #-----------------#
#---|   GAME_SYSTEM   |---------------------------------------------------------
    #-----------------#
 
class Game_System
  attr_accessor :fighters
  attr_accessor :fmode
  attr_accessor :gravity
  attr_accessor :fbacks
  attr_accessor :fmusic
 
  alias galv_fight_gs_initialize initialize
  def initialize
    galv_fight_gs_initialize
    @gravity = 5
    @fbacks = [GALVFIGHT::BATTLEBACK1,GALVFIGHT::BATTLEBACK2]
    @fmusic = [GALVFIGHT::MUSIC,GALVFIGHT::VICTORY_ME]
    @fmode = 0 #  0 is Player vs AI   1 is Player vs Player
  end
end # Game_System
 
 
    #---------------------#
#---|   SCENE_ACTORDUEL   |-----------------------------------------------------
    #---------------------#
 
class Scene_ActorDuel < Scene_Base
  attr_accessor :spriteset
  attr_reader :phase
  include GFIGHT_AI
 
  def start
    super
    init_fvariables
    determine_fighters
    create_spriteset
    create_windows
  end
 
  def init_fvariables
    $game_variables[GALVFIGHT::VICTOR_VAR] = 0
    @phase = 0
    @ai_move = :none
    @ai_action = false
    @ai_timer = 0
    @bufftimer = 0
    RPG::BGM.new($game_system.fmusic[0],100,100).play
  end
 
  def determine_fighters
    @f1,@f2 = $game_system.fighters
    @f1.fight_x = GALVFIGHT::P1_X
    @f2.fight_x = GALVFIGHT::P2_X
  end
 
  def create_spriteset
    @spriteset = Spriteset_ActorDuel.new
  end
 
  def create_windows
    @hp_window = Window_FightHealth.new
    @info_window = Window_Fight.new
    @command_window = Window_FightCommand.new
    @command_window.deactivate.hide
    @command_window.set_handler(:ok,     method(:on_ok))
    @command_window.set_handler(:cancel, method(:on_cancel))
  end
 
  def on_ok
    @phase = 2
    @command_window.hide.deactivate
    @f1.end_match
    @f2.end_match
  end
 
  def on_cancel
    @command_window.hide.deactivate
  end
 
#--------|  UPDATE
 
  def update
    super
    update_graphics
    case @phase
    when 0
      update_begin
    when 1
      return if @command_window.active
      update_fighter1
      update_fighter2
      update_other
    when 2
      update_common(@f2)
      update_common(@f1)
      @f1.fight_speed = 0
      @f2.fight_speed = 0
      update_end
    end
  end
 
  def update_begin
    return while @info_window.active
    @phase = 1
  end
 
  def update_end
    RPG::ME.new($game_system.fmusic[1],100,100).play if !@end_timer
    @end_timer ||= 60
    @victor.fight_pose = 10 if @victor
    @end_timer -= 1
    return if @end_timer > 0
    @info_window.victory(@victor) if @end_timer == 0
    return while @info_window.active
    $game_system.fighters.each { |actor| actor.reset_fight }
    $game_variables[GALVFIGHT::VICTOR_VAR] = @victor ? @victor.id : 0
    SceneManager.return
  end
 
  def update_graphics
    @spriteset.update
  end
 
  def update_other
    if Input.trigger?(:B) && !$game_switches[GALVFIGHT::QUIT_SWITCH]
      @command_window.show.activate
    end
    if @bufftimer >= GALVFIGHT::TURNTIMER
      @f1.on_turn_end
      @f2.on_turn_end
      @f1.remove_buffs_auto
      @f2.remove_buffs_auto
      @bufftimer = 0
    end
    @bufftimer += 1
  end
 
  def update_fighter1
    update_f1_movement
    update_f1_action
    update_common(@f1)
  end
 
  def update_f1_movement
    if Input.press?(GALVFIGHT::P1_DOWN)
      @f1.fight_move(:down)
      @f1.add_combo(:d) if Input.trigger?(GALVFIGHT::P1_DOWN)
    elsif Input.trigger?(GALVFIGHT::P1_UP)
      @f1.fight_move(:up)
      @f1.add_combo(:u)
    elsif Input.press?(GALVFIGHT::P1_LEFT)
      @f1.fight_move(:left)
      @f1.add_combo(get_back_dir(@f1)) if Input.trigger?(GALVFIGHT::P1_LEFT)
    elsif Input.press?(GALVFIGHT::P1_RIGHT)
      @f1.fight_move(:right)
      @f1.add_combo(get_forward_dir(@f1)) if Input.trigger?(GALVFIGHT::P1_RIGHT)
    else
      @f1.fight_move(:none)
    end
  end
 
  def get_back_dir(player)
    return player.fight_x < player.fight_target.fight_x ? :l : :r
  end
 
  def get_forward_dir(player)
    return player.fight_x < player.fight_target.fight_x ? :r : :l
  end
 
  def update_f1_action
    @f1.fight_action if Input.trigger?(GALVFIGHT::P1_ACTION) &&
      !@f1.attacking? && !@f1.guarding?
    if @f2.dead?
      @phase = 2
      @victor = @f1
    end
  end
 
  def update_fighter2
    if $game_system.fmode == 1
      update_f2_movement
      update_f2_action
    else
      update_f2_ai
    end
    update_common(@f2)
  end
 
  def update_f2_movement
    if Input.press?(GALVFIGHT::P2_DOWN)
      @f2.fight_move(:down)
      @f2.add_combo(:d) if Input.trigger?(GALVFIGHT::P2_DOWN)
    elsif Input.trigger?(GALVFIGHT::P2_UP)
      @f2.fight_move(:up)
      @f2.add_combo(:u)
    elsif Input.press?(GALVFIGHT::P2_LEFT)
      @f2.fight_move(:left)
      @f2.add_combo(get_back_dir(@f2)) if Input.trigger?(GALVFIGHT::P2_LEFT)
    elsif Input.press?(GALVFIGHT::P2_RIGHT)
      @f2.fight_move(:right)
      @f2.add_combo(get_forward_dir(@f2)) if Input.trigger?(GALVFIGHT::P2_RIGHT)
    else
      @f2.fight_move(:none)
    end
  end
 
  def update_f2_action
    @f2.fight_action if Input.trigger?(GALVFIGHT::P2_ACTION) && !@f2.attacking? && !@f2.guarding?
    if @f1.dead?
      @phase = 2
      @victor = @f2
    end
  end
 
  def update_common(fighter)
    fighter.update_fight
  end
 
#--------|  DESTROY
 
  def dispose_spriteset
    @spriteset.dispose
  end
 
  def terminate
    super
    dispose_spriteset
    @f1.on_battle_end
    @f2.on_battle_end
  end
end # Scene_Kombat < Scene_Base
 
 
    #-------------------------#
#---|   SPRITESET_ACTORDUEL   |-------------------------------------------------
    #-------------------------#
 
class Spriteset_ActorDuel
  attr_accessor :viewport3
 
  def initialize
    create_viewports
    create_battleback1
    create_battleback2
    create_fighters
    create_face1
    create_face2
    create_bars
    update
  end
 
#-------- |  CREATE STUFF
 
  def create_viewports
    @viewport1 = Viewport.new
    @viewport2 = Viewport.new
    @viewport3 = Viewport.new
    @viewport1.z = 20
    @viewport2.z = 50
    @viewport3.z = 150
  end
 
  def create_battleback1
    return if !$game_system.fbacks[0]
    @back1_sprite = Sprite.new(@viewport1)
    @back1_sprite.bitmap = Cache.battleback1($game_system.fbacks[0])
    @back1_sprite.z = -1
    center_sprite(@back1_sprite)
  end
 
  def create_battleback2
    return if !$game_system.fbacks[1]
    @back2_sprite = Sprite.new(@viewport1)
    @back2_sprite.bitmap = Cache.battleback2($game_system.fbacks[1])
    @back2_sprite.z = 0
    center_sprite(@back2_sprite)
  end
 
  def create_fighters
    @fighters = []
    @shadows = []
    $game_system.fighters.each { |f|
      @shadows << Sprite_FightShadow.new(@viewport2,f)
      @fighters << Sprite_Fighter.new(@viewport2,f)
    }
  end
 
  def create_face1
    face_index = $game_system.fighters[0].face_index
    @face1 = Sprite.new(@viewport2)
    @face1.bitmap = Cache.face($game_system.fighters[0].face_name)
    rect = Rect.new(face_index % 4 * 96, face_index / 4 * 96, 96, 96)
    @face1.src_rect.set(rect)
  end
 
  def create_face2
    face_index = $game_system.fighters[1].face_index
    @face2 = Sprite.new(@viewport2)
    @face2.bitmap = Cache.face($game_system.fighters[1].face_name)
    rect = Rect.new(face_index % 4 * 96, face_index / 4 * 96, 96, 96)
    @face2.src_rect.set(rect)
    @face2.x = Graphics.width - 96
    @face2.mirror = true
  end
 
  def create_bars
    @bar1 = Sprite.new(@viewport3)
    @bar1.bitmap = Cache.system("kombat_bar") rescue Cache.system("")
    @bar2 = Sprite.new(@viewport3)
    @bar2.bitmap = Cache.system("kombat_bar") rescue Cache.system("")
    @bar2.x = Graphics.width - @bar2.bitmap.width
    @bar2.mirror = true
  end
 
#-------- |  UPDATE STUFF
 
  def update
    @fighters.each { |s| s.update }
    @shadows.each { |s| s.update }
    @viewport1.update
    @viewport2.update
    @viewport3.update
    update_projectiles
  end
 
  def update_projectiles
    $game_system.fighters.each { |f|
      f.fprojectiles.each_with_index { |p,i|
        if p.finished?
          p.dispose if !p.nil?
          p = nil
        else
          p.update
        end
      }
      f.fprojectiles.compact!
    }
  end
 
#-------- |  DESTROY STUFF
 
  def dispose
    dispose_viewports
    dispose_fighters
    dispose_background
    dispose_faces
    dispose_projectiles
  end
 
  def dispose_viewports
    @viewport1.dispose
    @viewport2.dispose
    @viewport3.dispose
  end
 
  def dispose_fighters
    @fighters.each { |s| s.dispose }
    @shadows.each { |s| s.dispose }
    @bar1.dispose
    @bar2.dispose
  end
 
  def dispose_background
    @back1_sprite.dispose if @back1_sprite
    @back2_sprite.dispose if @back2_sprite
  end
 
  def dispose_faces
    @face1.dispose
    @face2.dispose
  end
 
  def dispose_projectiles
    $game_system.fighters.each { |f|
      f.fprojectiles.each { |p| p.dispose }
    }
  end
 
  def center_sprite(sprite)
    sprite.ox = sprite.bitmap.width / 2
    sprite.oy = sprite.bitmap.height / 2
    sprite.x = Graphics.width / 2
    sprite.y = Graphics.height / 2
  end
end # Spriteset_ActorDuel
 
 
    #-------------------#
#---|   SPRITE_FIGHTER  |-------------------------------------------------------
    #-------------------#
 
class Sprite_Fighter < Sprite_Battler
  def initialize(viewport, battler = nil)
    super(viewport,battler)
    init_fvariables
  end
 
  def init_fvariables
    @pattern = 0
    @speed_timer = 0
    @pose = 0
    if $game_system.fighters[0].id == @battler.id 
      player = 0; opponent = 1
    else
      player = 1; opponent = 0
    end
    @player = $game_system.fighters[player]
    @opponent = $game_system.fighters[opponent]
  end
 
  def update
    if @battler.fight_sprite
      update_bitmap
      update_pose
      update_src_rect
      update_anim
      update_position
      update_facing
    end
    super
  end
 
  def update_bitmap
    new_bitmap = Cache.battler(@battler.fight_sprite,
      @battler.battler_hue)
    if bitmap != new_bitmap
      self.bitmap = new_bitmap
      spritesheet_normal
      init_visibility
      self.zoom_x = GALVFIGHT::SIZE
      self.zoom_y = GALVFIGHT::SIZE
    end
  end
 
  def spritesheet_normal
    @cw = bitmap.width / GALVFIGHT::COLS
    @ch = bitmap.height / GALVFIGHT::ROWS
    self.ox = @cw / 2
    self.oy = @ch
  end
 
  def update_pose
    if @pose != @battler.fight_pose
      @pattern = 0
      @pose = @battler.fight_pose
    end
  end
 
  def update_src_rect
    if @pattern >= GALVFIGHT::COLS
      if @battler.fight_pose == 10 && @battler.fvicpose
        @pattern = GALVFIGHT::COLS - 1
      else
        @pattern = 0
      end
    end
    sx = @pattern * @cw
    sy = @battler.fight_pose * @ch
    self.src_rect.set(sx, sy, @cw, @ch)
  end
 
  def update_origin;end
 
  def update_anim
    @speed_timer += 1
    if @speed_timer > 6
      @pattern += 1
      @speed_timer = 0
    end
  end
 
  def update_facing
    self.mirror = @player.fight_x > @opponent.fight_x ? false : true
  end
 
  def update_position
    self.x = @battler.fight_x
    self.y = @battler.fight_y
  end
 
  def make_animation_sprites
    @ani_sprites = []
    if !@@ani_spr_checker.include?(@animation)
      16.times do
        sprite = ::Sprite.new(viewport)
        sprite.visible = false
        @ani_sprites.push(sprite)
      end
      if @animation.position == 3
        @@ani_spr_checker.push(@animation)
      end
    end
    @ani_duplicated = @@ani_checker.include?(@animation)
    if !@ani_duplicated && @animation.position == 3
      @@ani_checker.push(@animation)
    end
  end
end # Sprite_Fighter < Sprite_Battler
 
 
    #------------------#
#---|   SPRITE_SHADOW  |--------------------------------------------------------
    #------------------#
 
class Sprite_FightShadow < Sprite
  def initialize(viewport, player)
    super(viewport)
    @player = player
    create_shadow
  end
 
  def dispose
    bitmap.dispose if bitmap
    super
  end
 
  def update
    super
    update_position
  end
 
  def create_shadow
    self.bitmap = Cache.system("Shadow")
    self.ox = self.bitmap.width / 2
    self.oy = self.bitmap.height
    self.z = 0
    self.zoom_x = GALVFIGHT::SIZE
    self.zoom_y = GALVFIGHT::SIZE
  end
 
  def update_position
    self.x = @player.fight_x
    self.y = GALVFIGHT::Y
  end
end # Sprite_FightShadow < Sprite
 
 
    #-----------------------#
#---|   WINDOW_FIGHTHEALTH  |---------------------------------------------------
    #-----------------------#
 
class Window_FightHealth < Window_Base
  def initialize
    super(0, 0, Graphics.width, 140)
    self.opacity = 0
    refresh
  end
 
  def player; $game_system.fighters; end
 
  def update
    super
    refresh
  end
 
  def refresh
    contents.clear
    contents.font.name = GALVFIGHT::FONT
    draw_player1
    draw_player2
  end
 
  def draw_player1
    pl = player[0]
    draw_hp(pl, 100, 15, false)
    draw_stamina(pl, 100, 40, false)
    draw_text(100,0,100,line_height,pl.name,0)
    draw_actor_icons(pl, 100, 65, 240)
  end
 
  def draw_player2
    pl = player[1]
    draw_hp(pl, contents.width - 224, 15, true)
    draw_stamina(pl, contents.width - 224, 40, true)
    draw_text(contents.width - 200,0,100,line_height,pl.name,2)
    draw_actor_icons(pl, contents.width - 224, 65, 240)
  end
 
  def draw_hp(actor, x, y, r)
    draw_gauge(x, y, 124, actor.hp_rate, hp_gauge_color1, hp_gauge_color2, r, 12)
  end
 
  def draw_stamina(actor, x, y, r)
    draw_gauge(x, y, 124, actor.sta_rate, mp_gauge_color1, mp_gauge_color2, r, 6)
  end
 
  def draw_gauge(x, y, width, rate, color1, color2, reverse, height)
    fill_w = (width * rate).to_i
    gauge_y = y + line_height - 8
    contents.fill_rect(x, gauge_y, width, height, gauge_back_color)
    if reverse
      contents.gradient_fill_rect(x + width - fill_w, gauge_y, fill_w, height,
        color1, color2)
    else
      contents.gradient_fill_rect(x, gauge_y, fill_w, height, color1, color2)
    end
  end
end # Window_FightHealth < Window_Base
 
 
    #-----------------#
#---|   WINDOW_FIGHT  |---------------------------------------------------------
    #-----------------#
 
class Window_Fight < Window_Base
  attr_accessor :phase
  attr_accessor :victor
 
  def initialize
    super(0, 0, Graphics.width, Graphics.height)
    self.opacity = 0
    @phase = 0
    @timer = 0
  end
 
  def update
    case @phase
    when 0
      contents.clear
      contents.font.name = GALVFIGHT::FONT
      contents.font.size += 1
      draw_text(0,0,width,height,GALVFIGHT::START1,1)
    when 2
      contents.clear
      contents.font.name = GALVFIGHT::FONT
      contents.font.size = 80
      draw_text(0,0,width,height,GALVFIGHT::START2,1)
    when 3
      contents.clear
      deactivate
    when 4
      contents.clear
      contents.font.size = 60
      if @victor
        contents.font.name = GALVFIGHT::FONT
        txt = @victor.name.upcase + GALVFIGHT::WINS
        draw_text(0,0,width,height,txt,1)
      else
        contents.font.name = GALVFIGHT::FONT
        draw_text(0,0,width,height,GALVFIGHT::NOWINNER,1)
      end
    when 5
      contents.clear
      deactivate
    end
    @timer += 1
    @phase = 1 if @timer == 40
    @phase = 2 if @timer == 100
    @phase = 3 if @timer == 130
    @phase = 5 if @timer == 300
  end
 
  def victory(victor)
    @victor = victor
    @phase = 4
    @timer = 150
    activate
  end
end # Window_Fight < Window_Base
 
 
    #------------------------#
#---|   WINDOW_FIGHTCOMMAND  |--------------------------------------------------
    #------------------------#
 
class Window_FightCommand < Window_Command
  def initialize
    super(Graphics.width / 2 - window_width / 2, Graphics.height / 2 - 80)
  end
 
  def window_width; return 160; end
  def visible_line_number; return 2; end
 
  def make_command_list
    add_command(GALVFIGHT::CMD_QUIT, :quit, true)
    add_command(GALVFIGHT::CMD_CANCEL, :cancel, true)
  end
 
  def update; super; end
  def select_last; select(0); end
end # Window_FightCommand < Window_Command
 
 
    #---------------------------#
#---|   SPRITE_FIGHTPROJECTILE  |-----------------------------------------------
    #---------------------------#
 
class FightProjectile < Sprite_Base
  attr_accessor :skill
  def initialize(skill, owner)
    @owner = owner
    @target = owner.fight_target
    @skill = skill
    super(SceneManager.scene.spriteset.viewport3)
    init_fvariables
    create_bitmap
  end
 
  def init_fvariables
    self.x = @owner.fight_x
    self.y = @owner.fight_y
    self.opacity = 0
    @pattern = 0
    @pose = @skill.fproj[0]
    @speed_timer = 0
    @range_limit = @skill.fproj[3]
    @range = 0
    @reach = @skill.fproj[4]
  end
 
  def update
    update_src_rect
    update_anim
    update_position
    update_hit
    super
  end
 
  def create_bitmap
    self.bitmap = Cache.battler(GALVFIGHT::SKILLIMAGE, 0)
    @cw = bitmap.width / GALVFIGHT::SKILLCOLS
    @ch = bitmap.height / GALVFIGHT::SKILLROWS
    self.ox = @cw / 2
    self.oy = @ch
    self.mirror = @owner.fight_x > @target.fight_x ? false : true
  end
 
  def update_src_rect
    if @pattern >= GALVFIGHT::SKILLCOLS
      @pattern = 0
    end
    sx = @pattern * @cw
    sy = @pose * @ch
    self.src_rect.set(sx, sy, @cw, @ch)
  end
 
  def update_anim
    @speed_timer += 1
    if @speed_timer > 6
      @pattern += 1
      @speed_timer = 0
    end
  end
 
  def update_position
    self.x += self.mirror ? @skill.fproj[1] : -@skill.fproj[1]
    self.opacity += 20
    @range += 1
  end
 
  def make_animation_sprites
    @ani_sprites = []
    if !@@ani_spr_checker.include?(@animation)
      16.times do
        sprite = ::Sprite.new(viewport)
        sprite.visible = false
        @ani_sprites.push(sprite)
      end
      if @animation.position == 3
        @@ani_spr_checker.push(@animation)
      end
    end
    @ani_duplicated = @@ani_checker.include?(@animation)
    if !@ani_duplicated && @animation.position == 3
      @@ani_checker.push(@animation)
    end
  end
 
  def dispose; super; end
 
  def finished?; @range >= @range_limit; end
 
  def in_range_x; (@target.fight_x - self.x).abs < @reach; end
  def in_range_y; (@target.fight_y - self.y).abs < @reach + 60; end
 
  def make_contact?; return true if in_range_x && in_range_y; end
 
  def update_hit
    if make_contact?
      @owner.proj_hit(@skill)
      @range = @range_limit
    end
  end
end # FightProjectile < Sprite_Base
ссылка на демку www.ex.ua/428888990996
Последнее редактирование: 10 года 7 мес. назад от yros 98.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Dprizrak1, SailorSaturn, ejidzzzzeee_212, Кальмар

Перевод Actor Duel Mini Game 10 года 7 мес. назад #64505

  • Dprizrak1
  • Dprizrak1 аватар
  • Вне сайта
  • Просветлённый
  • Призрак обитающий в стенах Академии
  • Сообщений: 437
  • Спасибо получено: 165
Спасибо yros 98 , думаю пригодится мне :cheer: на арене например. :cheer:
(^_^)
Этот форум слишком умный для меня
Администратор запретил публиковать записи гостям.

Перевод Actor Duel Mini Game 10 года 7 мес. назад #64506

  • yros 98
  • yros 98 аватар
  • Вне сайта
  • Оседлый
  • Сообщений: 44
  • Спасибо получено: 24
Большое спасибо за коментарий призрак :) Я уже начал думать что зря его шеть часов переводил.
Администратор запретил публиковать записи гостям.

Перевод Actor Duel Mini Game 10 года 7 мес. назад #64545

  • SailorSaturn
  • SailorSaturn аватар
  • Вне сайта
  • Бывалый
  • Сообщений: 99
  • Спасибо получено: 36
  • 2 место Проект месяца 3 место
Спасибо большое, yros 98 ,интересная боёвка, особенно, что есть выбор против кого играть против компа или с кем-нибудь.. возможно в "игровом центре" (в части про сейлормун что доделываю), да и так пригодится в будущих проектах, если будут когда-нибудь -если разрешите.
Администратор запретил публиковать записи гостям.

Перевод Actor Duel Mini Game 10 года 7 мес. назад #64548

  • yros 98
  • yros 98 аватар
  • Вне сайта
  • Оседлый
  • Сообщений: 44
  • Спасибо получено: 24
Спасибо за коментарий SailorSaturn. :laugh:
Администратор запретил публиковать записи гостям.

Перевод Actor Duel Mini Game 10 года 7 мес. назад #64549

  • SailorSaturn
  • SailorSaturn аватар
  • Вне сайта
  • Бывалый
  • Сообщений: 99
  • Спасибо получено: 36
  • 2 место Проект месяца 3 место
yros 98 пишет:
Спасибо за коментарий SailorSaturn. :laugh:

Пожалуйста :laugh:
Администратор запретил публиковать записи гостям.

Перевод Actor Duel Mini Game 7 года 8 мес. назад #93538

  • Jas6666
  • Jas6666 аватар
  • Вне сайта
  • Мастер
  • Сообщений: 229
  • Спасибо получено: 205
  • Даритель Стимкея3 местоУчитель
здесь версия 1.6
galvs-scripts.com/galvs-actor-duel-mini-game/
Администратор запретил публиковать записи гостям.
Модераторы: NeKotZima
Время создания страницы: 0.367 секунд