LOG des modifications v3.x - v4.0 Correction de bugs Ajout de la possibilité d'utiliser en combat... Le rendu est un peu étrange, mais ça fonctionne. À moins de bugs majeur, je n'ai pas d'autres modifications prévues. v3.5 - v3.8 Quelques réorganisation Ajout de l'enregistrement de la forme dans une variable (configurable) Surcharge de Windows_Skill plutôt que Scene_Skill (préparation pour intégration en combat) v3.0 - v3.5 Possibilité que plusieurs acteurs ait la compétence et d'affecter des valeurs différentes à chacun selon le cas. Correction d'un certain nombre de bug Détermine quel acteur est afecté par le préchoix si activé v2.x - v3.0 Il n'y a plus de limitation de formes. (Contrairement aux versions précédentes) Il n'est plus nécessaire d'enregistrer les choix dans une variable. Le menu n'est plus sur un écran noir v1.x - 2.0 La seule limite de forme est de 8 due au fichier de lecture, mais sera réglé dans la prochaine version. N'utilise plus de variables de contrôle. Légèrement modifiable grâce à quelques variables de configuration
C'est une adaptation du script du concours qui permet une plus vaste utilisation du script.
Pour faire fonctionner, faites copier le script dans vos materials (au dessus du main). Pour lancer le script, simplement appeler
Code:
$scene = Scene_Xform.new
Une utilisation possible est de créer vous une compétence sans cible appelée du menu seulement qui appèlera un event commun dans lequel vous inscrirez le script d'appel ou encore créer une événement "cabine" et appeler le script dans votre event.
Ce script surcharge également le menu Titre au besoin. Pour activer la surcharge pour choisir une apparence de départ,
Code:
Pre_Choix_Active = true
dans le module de CONFIG. Pour désactiver
Code:
Pre_Choix_Active = false
. Lorsque la surcharge est désactivé, l'apparence du héro est celle choisie dans la base de données. Le script conserve également l'apparence d'origine pour que vous retrouviez votre apparence "normale" en redevenant "vous-même".
Il n'y a pas de screen car globalement, ça dépends beaucoup de la façon dont vous utiliserez le script. Globalement, on ne fait qu'ajouter un menu.
Code:
# #(c)2009 MirainoHikari, rpg-maker-vx.bbactif.com # # Version 4.0 # # Pour lancer la compétence $scene = Scene_Xform.new # #
module CONFIG # CONFIG DES VARIABLES
# Si le préchoix doit être désactiver, mettre à false, sinon mettre à true Pre_Choix_Active = true
# Si vous désirez conserver la valeur du choix, mettre Reminder à True # et donner l'index de la variable de contrôle à utiliser XF_Choix_Reminder = true Pre_Choix_Var = 51
# Liste des choix d'apparence de départ. La clé suivante est la valeur pour # le fichier d'apparence avec son indexe et le fichier du visage avec # son index. Dans cet exemple, ça correspond, mais ce n'est pas obligatoire. Pre_Choix = {"Homme" => ["Actor1",0,"Actor1",0], "Femme" => ["Actor1",1,"Actor1",1]} # Numéro de l'Acteur affecté par le préchoix Prechoix_At = 1
# Liste des transformation disponible
# Valeur pour revenir à l'état initiale NORMAL = "Normal"
# Ici, on donne le nom de la transformation, le nom du fichier du personnage # avec son index et le fichier du visage avec son index. Ne sont pas obligé # de correspondre # Ne pas retirer la première ligne. Pour le reste, vous pouvez en ajouter # ou en retirer autant que vous le désirez. La clé du hash doit correspondre # avec l'id de l'Acteur de la liste de la base de donnée.
Liste = {1 => { NORMAL => [], #retourne à valeur origine "ombre" => ["Evil",3,"Evil",3], "chien" => ["Animal",0,"Monster",2], "chat" => ["Actor3",7,"Actor3",7], "fée" => ["Spiritual",4,"Spiritual",4] }, 2 => { NORMAL => [], #retourne à valeur origine "chien" => ["Animal",0,"Monster",2], "voleur" => ["Evil",2,"Evil",2]} }
#variable de contrôle devant être affecté par le changement de costume #seul les acteurs que vous voulez conserver sont dans cette liste ##actor => index de la variable #si aucune variable à conserver, laisser vide XF_vars_list = {} XF_vars_list = {1=>52,2=>53}
end #Fin de la config. ################################################################### ################################################################### ################################################################### ################################################################### ################################################################### ################################################################### ################################################################### #Ne pas modifier au dela de ce point si vous ne savez pas ce que #vous faites.
#========================================= # Surcharge du Skill #======================================== class Window_Skill < Window_Selectable #-------------------------------------------------------------------------- # * Object Initialization # x : window x-coordinate # y : window y-coordinate # width : window width # height : window height # actor : actor #-------------------------------------------------------------------------- alias xform_old_init initialize def initialize(x, y, width, height, actor) xform_old_init(x, y, width, height, actor) $xf_skilled_actor = actor end end
#======================================================= # Surcharge Actor #======================================================= class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # * Public Instance Variables #-------------------------------------------------------------------------- attr_reader :ini_form # initial form attr_reader :forms # character possible forms #-------------------------------------------------------------------------- # * Object Initialization # actor_id : actor ID #-------------------------------------------------------------------------- alias xform_old_init initialize def initialize(actor_id) xform_old_init(actor_id) @forms = { CONFIG::NORMAL => []} end
# Modificateurs d'apparence
def set_initial_form @ini_form = [self.character_name, self.character_index, self.face_name, self.face_index] if CONFIG::XF_vars_list.has_key?(self.id) $game_variables[CONFIG::XF_vars_list[self.id]] = CONFIG::NORMAL end end
def get_initial_form self.set_graphic(@ini_form[0],@ini_form[1],@ini_form[2],@ini_form[3]) if CONFIG::XF_vars_list.has_key?(self.id) $game_variables[CONFIG::XF_vars_list[self.id]] = CONFIG::NORMAL end end
def get_next_form(perso) new_form = @forms[perso] self.set_graphic(new_form[0], new_form[1], new_form[2], new_form[3]) if CONFIG::XF_vars_list.has_key?(self.id) $game_variables[CONFIG::XF_vars_list[self.id]] = perso end end
def add_forms(new_forms) @forms = new_forms end
end
#===================================== # Surcharge Battle Process #===================================== class Scene_Battle < Scene_Base alias xf_start start def start xf_start @message_window.visible = false end
def process_battle_start if !$battle_in_process @message_window.visible = true @message_window.clear wait(10) for name in $game_troop.enemy_names text = sprintf(Vocab::Emerge, name) $game_message.texts.push(text) end if $game_troop.preemptive text = sprintf(Vocab::Preemptive, $game_party.name) $game_message.texts.push(text) elsif $game_troop.surprise text = sprintf(Vocab::Surprise, $game_party.name) $game_message.texts.push(text) end wait_for_message @message_window.clear $battle_in_process = true end make_escape_ratio process_battle_event start_party_command_selection end
alias xf_b_end battle_end def battle_end(result) xf_b_end(result) $battle_in_process = false end
end
#=================================================================== # La transformation opère à partir d'ici #=================================================================== class Scene_Xform < Scene_Base
def update_command_selection if Input.trigger?(Input::B) Sound.play_cancel if $game_temp.in_battle $scene = Scene_Battle.new else $scene = Scene_Map.new end elsif Input.trigger?(Input::C) Sound.play_decision perso = @formes.keys[@command_window.index] case perso when CONFIG::NORMAL #forme initiale @actor.get_initial_form else #transformation @actor.get_next_form(perso) end $game_player.refresh if $game_temp.in_battle $scene = Scene_Battle.new else $scene = Scene_Map.new end end
end
def terminate super @command_window.dispose end
end
#============================= # Suite des surcharges #=============================
#============================================================================== # Scene_Title #============================================================================== class Scene_Title < Scene_Base #-------------------------------------------------------------------------- # command_new_game #-------------------------------------------------------------------------- alias xForm_original_NG command_new_game def command_new_game if CONFIG::Pre_Choix_Active confirm_player_location Sound.play_decision $scene = Scene_Title_Choice.new close_command_window else xForm_original_NG end for act in 1..8 $game_actors[act].set_initial_form if CONFIG::Liste.has_key?(act) $game_actors[act].add_forms(CONFIG::Liste[act]) end end end end
#============================================================================== # Scene_Start #============================================================================== class Scene_Title_Choice < Scene_Base #-------------------------------------------------------------------------- # start #-------------------------------------------------------------------------- def start super create_command_window create_title_graphic play_title_music end #-------------------------------------------------------------------------- # perform_transition #-------------------------------------------------------------------------- def perform_transition Graphics.transition(20) end #-------------------------------------------------------------------------- # post_start #-------------------------------------------------------------------------- def post_start super open_command_window end #-------------------------------------------------------------------------- # pre_terminate #-------------------------------------------------------------------------- def pre_terminate super close_command_window end #-------------------------------------------------------------------------- # termination #-------------------------------------------------------------------------- def terminate super dispose_command_window snapshot_for_background dispose_title_graphic end #-------------------------------------------------------------------------- # update #-------------------------------------------------------------------------- def update super @command_window.update if Input.trigger?(Input::B) Sound.play_cancel return_scene elsif Input.trigger?(Input::C) start_game(@command_window.commands[@command_window.index]) end end #-------------------------------------------------------------------------- # create_title_graphic #-------------------------------------------------------------------------- def create_title_graphic @sprite = Sprite.new @sprite.bitmap = Cache.system("Title") end #-------------------------------------------------------------------------- # dispose_title_graphic #-------------------------------------------------------------------------- def dispose_title_graphic @sprite.bitmap.dispose @sprite.dispose end #-------------------------------------------------------------------------- # check_save_switch #-------------------------------------------------------------------------- def check_saved_switch(switch_id) filenames = Dir.glob('Save*.rvdata') for filename in filenames file = File.open(filename, "rb") game_switches = Marshal.load(file) until game_switches.is_a?(Game_Switches) return true if game_switches[switch_id] file.close game_switches = nil end return false end #-------------------------------------------------------------------------- # create_command_window #-------------------------------------------------------------------------- def create_command_window @command_window = Window_Command.new(160, CONFIG::Pre_Choix.keys) @command_window.x = (544 - @command_window.width) / 2 @command_window.y = (416 - @command_window.height) / 2 @command_window.openness = 0 @command_window.open end
#-------------------------------------------------------------------------- # dispose_command_window #-------------------------------------------------------------------------- def dispose_command_window @command_window.dispose end #-------------------------------------------------------------------------- # open_command_window #-------------------------------------------------------------------------- def open_command_window @command_window.open begin @command_window.update Graphics.update end until @command_window.openness == 255 end #-------------------------------------------------------------------------- # close_command_window #-------------------------------------------------------------------------- def close_command_window @command_window.close begin @command_window.update Graphics.update end until @command_window.openness == 0 end #-------------------------------------------------------------------------- # play_title_music #-------------------------------------------------------------------------- def play_title_music $data_system.title_bgm.play RPG::BGS.stop RPG::ME.stop end #-------------------------------------------------------------------------- # return_scene #-------------------------------------------------------------------------- def return_scene $scene = Scene_Title.new end #-------------------------------------------------------------------------- # start_game #-------------------------------------------------------------------------- def start_game(key) $scene = Scene_Map.new Sound.play_decision $game_party.setup_starting_members # Initial party $game_map.setup($data_system.start_map_id) # Initial map position $game_player.moveto($data_system.start_x, $data_system.start_y)
Alors j'ai installé le script avec des chara et faces pour tester. J'ai créé une compétence "métamorphose" qui appel l'évènement commun => $scene = Scene_Xform.new
Je lance le combat, j'utilise la compétence => écran noir je choisit chien, chat ou souris, mais je reviens à la map. Donc je suis en train de me rendre compte en écrivant que ce script n'est probablement pas utilisable en combat ? Mais c'est extra quand même, en fait ça permet de changer le héros dans le menu et je vais enfin pouvoir faire avancer mon projet. Merci beaucoup ^^
EDIT : J'ai créé la compétence utilisable uniquement dans le menu, et ça ne marche plus. Je sélectionne la compétence métamorphose (Cible : L'utilisateur ; Disponibilité : Menu uniquement) ensuite je me retrouve sur une page pour sélectionner un membre de l'équipe, et je ne peux ni choisir un membre, ni valider mon choix, je ne peux qu'annuler. Késako ?
MirainoHikari
Ex-Admin-Script
Age : 42 Inscrit le : 26/05/2008 Messages : 2360
Sujet: Re: [VX] Compétence de métamorphose simplifiée Mar 22 Déc 2009 - 14:23
Oopss en effet, j'avais pas prévu ça pour le combat... Je vais faire la modification en même temps pour qu'il soit utilisable de partout.
EDIT: Ok, je viens de voir un autre bug. Je vais voir ce que je peux faire avec tout ça... Je crois que je vais devoir réécrire le tout très différemment. Nous verrons ce que ça donnera... Mais en fait, je vais faire une simplification encore plus drastique... D'ici ce soir, je devrais avoir quelque chose de plus facile à utiliser n'importe où.
UPDATE: La version 3 règles plusieurs bugs et permet une meilleure configuration. Limité encore cependant à la carte et au 1er acteur... La version suivante tentera de régler ces deux problèmes.
UPDATE: La version 3.5 règles quelques autres bugs et permet une meilleure configuration. Limité encore cependant à la carte, mais plus à l'acteur... La version suivante tentera de régler l'utilisation en combat de la compétence.
Pouet
Ex-Grand Œil des projets
Age : 39 Inscrit le : 10/06/2009 Messages : 1137
Sujet: Re: [VX] Compétence de métamorphose simplifiée Mar 22 Déc 2009 - 17:46
Arf j'ai pas du tout pensé à l'optimisation de ce script... Est-il possible que chaque métamorphose engendre des modifications sur le personnage (Intelligence +, Agilité +, Force +, etc , 50% de résistance à tel élément ?) Puisque c'était tout l'intérêt de la chose. Dans la version du script avec les costumes, ces changements sont induits par le costume, mais comment faire ici ? Soit séparer les compétences ? => Une compétence correspond à une métamorphose précise engendrant des modifications ? Créer un nouveau statut avec pleins de conditions ?
EDIT : En remarque une variable serait peut etre la meilleure solution, chaque valeur correspondant à une métamorphose : si variable =1 héros mouse costaud ?
MirainoHikari
Ex-Admin-Script
Age : 42 Inscrit le : 26/05/2008 Messages : 2360
Sujet: Re: [VX] Compétence de métamorphose simplifiée Mar 22 Déc 2009 - 21:11
Je peux ajouter cette variable facilement si tu y tiens. À l'origine, ce script n'était pas prévu pour le combat, mais alors pas du tout... La métamorphose devait simplement être faite sur la carte pour remplir des missions. Disons que tu me fait travailler pas mal... Tiens. Version 3.8 (c'est un patch. C'est à toi de gerrer tes stats en fonctions de la variable que tu mets dans la config)
EDIT: Si tu préfère la version costume, rien ne t'empêche d'utiliser mon vieux script à la place. Seul détail, la classe d'armure existe pour tous même si seulement équipable par une classe particulière.
UPDATE: Enfin, la version 4. Le combat est géré. Ne devrait pas entré en conflit avec les autres scripts de combat (à tester). Ne me demandez pas cependant de faire des adaptation pour tel ou tel type de combat. S'il n'est pas compatible, tant pis. Cependant, j'ai fait attention pour surcharger un max afin de ne rien écraser. Donc fonctionne sur la carte et en combat. Les variables sont enregistrer en string dans les variables. Vous devrez faire la gestion par vous même si vous désirer faire des modifications de statistiques... Si vous voyez ça plutôt comme une "pièce d'équipement" aller chercher mon script de costume à la place. Afin de limité seulement à la carte ou seulement au combat, vous devrez faire cette gestion dans votre événement. S'il s'agit d'un event, ce n'est pas un problème, s'il s'agit d'un compétence, vous devrez gérer votre compétence, soit en mettant "Utilisation du menu seulement" ou encore en gerrant votre événement commun qui gère la compétence.
Merci à tous.
Diblo
Illusionniste Lv.12
Age : 114 Inscrit le : 07/08/2009 Messages : 774
Sujet: Re: [VX] Compétence de métamorphose simplifiée Mer 23 Déc 2009 - 8:54
Eh beh, tu en as fait du boulot sur ce script, bravo =p
MirainoHikari
Ex-Admin-Script
Age : 42 Inscrit le : 26/05/2008 Messages : 2360
Sujet: Re: [VX] Compétence de métamorphose simplifiée Mer 23 Déc 2009 - 11:23
Merci. En effet, surtout sachant qu'à l'origine, ce n'était qu'un script pour dépanner pour un ancien concours.
Contenu sponsorisé
Sujet: Re: [VX] Compétence de métamorphose simplifiée