[PSP] Le Script du "Follow Me"

Pages: [1] 2

Flower//

  • Invité
07 Août 2011, 19:35
Bonjour chers nouveaux dans l'univers de Pokémon Script Project.


Attention! Ceci n'est en aucun cas un tuto pour le ROM-Hacking, mais pour RPG Maker.


Bien, aujourd'hui je vais vous apprendre à ajouter le script du Follow Me, en français, suis-moi. Vous l'aurez deviné, ce script permet de faire suivre derrière vous le premier Pokémon de votre équipe, comme dans HG/SS.


Mais tout d'abord, je dois vous apprendre à ajouter un script.
Pour commencer, ouvrez le PSP Mod, puis, ouvrez votre projet PSP.
Cliquez ensuite sur l'éditeur de script ici:




Ici sont rangés TOUS les scripts du jeu. Le côté programmation est là. Tout est codé en "rgss", une forme de "ruby" simplifié. C'est un langage de programmation simple, vous pourrez trouver sur le net des cours pour apprendre le ruby.
Bref, dans la liste de gauche sont rangés les scripts, il suffit de cliquer sur l'un de ceux-ci pour qu'il apparaisse à droite. Pour créer un nouveau script faîtes clique droit sur la liste, puis "nouveau script". Vous n'avez plus qu'à ajouter votre script.

Bien, vous avez tout compris? On va enfin pouvoir ajouter le follow me.


Ajoutez un nouveau script et collez le code que je vais vous donner. Nous remercierons fort Brendan75 de PSP pour ce script fabuleux.
Spoiler
#==============================================================================
# ■ Follow Me Pokémon
# par Brendan75
#-----------------------------------------------------------------------------
# Rend le premier pokémon de l'équipe visible sur la map.
#==============================================================================

PKM_TRANSPARENT_SWITCHES = 50 # Index de l'interrupteur pour rendre invisible

class Follower_Pkm < Game_Character
  include POKEMON_S
  
  def initialize
    super()
    @through = false
    @step_anime = true
    @pkm_id = 0
  end
  
  def update
    if $pokemon_party.size != 0
      @pkm_id = $pokemon_party.actors[0].id
      string = "pkm #{sprintf('%03d', @pkm_id)}.png"
      if @character_name != string
        @character_name = string
        @character_hue = 0
        @opacity = 255
        @blend_type = 0
      end
      if @opacity != ($game_switches[PKM_TRANSPARENT_SWITCHES] ? 0 : 255)
        @opacity = ($game_switches[PKM_TRANSPARENT_SWITCHES] ? 0 : 255)
      end
    else
      @character_name = ""
    end
    self.move_speed = $game_player.move_speed
    super
  end
  
  def screen_z(height = 0)
    if $game_player.x == @x and $game_player.y == @y  
      return $game_player.screen_z(height) - 1
    end
    super(height)
  end
  
  def check_event_trigger_touch(x, y) end
    
  def passable?(x, y, d)
    new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
    new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
    unless $game_map.valid?(new_x, new_y)
      return false
    end
    if @through
      return true
    end
    unless $game_map.passable?(x, y, d, self)
      return false
    end
    unless $game_map.passable?(new_x, new_y, 10 - d)
      return false
    end
    for event in $game_map.events.values
      if event.x == new_x and event.y == new_y
        unless event.through
          if self != $game_player
            return false
          end
          if event.character_name != ""
            return false
          end
        end
      end
    end
    return true
  end
end

#-----------------------------------------------------------------------------
# ● Spriteset Map
#-----------------------------------------------------------------------------
class Spriteset_Map
  alias follow_me_initialize initialize
  def initialize
    follow_me_initialize
    @character_sprites.push(Sprite_Character.new(@viewport1, $game_party.follower_pkm))
    update
  end
end

#-----------------------------------------------------------------------------
# ● Scene Map
#-----------------------------------------------------------------------------
class Scene_Map
  alias follow_me_transfer_player transfer_player
  def transfer_player
    $game_party.erase_moves
    follow_me_transfer_player
  end
  
  alias follow_me_update update
  def update
    follow_me_update
    $game_party.follower_pkm.update
  end
end

#-----------------------------------------------------------------------------
# ● Game Player
#-----------------------------------------------------------------------------
class Game_Player
  alias follow_me_moveto moveto
  def moveto(x, y)
    follow_me_moveto(x, y)
    $game_party.follower_pkm.moveto(x, y)
  end
  
  def move_down(turn_enabled = true)
    if passable?(@x, @y, 2)
      $game_party.move_party_actors
      $game_party.add_move_list(Input::DOWN, turn_enabled)
    end
    super(turn_enabled)
  end
  
  def move_left(turn_enabled = true)
    if passable?(@x, @y, 4)
      $game_party.move_party_actors
      $game_party.add_move_list(Input::LEFT, turn_enabled)
    end
    super(turn_enabled)
  end
  
  def move_right(turn_enabled = true)
    if passable?(@x, @y, 6)
      $game_party.move_party_actors
      $game_party.add_move_list(Input::RIGHT, turn_enabled)
    end
    super(turn_enabled)
  end
  
  def move_up(turn_enabled = true)
    if passable?(@x, @y, 8)
      $game_party.move_party_actors
      $game_party.add_move_list(Input::UP, turn_enabled)
    end
    super(turn_enabled)
  end
end

#-----------------------------------------------------------------------------
# ● Game Party
#-----------------------------------------------------------------------------
class Game_Party
  include POKEMON_S
  attr_accessor :follower_pkm
  
  alias follow_me_initialize initialize
  def initialize
    follow_me_initialize
    @follower_pkm = Follower_Pkm.new
    @next_move = nil
  end
  
  def move_party_actors
    case @next_move.type
    when Input::DOWN
      @follower_pkm.move_down(@next_move.turn_enabled)
    when Input::LEFT
      @follower_pkm.move_left(@next_move.turn_enabled)
    when Input::RIGHT
      @follower_pkm.move_right(@next_move.turn_enabled)
    when Input::UP
      @follower_pkm.move_up(@next_move.turn_enabled)
    else
      return
    end
    erase_moves
  end
    
  def add_move_list(type, turn_enabled)
    @next_move = Move_List_Element.new(type, turn_enabled)
  end
  
  def erase_moves
    @next_move = nil
  end
end

#-----------------------------------------------------------------------------
# ● Move List Element
#-----------------------------------------------------------------------------
class Move_List_Element
  attr_reader :type
  attr_reader :turn_enabled
  
  def initialize(type, turn_enabled)
    @type = type
    @turn_enabled = turn_enabled
  end
end


Nommez le script "Follow Me", et c'est dans la poche!

Mais le Follow Me a besoin de ressources pour fonctionner, bien sûr, l'image du Pokémon qui va suivre. Vous devez placer ces images dans le dossier "Characters". L'image doit avoir CETTE morphologie et pas une autre.
Spoiler

Vous devez aussi nommer les images de cette manière: "Pkm [ID].png" (par exemple "Pkm 001.png" pour Bulbizarre et ainsi de suite).

Allez, je vous aide, voici un pack des Pokémon (merci à Pikachu 5000):
http://www.mediafire.com/?fcte9d6phogw6et


Voilà, vous savez désormais ajouter un script et je vous ai donné le secret du Follow me!
« Modifié: 01 Septembre 2011, 14:21 par Flow' »

zekrom30

  • Membre
  • 1148 posts
07 Août 2011, 19:43
Citer
Le côté programmation du est là.
Il manque pas le mot jeu par hasard?

Bupo

  • Membre
  • 467 posts
07 Août 2011, 19:48
T'as vraiment envie d'ouvrir une section RPGMXP

Tacabro

  • Membre
  • 196 posts
07 Août 2011, 19:50
Ah bien ce script et perso je serais pas contre une section RPGM aussi xD

The New Azerty

  • Membre
  • 2609 posts
07 Août 2011, 20:22

 Super ! J'ai hate de m'y mettre. :D

Layton'

  • Membre
  • 1350 posts

Flower//

  • Invité
07 Août 2011, 21:57
T'as vraiment envie d'ouvrir une section RPGMXP
Oui, pour avoir une nouvelle section il faut du contenu, et ben va en avoir du contenu!
« Modifié: 07 Août 2011, 23:57 par Flow' »

Nab

  • Membre
  • 251 posts
08 Août 2011, 11:18
Ce serais énorme de coupler ce script avec un autre pour connaître l'humeur de pokémon. :you:
Ca n'a pas l'air bien compliqué

Flower//

  • Invité
08 Août 2011, 11:37
Oulaaa! C'est difficile ce que tu demande. Il faudrait créer une nouvelle valeur qu'on appellerait "humeur" qui augmenterais selon certaines conditions et la faire afficher via son Pokémon.

Vinc'

  • Membre
  • 3115 posts
08 Août 2011, 11:48
Elle existe pas déjà ? Pour les pokémons évoluant s'ils sont heureux ?

Flower//

  • Invité
08 Août 2011, 12:01
Si, ça me revient! On peut utiliser la loyauté et l'adapter au bonheur pour les évolutions des Pokémon de cette manière.

Si je te retrouve le code je te le passe.

Nab

  • Membre
  • 251 posts
08 Août 2011, 12:12
J'avais écrit un pavé mais il sert plus à rien maintenant :(
@Vinc': Non je parle de faire un système comme dans les remakes de Or et Argent, on 'parle avec notre pokémon, il affiche un émoticône selon l'humeur.

@Flow': Je suis pas sûr du tout mais il me semble que dans HG/SS, l'humeur du pokémon dépendait de ses PV et de sa statistique de bonheur ainsi que son statut si il est altéré et du nombre de pas.
La valeur humeur peut avoir 6 valeurs différentes avec une sorte de graduation allant de 0 à 5 et la 6ème n'est utilisé que si le pokémon est empoisonné et l'humeur sur l'échelle de 0 à 5 se calcule en ajoutant 1 par par conditions valides. Par exemple si tu a parcouru plus de 255 pas avec se pokémon, l'humeur augmente de 1, si ses PV sont au dessus de la moitié maximale, +1, bonheur au dessus de 127, +1, pokémon paralysé, brûlé, givré, endormi, -1, et empoisonné serait la valeur spéciale.

Voilà en gros ce que ça serai, le plus dur étant d'afficher l'emote et d'afficher un texte puis de revenir au jeu normalement.

J'ai pas besoin du code, mais si tu le trouve tu pourras faire un autre tuto pour la future section ;)

Flower//

  • Invité
08 Août 2011, 12:43
Je ferais tout ce qui est dans mon possible pour que cette section naisse. Si vous êtes prêts à l'animer et à vous mettre a PSP, j'aurais les arguments pour créer une nouvelle section.

Nab

  • Membre
  • 251 posts
09 Août 2011, 20:13
Faudrais peut-être un sondage, non ?

Car j'ai aucune idée de combien de personnes veulent utiliser PSP pour leurs projets :/

yago58

  • Invité
09 Août 2011, 20:24
Non, c'est inutile, sinon ça va être le cirque.

Mic Mac

  • Membre
  • 4599 posts
10 Août 2011, 01:32
Moi je peux m'y mettre, il faut que je prenne le temps de lire les tuto de Flow' un jour c'est tout, car ça a l'air très intéressant à mes yeux, je suis pour cette section, & gg à toi Flow'.

Flower//

  • Invité
10 Août 2011, 08:24
Thanks Rafale.

pikachu5000

  • Membre
  • 64 posts
18 Août 2011, 17:46
voici tous les pokemon a mettre dans le dossier Characters: Ici et pour ne le renommer remplacer le script par celui-ci:
Spoiler
#==============================================================================
# ■ Follow Me Pokémon
# par Brendan75
#-----------------------------------------------------------------------------
# Rend le premier pokémon de l'équipe visible sur la map.
#==============================================================================

PKM_TRANSPARENT_SWITCHES = 50 # Index de l'interrupteur pour rendre invisible

class Follower_Pkm < Game_Character
  include POKEMON_S
  
  def initialize
    super()
    @through = false
    @step_anime = true
    @pkm_id = 0
    @shiney = false
  end
  
  def update
    if $pokemon_party.size != 0
      @pkm_id = $pokemon_party.actors[0].id
      @shiney = $pokemon_party.actors[0].shiny
      if @shiney
        string = "#{sprintf('%03d', @pkm_id)}s_0.png"
      else
        string = "#{sprintf('%03d', @pkm_id)}_0.png"
      end
      if @character_name != string
        @character_name = string
        @character_hue = 0
        @opacity = 255
        @blend_type = 0
      end
    else
      @character_name = ""
    end
    super
  end
  
  def check_event_trigger_touch(x, y) end
    
  def passable?(x, y, d)
    new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
    new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
    unless $game_map.valid?(new_x, new_y)
      return false
    end
    if @through
      return true
    end
    unless $game_map.passable?(x, y, d, self)
      return false
    end
    unless $game_map.passable?(new_x, new_y, 10 - d)
      return false
    end
    for event in $game_map.events.values
      if event.x == new_x and event.y == new_y
        unless event.through
          if self != $game_player
            return false
          end
          if event.character_name != ""
            return false
          end
        end
      end
    end
    return true
  end
end

#-----------------------------------------------------------------------------
# ● Spriteset Map
#-----------------------------------------------------------------------------
class Spriteset_Map
  alias follow_me_initialize initialize
  def initialize
    follow_me_initialize
    @character_sprites.push(Sprite_Character.new(@viewport1, $game_party.follower_pkm))
    update
  end
end

#-----------------------------------------------------------------------------
# ● Scene Map
#-----------------------------------------------------------------------------
class Scene_Map
  alias follow_me_transfer_player transfer_player
  def transfer_player
    $game_party.erase_moves
    follow_me_transfer_player
  end
  
  alias follow_me_update update
  def update
    follow_me_update
    $game_party.follower_pkm.update
  end
end

#-----------------------------------------------------------------------------
# ● Game Player
#-----------------------------------------------------------------------------
class Game_Player
  alias follow_me_moveto moveto
  def moveto(x, y)
    follow_me_moveto(x, y)
    $game_party.follower_pkm.moveto(x, y)
  end
  
  def move_down(turn_enabled = true)
    if passable?(@x, @y, 2)
      $game_party.move_party_actors
      $game_party.add_move_list(Input::DOWN, turn_enabled)
    end
    super(turn_enabled)
  end
  
  def move_left(turn_enabled = true)
    if passable?(@x, @y, 4)
      $game_party.move_party_actors
      $game_party.add_move_list(Input::LEFT, turn_enabled)
    end
    super(turn_enabled)
  end
  
  def move_right(turn_enabled = true)
    if passable?(@x, @y, 6)
      $game_party.move_party_actors
      $game_party.add_move_list(Input::RIGHT, turn_enabled)
    end
    super(turn_enabled)
  end
  
  def move_up(turn_enabled = true)
    if passable?(@x, @y, 8)
      $game_party.move_party_actors
      $game_party.add_move_list(Input::UP, turn_enabled)
    end
    super(turn_enabled)
  end
end

#-----------------------------------------------------------------------------
# ● Game Party
#-----------------------------------------------------------------------------
class Game_Party
  include POKEMON_S
  attr_accessor :follower_pkm
  
  alias follow_me_initialize initialize
  def initialize
    follow_me_initialize
    @follower_pkm = Follower_Pkm.new
    @next_move = nil
  end
  
  def move_party_actors
    case @next_move.type
    when Input::DOWN
      @follower_pkm.move_down(@next_move.turn_enabled)
    when Input::LEFT
      @follower_pkm.move_left(@next_move.turn_enabled)
    when Input::RIGHT
      @follower_pkm.move_right(@next_move.turn_enabled)
    when Input::UP
      @follower_pkm.move_up(@next_move.turn_enabled)
    else
      return
    end
    erase_moves
  end
    
  def add_move_list(type, turn_enabled)
    @next_move = Move_List_Element.new(type, turn_enabled)
  end
  
  def erase_moves
    @next_move = nil
  end
end

#-----------------------------------------------------------------------------
# ● Move List Element
#-----------------------------------------------------------------------------
class Move_List_Element
  attr_reader :type
  attr_reader :turn_enabled
  
  def initialize(type, turn_enabled)
    @type = type
    @turn_enabled = turn_enabled
  end
end
ca prendra aussi les brillants(comme moi lol)en compte.
« Modifié: 22 Août 2011, 13:17 par pikachu5000 »

Flower//

  • Invité
20 Août 2011, 07:05
Le lien est mort... Et tu n'explique pas comment il faut nommer les images des shineys pour que le script en prenne compte.

pikachu5000

  • Membre
  • 64 posts
20 Août 2011, 20:33
Il y a pas besion de remonmer.

Tacabro

  • Membre
  • 196 posts
20 Août 2011, 20:56
Il y a pas besion de remonmer.

Possible, mais le lien est mort  ;)

pikachu5000

  • Membre
  • 64 posts
22 Août 2011, 13:17
http://www.megaupload.com/?d=4IOZKQ4G (corrige sur mon post)
Edit:
Citation de: Flow'
Tout est codé en "ruby".
Faux c'est du RGSS.
« Modifié: 22 Août 2011, 13:38 par pikachu5000 »

Tacabro

  • Membre
  • 196 posts
22 Août 2011, 14:10
Merci à toi :)

Citation de: Flow'
Tout est codé en "ruby".
Faux c'est du RGSS.

Il me semble que le langage de script de RGSS est le ruby justement

pikachu5000

  • Membre
  • 64 posts
22 Août 2011, 14:33
Le Rgss ressemble au ruby mais n'est pas ruby.Exemple:
En ruby:puts"message"
En Rgss:p "message"

Tacabro

  • Membre
  • 196 posts
22 Août 2011, 15:01
Merci de la précision alors :)

Flower//

  • Invité
27 Août 2011, 23:57
Je corrige pour le langage.

Edualc

  • Membre
  • 7373 posts
28 Août 2011, 00:22
Quelqu'un peut uploader le fichier sur Médiafire? J'ai des petits soucis avec MU en ce moment. :)

pikachu5000

  • Membre
  • 64 posts

Flower//

  • Invité
01 Septembre 2011, 14:25
J'ai ajouté le lien sur le first post.

WilliX719

  • Membre
  • 3 posts
14 Octobre 2014, 17:47
Salut les pokéfans, je sais que ce forum est assez vieux, mais, je me demandais, dans les images : "pkm [ID].png" comment fait-on quand le pokémon a des différences mâles/femmelle comme Florizarre, ou quand il a plusieurs formes comme Arceus et/ou quand il est shiny ?  ??? ??? ??? Je pose cette question car moi, c'est toujours la première forme qui apparaît, quelque sois son genre, sa forme ou son "chromatisme" !!!  >:( >:( >:(

Pages: [1] 2    En haut ↑