Partagez
Aller en bas
Dream-San
Dream-San
Membre

Nombre de messages : 23
Age : 25
Localisation : Et là, plus de mayo.
Distinction : aucune
Date d'inscription : 23/01/2013

[VXAce] Modifications d'interface et système de TP amélioré. Empty [VXAce] Modifications d'interface et système de TP amélioré.

le Jeu 24 Jan 2013 - 18:58
bjr jeu voudré dé skript pour fere un jeu a la kall of douti lol mdr xd x...Oooh, mais Kevin, tu fais encore n'importe quoi sur mon ordi ! Allez, va jouez à Daubefus et arrête de squatter mon ordi.

Bref, bonjour. J'ai besoin de personnes pour faire des scripts, au niveau de l'interface et du Gameplay. Je n'ai besoin que de 4 scripts (Allez, 3 et demi), dont voici la liste :

Type de script: Scripts améliorant les PT, avec des modifications sur l'interface.

Explication complète:

I) Menu modifié pour préparer le terrain du système de TP

C'est plus un add-on du script 3 qu'autre chose : J'aimerais changer l'interface du menu, pour qu'elle affiche les TP (Appelés "Burst" dans mon projet). Voici un screen de ce que j'aimerais :

Spoiler:
[VXAce] Modifications d'interface et système de TP amélioré. 1359047557-menuexemple

(C'est moche, oui, mais c'est juste un exemple) Ainsi, on aura quelque chose de relativement propre et fidèle à l'interface originale. Le menu "options" pourrait ouvrir la fenêtre quand on appuie sur F1. Si ce n'est pas possible, ce n'est pas grave, vous pourrez le virer. De préférence, tout sera en windowskin, à l'exception du rond (D'ailleurs je suis une fiente en graphismes, un exemple ne serait pas de refus, mais non obligatoire. J'essaierais de le décrapouiller). Egalement, j'ai oublié de noter que les altérations d’état seront en bas des PM, mais pas marquées directement. Juste les icônes.

Wàla pour le premier script, on passe au deuxième, relativement similaire :

II) Interface des combats modifiée

Une image vaut mieux que des mots, donc voici :

Spoiler:
[VXAce] Modifications d'interface et système de TP amélioré. 1359048319-windowskincombatexemple

J'ai oublié de dire que le fond de chaque case contiendra le faceset, par contre.
Donc je pense que vous, pauvres êtres sans morale, vous avez un semblant de réflexion, donc je n'aurai pas besoin de vous torturer pour que vous compreniez l'interface. Elle remplacera la liste des persos de gauche lors des combats, j'aimerais qu'elle soit compatible avec le Viewed Battle System :

Spoiler:
Code:
 
#===============================================================================
# Jet's Viewed Battle System
# By Jet10985(Jet)
#===============================================================================
# This script will add actor sprites into the battle scene.
# This script has: 10 customization options.
#===============================================================================
# Overwritten Methods:
# Game_Actor: use_sprite?, screen_x, screen_y
# Sprite_Battler: revert_to_normal
# Scene_Battle: show_attack_animation
#-------------------------------------------------------------------------------
# Aliased methods:
# Game_Enemy: screen_x, screen_y
# Sprite_Battler: update_origin, update_bitmap
# Window_BattleEnemy: update
# Window_BattleActor: update
# Window_ActorCommand: update
#===============================================================================
=begin
Set an enemy's attack animation by using this in their notebox:

<anim: 50>

Replace 50 with the animation id.
--------------------------------------------------------------------------------
You may use a sprite for a monster instead of a regular battler by using this
notetag in the monster's notebox:

<sprite: ImageName, 0>

Replace ImageName with the name of the spritesheet, and 0 with the index on the
spritesheet you want the monster to use.
=end

module Jet
  module VBS
   
    # Which direction do actors face on the field? There are 4 options:
    # :up, :down, :left, or :right. Actor's will direction chosen.
    ACTOR_ORIENTATION = :up
   
    # This will make it so actor's are centered on the screen instead of being
    # placed in pre-determined lines using START_POINT and SPACE_DIFFERENCE.
    CENTER_ACTORS = true
   
    # This is the x and y starting point for actors. This option may take one of
    # 2 functions. If CENTER_ACTORS is true, and ACTOR_ORIENTATION is either
    # :left, or :right, then only the x value will be used as where to center
    # the actors. If it is :down or :up, only the y value will be used.
    # If CENTER_ACTORS is false, then this is where actor's will begin to be
    # placed on screen.
    START_POINT = [400, 250]
   
    # This is how much space is between each actor on the field.
    SPACE_DIFFERENCE = 50
   
    # If you're using the :left or :right view, this will push each
    # subsequent actor back by a certain number of pixels, to avoid having
    # a straight line.
    SIDEVIEW_PUSH_BACK = 16
   
    # Do you want to reverse the direction and field during an ambush?
    # (This is when enemies surprise the player and get the first turn)
    REVERSE_FIELD_FOR_AMBUSH = true
   
    # this is how far the actor will move forward when they are selection an
    # action, as well as executing it.
    SLIDE_AMOUNT = 30
   
    # This is how far the actor will slide each frame until they reach their
    # goal of SLIDE_FORWARD. Best used when this is a factor of SLIDE_FORWARD.
    FRAME_SLIDE = 6
   
    # During selecting an actor command, and during selecting an enemy target,
    # would you like the selected character to flash?
    DO_FLASH = true
   
    # These are state-based sprite changes. If the actor has one of these states
    # then the game will search for a sprite of the character's regular sprite
    # name with the special state tag appended to it. So if Jimmy's sprite
    # name was $Jimmy, and he had poison inflcted on him, and poison's id was
    # listed here as ["_poison", 0], it would change Jimmy's in-battle sprite
    # to $Jimmy_poison at the first sprite index.
    STATE_SPRITES = {
   
      1 => ["", 0],
      2 => ["", 0]
     
    }
   
    # Do not touch this option.
    DIR_ORIENT = {right: 6, left: 4, down: 2, up: 8}[ACTOR_ORIENTATION]
   
  end
end

#===============================================================================
# DON'T EDIT FURTHER UNLESS YOU KNOW WHAT TO DO.
#===============================================================================
class Integer
 
  def even?
    self % 2 == 0
  end
 
  def odd?
    !even?
  end
end

class RPG::Enemy
 
  def animation
    (f = note.match(/<anim:[ ]*(\d+)>/i)) ? f[1].to_i : 1
  end
 
  def battle_sprite
    (f = note.match(/<sprite:[ ]*(.+),[ ]*(\d+)>/i)) ? f[1..2] : false
  end
end

module BattleManager
 
  class << self
   
    alias jet3845_on_encounter on_encounter
    def on_encounter(*args, &block)
      jet3845_on_encounter(*args, &block)
      @true_surprise = @surprise
    end
  end
 
  def self.true_surprise
    @true_surprise ||= false
  end
 
  def self.player_dir
    if @true_surprise && Jet::VBS::REVERSE_FIELD_FOR_AMBUSH
      return 10 - Jet::VBS::DIR_ORIENT
    else
      return Jet::VBS::DIR_ORIENT
    end
  end
end

class Game_Actor
 
  def use_sprite?
    true
  end
 
  def screen_x
    if [8, 2].include?(BattleManager.player_dir)
      if Jet::VBS::CENTER_ACTORS
        x = Graphics.width / 2
        x -= 16
        x += Jet::VBS::SPACE_DIFFERENCE / 2 if $game_party.members.size.even?
        x -= ($game_party.members.size / 2 - index) * Jet::VBS::SPACE_DIFFERENCE
        return x
      else
        return Jet::VBS::START_POINT[0] + Jet::VBS::SPACE_DIFFERENCE * index
      end
    end
    return Jet::VBS::START_POINT[0]
  end
 
  alias jet3745_screen_x screen_x
  def screen_x(*args, &block)
    x = jet3745_screen_x(*args, &block)
    case BattleManager.player_dir
    when 4
      x += Jet::VBS::SIDEVIEW_PUSH_BACK * index
    when 6
      x -= Jet::VBS::SIDEVIEW_PUSH_BACK * index
    end
    return x if !Jet::VBS::REVERSE_FIELD_FOR_AMBUSH
    x = Graphics.width - x if BattleManager.true_surprise && [6, 4].include?(BattleManager.player_dir)
    x
  end
 
  def screen_y
    if [6, 4].include?(BattleManager.player_dir)
      if Jet::VBS::CENTER_ACTORS
        y = Graphics.height / 2
        y -= 16
        y += Jet::VBS::SPACE_DIFFERENCE / 2 if $game_party.members.size.even?
        y -= ($game_party.members.size / 2 - index) * Jet::VBS::SPACE_DIFFERENCE
        return y
      else
        return Jet::VBS::START_POINT[1] + Jet::VBS::SPACE_DIFFERENCE * index
      end
    end
    return Jet::VBS::START_POINT[1]
  end
 
  alias jet3745_screen_y screen_y
  def screen_y(*args, &block)
    y = jet3745_screen_y(*args, &block)
    return y if !Jet::VBS::REVERSE_FIELD_FOR_AMBUSH
    y = Graphics.height - y if BattleManager.true_surprise && [8, 2].include?(BattleManager.player_dir)
    y
  end
 
  def screen_z
    101 + index
  end
 
  alias jet3745_character_name character_name
  def character_name(*args, &block)
    name = jet3745_character_name(*args, &block)
    return name unless SceneManager.scene_is?(Scene_Battle)
    states.sort {|a, b| b.priority <=> a.priority }.each {|a|
      if (add = Jet::VBS::STATE_SPRITES[a.id])
        return name + add[0]
      end
    }
    return name
  end
 
  alias jet3745_character_index character_index
  def character_index(*args, &block)
    index = jet3745_character_index(*args, &block)
    return index unless SceneManager.scene_is?(Scene_Battle)
    states.sort {|a, b| b.priority <=> a.priority }.each {|a|
      if (add = Jet::VBS::STATE_SPRITES[a.id])
        return index + add[1]
      end
    }
    return index
  end
end

class Game_Enemy
 
  alias jet3745_screen_x screen_x
  def screen_x(*args, &block)
    x = jet3745_screen_x(*args, &block)
    return x if !Jet::VBS::REVERSE_FIELD_FOR_AMBUSH
    x = Graphics.width - x if BattleManager.true_surprise && [6, 4].include?(BattleManager.player_dir)
    x
  end
 
  alias jet3745_screen_y screen_y
  def screen_y(*args, &block)
    y = jet3745_screen_y(*args, &block)
    return y if !Jet::VBS::REVERSE_FIELD_FOR_AMBUSH
    y = Graphics.height - y if BattleManager.true_surprise && [8, 2].include?(BattleManager.player_dir)
    y
  end
 
  def atk_animation_id1
    enemy.animation
  end
 
  def atk_animation_id2
    0
  end
 
  def bat_sprite?
    !!enemy.battle_sprite
  end
 
  def character_name
    enemy.battle_sprite[0]
  end
 
  def character_index
    enemy.battle_sprite[1].to_i
  end
 
  alias jet3745_character_name character_name
  def character_name(*args, &block)
    name = jet3745_character_name(*args, &block)
    return name unless SceneManager.scene_is?(Scene_Battle)
    states.sort {|a, b| b.priority <=> a.priority }.each {|a|
      if (add = Jet::VBS::STATE_SPRITES[a.id])
        return name + add[0]
      end
    }
    return name
  end
 
  alias jet3745_character_index character_index
  def character_index(*args, &block)
    index = jet3745_character_index(*args, &block)
    return index unless SceneManager.scene_is?(Scene_Battle)
    states.sort {|a, b| b.priority <=> a.priority }.each {|a|
      if (add = Jet::VBS::STATE_SPRITES[a.id])
        return index + add[1]
      end
    }
    return index
  end
end

class Sprite_Battler
 
  alias jet3835_update_bitmap update_bitmap
  def update_bitmap(*args, &block)
    if @battler.actor? || @battler.bat_sprite?
      actor_update_bitmap
    elsif @battler.enemy?
      jet3835_update_bitmap(*args, &block)
    end
  end
 
  def actor_update_bitmap
    @timer ||= 0
    @index ||= 1
    @char_index ||= @battler.character_index
    @back_time ||= false
    index = @index
    char_index = @char_index
    @timer += 1
    (@index += (@back_time ? -1 : 1); @timer = 0) if @timer == 19
    if @index == 3
      @back_time = true
      @index = 1
    elsif @index == -1
      @back_time = false
      @index = 1
    end
    @char_index = @battler.character_index
    bitmap = Cache.character(@battler.character_name)
    return if bitmap == @bitmap && index == @index && @char_index == char_index
    self.bitmap = bitmap
    sign = @battler.character_name[/^[\!\$]./]
    if sign && sign.include?('$')
      cw = bitmap.width / 3
      ch = bitmap.height / 4
    else
      cw = bitmap.width / 12
      ch = bitmap.height / 8
    end
    dir = BattleManager.player_dir
    dir = 10 - dir if @battler.is_a?(Game_Enemy)
    sx = (@battler.character_index % 4 * 3) * cw + (cw * @index)
    sy = (@battler.character_index / 4 * 4 + (dir - 2) / 2) * ch
    self.src_rect.set(sx, sy, cw, ch)
  end
 
  alias jet3745_update_origin update_origin
  def update_origin(*args, &block)
    if @battler.actor? || @battler.bat_sprite?
      actor_update_origin
    elsif @battler.enemy?
      jet3745_update_origin(*args, &block)
    end
  end
 
  def actor_update_origin
    self.ox = (@actor_ox ||= 0)
    self.oy = (@actor_oy ||= 0)
  end
 
  def revert_to_normal
    self.blend_type = 0
    self.color.set(0, 0, 0, 0)
    self.opacity = 255
    if bitmap && @battler && !@battler.actor? && !@battler.bat_sprite?
      self.ox = bitmap.width / 2 if bitmap
      self.src_rect.y = 0
    end
  end
 
  def slide_forward(amount = Jet::VBS::SLIDE_AMOUNT, frame = Jet::VBS::FRAME_SLIDE)
    dir = BattleManager.player_dir
    dir = 10 - dir if @battler.is_a?(Game_Enemy)
    case dir
    when 2
      affect = :@actor_oy
      frame *= -1
    when 4
      affect = :@actor_ox
      amount *= -1
    when 6
      affect = :@actor_ox
      frame *= -1
    when 8
      affect = :@actor_oy
      amount *= -1
    end
    orig_amount = amount
    until (orig_amount < 0 ? amount >= 0 : amount <= 0)
      instance_variable_set(affect, instance_variable_get(affect) + frame)
      amount += frame
      SceneManager.scene.spriteset.update
      Graphics.update
    end
  end
 
  def slide_backward(amount = Jet::VBS::SLIDE_AMOUNT, frame = Jet::VBS::FRAME_SLIDE)
    dir = BattleManager.player_dir
    dir = 10 - dir if @battler.is_a?(Game_Enemy)
    case dir
    when 2
      affect = :@actor_oy
      amount *= -1
    when 4
      affect = :@actor_ox
      frame *= -1
    when 6
      affect = :@actor_ox
      amount *= -1
    when 8
      affect = :@actor_oy
      frame *= -1
    end
    orig_amount = amount
    until (orig_amount < 0 ? amount >= 0 : amount <= 0)
      instance_variable_set(affect, instance_variable_get(affect) + frame)
      amount += frame
      SceneManager.scene.spriteset.update
      Graphics.update
    end
  end
end

class Scene_Battle
 
  attr_reader :spriteset
 
  def show_attack_animation(targets)
    show_normal_animation(targets, @subject.atk_animation_id1, false)
    show_normal_animation(targets, @subject.atk_animation_id2, true)
  end
 
  alias jet3746_use_item use_item
  def use_item(*args, &block)
    sprite = @spriteset.battler_to_sprite(@subject)
    if (@subject.actor? || @subject.bat_sprite?) && !@subject.current_action.guard?
      sprite.slide_forward
    end
    jet3746_use_item(*args, &block)
    if (@subject.actor? || @subject.bat_sprite?) && !@subject.current_action.guard?
      sprite.slide_backward
    end
  end
end

class Spriteset_Battle
 
  def battler_to_sprite(actor)
    battler_sprites.each {|a|
      return a if a.battler == actor
    }
    return false
  end
end

class Window_BattleEnemy
 
  alias jet3745_update update
  def update(*args, &block)
    jet3745_update(*args, &block)
    if self.active && Jet::VBS::DO_FLASH
      if Object.const_defined?(:Mouse)
        $game_troop.alive_members.each {|a|
          img = SceneManager.scene.spriteset.battler_to_sprite(a)
          x = img.x - img.ox
          y = img.y - img.oy
          if Mouse.area?(x, y, img.src_rect.width, img.src_rect.height)
            self.index = a.index
          end
        }
      end
      active_troop = $game_troop.alive_members[@index]
      sprite = SceneManager.scene.spriteset.battler_to_sprite(active_troop)
      sprite.start_effect(:whiten) if !sprite.effect?
    end
  end
end

class Window_BattleActor
 
  alias jet3745_update update
  def update(*args, &block)
    jet3745_update(*args, &block)
    if self.active && Jet::VBS::DO_FLASH
      if Object.const_defined?(:Mouse)
        $game_party.alive_members.each {|a|
          img = SceneManager.scene.spriteset.battler_to_sprite(a)
          x = img.x - img.ox
          y = img.y - img.oy
          if Mouse.area?(x, y, img.src_rect.width, img.src_rect.height)
            self.index = a.index
          end
        }
      end
      active_troop = $game_party.members[@index]
      sprite = SceneManager.scene.spriteset.battler_to_sprite(active_troop)
      sprite.start_effect(:whiten) if !sprite.effect?
    end
  end
end

class Window_ActorCommand
 
  alias jet3745_update update
  def update(*args, &block)
    jet3745_update(*args, &block)
    if self.active && Jet::VBS::DO_FLASH
      active_troop = @actor
      sprite = SceneManager.scene.spriteset.battler_to_sprite(active_troop)
      sprite.start_effect(:whiten) if !sprite.effect?
    end
  end
end

class Game_Action
 
  def guard?
    item == $data_skills[subject.guard_skill_id]
  end
end

Wàla. On passe maintenant au gros du sujet : Le système de TP.

III) Système de "Burst" et PB

Comme vous pouvez voir dans les screens ci-dessus, lors des combats il y aura un "camembert", qui se remplira. C'est le Burst. Il augmente à chaque fois qu'on subit des dégâts selon ce calcul : Burst gagné = % de PV perdu x 1.5. Quand le Burst est à 100%, on gagne un PT (Que j’appellerais PB dans mon jeu). Le nombre maximum de PT pourra être modifié au cours du jeu, mais au début il est à 1.

Ensuite, certaines attaques utiliseront des PT. Quand elles seront utilisées, l'écran s'assombrira, sauf le personnage qui lance l'action (Viewed Battle System powa) et la cible. L'écran reviendra à la normale après.

Allez, le dernier script :


IV) Formation améliorée, mais pas trop[/u

Dès qu'on choisira "Formation", le menu scrollera vers la gauche, pour ne laisser apparaître que les fenêtres des personnages dans l'équipe. A droite figureront les équipiers dans la réserve. On pourra switcher entre ceux dans la réserve et ceux actifs, mais le premier personnage sera bloqué : Impossible de le changer.

[u]Spécificités:
Le camembert du Burst se remplira dans le sens des aiguilles d'une montre, et une fois complet il se remettra à zéro et donnera un PT.

Schéma très clair: Les schémas sont en haut. Je les repost :

Menu :
Spoiler:
[VXAce] Modifications d'interface et système de TP amélioré. 1359047557-menuexemple

Combat :
Spoiler:
[VXAce] Modifications d'interface et système de TP amélioré. 1359048319-windowskincombatexemple

Ressources supplémentaires: Faites en deux minutes et demi sur Paint.net :

Burst rempli :

[VXAce] Modifications d'interface et système de TP amélioré. 1359139099-burst1

Burst non-rempli :

[VXAce] Modifications d'interface et système de TP amélioré. 1359139134-burst2

Je suppose qu'en faisant "disparaître" le camembert noir au fur et à mesure qu'on gagne du Burst, on devrait avoir ce que je pense. Après, c'est juste des suppositions =P

Exemples dans un jeu video: J'en ai pas sous la main, mais je pense qu'il y en a. Je dirais Tales Of Graces, avec le système de PE (Jauge qui se remplit, et quand elle atteint un certain cap : 1 PE), mais je pense que ce système doit exister dans un jeu.

Scripts déjà possédés: Le center Map Name, le module de base du Victor Engine + Déplacements par pixel, Le Mist' Anime Title Screen et le Jet's Viewed Battle System.


Voîlà, c'est à peu prêt tout, je remercie chaleureusement ceux qui ont eu le temps de tout lire, et j’espère que ma demande vous interpellera ! Au revoir ! =P
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum