Je vous présente mon tout premier script à partager
Le Multi-starter XP
Le script en est à sa deuxième version. il permet de : - Créer plusieurs points de départ (nombre illimité) - afficher jusqu'à 6 choix de lancement ( les autres, c'est avec des tites flèches, cf screens) - Choisir les personnages de départ ainsi que leur lvl - Autoriser un départ si une sauvegarde contient un interrupteur activé - modifier le nombre max de points affichés ( je viens juste d'y penser ^^) - activer un interrupteur au lancement de la partie (pour connaitre le starter utilisé directement en jeu)
J'ai fait en sorte que le script de configuration soit le plus simple et clair pour les débutants Il est compatible normalement avec tout les scripts modifiant Scene_Title utilisant "command_new_game"
Images : et explications
Spoiler:
Spoiler:
La configuration est simple :
addstarter : ajout d'un nouveau point de départ.
les configurations à faire avant sont : (facultatives) @name : le nom du starter (affiché dans le menu) valeur de base : "jeu de base"
@id_map : l'id de la map d'apparition VDB : l'id choisi depuis le logiciel
@x_map et @y_map : coordonnées x et y de départ VDB : coordonnées choisies depuis le logiciel
@switchs : liste des interrupteurs requis VDB : aucun interrupteur requis exemple : @switchs = [1, 2] pour les deux premiers interrupteurs.
@actors : tableaux des id des personnages VDB : les personnages de la base de donnée exemple : @actors = [1, 2] pour les deux premiers perso
@import : donne le choix au joueur d'importer l'équipe d'une sauvegarde. VDB : false (faux) exemple : @import = true pour activer.
Script
Voici donc le script principal:
Code:
#============================================================================== # Multi-Starter # Pour RPG Maker XP # par Hinola #============================================================================== # # VERSION : 2.0 # > Ce script fonctionne avec l'annexe 'Multi_Starter' # > Cette partie n'est pas prévue pour être modifiée # > Cette partie peut changer selon les versions # #==============================================================================
# si il n'y a pas de starters # on lance directement le jeu avec les attributs de base if nbCom < 1
new_game(-1)
# si tout est normal else # title @sprite = Sprite.new @sprite.bitmap = RPG::Cache.title($data_system.title_name)
listCom = [] @comInvalid = [] index = 0 config.each do | st | listCom<<st[0] # on test si la condition du swith est valable if st[5].size > 0 if testSwitchSave(st[5]) == false @comInvalid<<index end end index += 1 end
# réglage de la hauteur de la fenêtre max = @MSconfig.maxStarter h = max * 32 + 32 posY = 384 - max * 32 if nbCom < max h = nbCom * 32 + 32 posY = 384 - nbCom * 32 end # dimensions de la fenêtre @command_window = Window_Command.new(192, listCom) @command_window.back_opacity = 160 @command_window.height = h @command_window.x = 320 - @command_window.width / 2 @command_window.y = posY # désactivation d'éléments @comInvalid.each do | id | @command_window.disable_item(id) end
# graphics Graphics.transition loop do Graphics.update Input.update update if $scene != self break end end Graphics.freeze
# dispose @command_window.dispose @sprite.bitmap.dispose @sprite.dispose end end
#test des switchs dans les sauvegardes def testSwitchSave(tab) for i in 0..@nbSave saveValid = false filename = make_filename(i) if FileTest.exist?(filename) file = File.open(filename, "rb") # chargement des switchs dans une variable temporaire temp = nil for i in 0..3 temp = Marshal.load(file) end # test sur chacun des interrupteurs saveValid = true tab.each do | switch | if temp[switch] == false saveValid = false end end file.close end if saveValid == true return true end end return false end
# création du nom de la sauvegarde def make_filename(file_index) return "Save#{file_index + 1}.rxdata" end
# update def update @command_window.update # touche entrée / action if Input.trigger?(Input::C) #non valide if @comInvalid.include?(@command_window.index) $game_system.se_play($data_system.buzzer_se) return # valide else new_game(@command_window.index) end end # touche échap / annulation if Input.trigger?(Input::B) $scene = Scene_Title.new end
end
# nouvelle partie
def new_game(id) # Play decision SE $game_system.se_play($data_system.decision_se) # Stop BGM Audio.bgm_stop # Reset frame count for measuring play time Graphics.frame_count = 0 # Load games script loadGame
st = @MSconfig.getStarter(id)
# start map and coord $game_map.setup(st[1]) $game_player.moveto(st[2], st[3])
# setup party if st[4].size < 1 $game_party.setup_starting_members else st[4][0..4].each do | idPerso | if $game_actors[idPerso] != nil $game_party.add_actor(idPerso) end end end
# Refresh player $game_player.refresh # Run automatic change for BGM and BGS set with map $game_map.autoplay # Update map (run parallel process event) $game_map.update
# si on import, on affiche le choix if st[6] $scene = Scene_ChoiceParty.new else $scene = Scene_Map.new end end
def loadGame # Make each type of game object $game_temp = Game_Temp.new $game_system = Game_System.new $game_switches = Game_Switches.new $game_variables = Game_Variables.new $game_self_switches = Game_SelfSwitches.new $game_screen = Game_Screen.new $game_actors = Game_Actors.new $game_party = Game_Party.new $game_troop = Game_Troop.new $game_map = Game_Map.new $game_player = Game_Player.new end
def getStarter(id) if id != -1 return @list[id] else @liste = [] addStarter return @list[0] end end
def getList return @list end end
# Scene_Title : commande new game
class Scene_Title
def command_new_game $scene = Scene_MultiStarter.new end
end
class Scene_ChoiceParty < Scene_File #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize # Remake temporary object $game_temp = Game_Temp.new # Timestamp selects new file $game_temp.last_file_index = 0 latest_time = Time.at(0) for i in 0..3 filename = make_filename(i) if FileTest.exist?(filename) file = File.open(filename, "r") if file.mtime > latest_time latest_time = file.mtime $game_temp.last_file_index = i end file.close end end super("Quelle équipe importer : ?") end #-------------------------------------------------------------------------- # * Decision Processing #-------------------------------------------------------------------------- def on_decision(filename) unless FileTest.exist?(filename) $game_system.se_play($data_system.buzzer_se) return end $game_system.se_play($data_system.load_se) file = File.open(filename, "rb") for i in 0..7 Marshal.load(file) end $game_party = Marshal.load(file) for i in 0..1 Marshal.load(file) end $game_player.refresh $game_party.refresh $scene = Scene_Map.new end #-------------------------------------------------------------------------- # * Cancel Processing #-------------------------------------------------------------------------- def on_cancel $game_system.se_play($data_system.cancel_se) $scene = Scene_Title.new end end
Et voici la config, à placer au dessous du Script principal :
Code:
#============================================================================== # Multi-Starter # Pour RPG Maker XP # par Hinola #============================================================================== # # VERSION : 1.0 # > Ce script est l'annexe de configuration du Multi-starter. # > Cette partie est normalement prévue pour fonctionner # quelque soit la version du script de base. # # Le script Multi-Starter permet la création de plusieurs points de départ. # explications plus bas # #==============================================================================
class Multi_Starter < Config_Starter
def setup
# le nombre de choix affichés # (de base 6, ils restent tout de même disponibles sur la même page) @maxStarter = 6 # le nombre de sauvegarde maximum de votre projet # (de base 4 si vous n'utilisez aucun script pour augmenter) @nbSave = 4
# configuration du multi starter : # Les attributs suivants ne sont pas obligatoires. # S’ils ne sont pas renseignés, une valeur de base les remplacera. # addStarter Ajoutera un point de départ avec la configuration choisie. # # @name : le nom du starter (affiché dans le menu) # > valeur de base : "jeu de base" # @id_map : l'id de la map d'apparition # > VDB : l'id choisit dans la base de donnée # @x_map et @y_map : coordonnées x et y de départ # > VDB : coordonnées choisies dans la base de donnée # @ switchs : liste des interrupteurs requis # > VDB : aucun interrupteur requis # > exemple : @switchs = [1, 2]^pour les deux premiers interrupteurs. # @actors : tableaux des id des personnages # > VDB : les personnages de la base de donnée # > exemple : @actors = [1, 2] pour les deux premiers perso # @import : donne le choix au joueur d'importer l'équipe d'une sauvegarde. # > VDB : false (faux) # > @import = true pour activer.
bah c'est mon premier code sur RM ^^ Je viens de m'y mettre, à la base c'était pour me faire mon propre CBS Mais sinon ouais, j'ai fait un DUT info prog donc je code ^^
Je ne comprenais pas au début l'intérêt que peut avoir un tel code.. ^^ Mais après tout, si on souhaite choisir un camp ou une équipe différente en fonction d'une histoire et d’atterrir quelques part au choix.. Après, on pouvait créer un évent automatique au démarrage pouvant remplir les même conditions^^