Sujet n°11008
Posté par Silver le 23 Fév - 12:07 (2012)
Titre : Ecran Titre aléatoire [Résolu]
Bonjour à tous.
Je viens aujourd'hui exposer un nouveau problème.
Je cherche à faire en sorte que l'écran titre de mon projet soit défini aléatoirement entre 4 images différentes.
J'ai donc cherché quelques scripts sur le net mais ils n'étaient pas adaptés à PSP.
J'ai pensé que le meilleur moyen était de faire une variable à valeur aléatoire, malheureusement, toutes les méthodes que j'ai trouvé sur Internet étaient soient incompatibles avec PSP, soient utilisables par event. Or, il n'y a pas d'events pour l'écran-titre si je ne m'abuse, juste du script.

Ma première question est donc : Existe-t-il un moyen de créer une variable à valeur aléatoire par script ?

Mais un second problème s'est mis sur mon chemin.

J'ai assigné une valeur par défaut à la variable en question, histoire de voir si le script marchait, eh bien non.
Quand je lance le jeu, j'ai un message d'erreur, No method error for opacity.

Voilà le script :
Script
#==============================================================================
# ■ Scene_Title (Version Pokémon)
# Pokemon Script Project - Krosk
# 01/08/07
#------------------------------------------------------------------------------
# Scène modifiable
#------------------------------------------------------------------------------
# Intègre le menu de chargement
#------------------------------------------------------------------------------


class Scene_Title
include POKEMON_S

def main
if $BTEST
battle_test
return
end

if FileTest.exist?("SaveAuto.rxdata")
print("Sauvegarde de secours détectée.\n\nAppuyez sur Entrée, puis sur Echap pour charger, ou Entrée pour continuer.")
loop do
Input.update
if Input.trigger?(Input::C)
File.delete("SaveAuto.rxdata")
break
end
if Input.trigger?(Input::B)
@auto_load = true
break
end
end
end

if $game_system == nil
$data_actors = load_data("Data/Actors.rxdata")
$data_classes = load_data("Data/Classes.rxdata")
$data_skills = load_data("Data/Skills.rxdata")
$data_items = load_data("Data/Items.rxdata")
$data_weapons = load_data("Data/Weapons.rxdata")
$data_armors = load_data("Data/Armors.rxdata")
$data_enemies = load_data("Data/Enemies.rxdata")
$data_troops = load_data("Data/Troops.rxdata")
$data_states = load_data("Data/States.rxdata")
$data_animations = load_data("Data/Animations.rxdata")
$data_tilesets = load_data("Data/Tilesets.rxdata")
$data_common_events = load_data("Data/CommonEvents.rxdata")
$data_system = load_data("Data/System.rxdata")
$picture_data = load_data("Data/Library.rxdata")

$game_system = Game_System.new
end

if not @auto_load and not MAPINTRO

# -----------------------------------------------------------------
# La scène d'intro commence ici (non MAPINTRO)
# -----------------------------------------------------------------
# Elle est bien sûr modifiable à votre goût.
# -----------------------------------------------------------------

$game_variables = Game_Variables.new
$game_variables[35] ==1

if $game_variables[35] ==1
view = Viewport.new(0,0,640,480)
view.z = -5
#view = Viewport.new(0,25,640,430)
#view.z = 0
background = Plane.new(view)
background.bitmap = RPG::Cache.title("title_suicune.png")
#background.oy += 25
background.z = 0
background.tone = Tone.new(0,0,0,0)


elsif $game_variables[35]==2
view = Viewport.new(0,0,640,480)
view.z = -5
#view = Viewport.new(0,25,640,430)
#view.z = 0
background = Plane.new(view)
background.bitmap = RPG::Cache.title("title_Absol.png")
#background.oy += 25
background.z = 0
background.tone = Tone.new(0,0,0,0)


elsif $game_variables[35]==3
view = Viewport.new(0,0,640,480)
view.z = -5
#view = Viewport.new(0,25,640,430)
#view.z = 0
background = Plane.new(view)
background.bitmap = RPG::Cache.title("title_Johto.png")
#background.oy += 25
background.z = 0
background.tone = Tone.new(0,0,0,0)


elsif $game_variables[35]==4
view = Viewport.new(0,0,640,480)
view.z = -5
#view = Viewport.new(0,25,640,430)
#view.z = 0
background = Plane.new(view)
background.bitmap = RPG::Cache.title("title_montagne.png")
#background.oy += 25
background.z = 0
background.tone = Tone.new(0,0,0,0)
end



screen = Sprite.new
screen.bitmap = RPG::Cache.title("Logo.png")
screen.z = 2
screen.visible = false

title2 = Sprite.new
title2.bitmap = RPG::Cache.title("Logo.png")
#title2.oy += 25
title2.z = -1
title2.tone = Tone.new(0,0,0,255)
title2.opacity = 5
title2.color = Color.new(0,0,0,255)

start = Sprite.new
start.bitmap = RPG::Cache.title("Opening11.png")
start.z = 5
start.visible = false

Graphics.transition(5)

$game_system.bgm_play($data_system.title_bgm)
Audio.me_stop
Audio.bgs_stop

timer = 0
loop do
Graphics.update
Input.update

timer += 1
#background_bis.ox += 6



if timer == 80
background.opacity = 220
screen.visible = true
screen.opacity = 20
end

if timer == 82
background.opacity = 210
screen.opacity = 40
end

if timer == 85
background.opacity = 200
screen.opacity = 60
end

if timer == 87
background.opacity = 190
screen.opacity = 80
end

if timer == 90
background.opacity = 180
screen.opacity = 100
end

if timer == 92
background.opacity = 170
screen.opacity = 120
end

if timer == 95
background.opacity = 160
screen.opacity = 140
end

if timer == 97
background.opacity = 150
screen.opacity = 160
end

if timer == 100
background.opacity = 140
screen.opacity = 180
end

if timer == 102
background.opacity = 130
screen.opacity = 200
end

if timer == 105
background.opacity = 120
screen.opacity = 220
end

if timer == 107
background.opacity = 110
screen.opacity = 240
end

if timer == 110
background.opacity = 100
screen.opacity += 265
end

if timer > 110 and timer%20 == 0
start.visible = !start.visible
end


if Input.trigger?(Input::C)
$game_system.se_play($data_system.decision_se)
break
end

if timer > 3750
Audio.bgm_fade(1000*5)
end


end



Graphics.freeze
background.dispose if not background.disposed?
#background_bis.dispose if not background_bis.disposed?
start.dispose if not start.disposed?
screen.dispose if not screen.disposed?
Graphics.transition
Graphics.freeze




# -----------------------------------------------------------------
# Fin de la scène d'intro
# -----------------------------------------------------------------

elsif MAPINTRO.type == Array and $_temp_map_intro == nil
$_temp_map_intro = true
$map_link = {}
Audio.bgm_stop
Graphics.frame_count = 0
$game_temp = Game_Temp.new
$game_system = Game_System.new
$game_switches = Game_Switches.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
# ---- Pas forcément nécessaire
$pokemon_party = POKEMON_S::Pokemon_Party.new
$data_storage = [[0]]
$pokemon_party.create_box
Player.set_trainer_code(rand(2**32))
$random_encounter = Array.new(7)
$random_encounter[0] = 0
$battle_var = POKEMON_S::Pokemon_Battle_Variable.new
$existing_pokemon = []
$string = []
POKEMON_S::set_SAVESLOT = @index
Player.trainer_trade_code
# ---- Pas forcément nécessaire
$game_party.setup_starting_members
$game_map.setup(MAPINTRO[0])
$game_player.moveto(MAPINTRO[1], MAPINTRO[2])
$game_player.refresh
$game_map.autoplay
$game_map.update
$scene = Scene_Map.new
return
end

Audio.bgm_stop
$_temp_map_intro = nil

@sprite = Sprite.new
@sprite.bitmap = RPG::Cache.title($data_system.title_name)

number = 0 # Nombre de cadres de sauvegarde à générer
for i in 0..2
if FileTest.exist?("Save#{i+1}.rxdata")
number += 1
end
end
@number = number

@new_game_window = Window_Base.new(30, 30 + 83*@number, 580, 80)
@new_game_window.contents = Bitmap.new(548, 48)
set_window(@new_game_window)
@new_game_window.contents.draw_text(9,3,548,48,"NOUVELLE PARTIE")

@save_game_window_list = []
for i in 1.. @number
window = Window_Base.new(30, 30 + 83*(i-1), 580, 80)
window.contents = Bitmap.new(548, 48)
@save_game_window_list.push(window)
end

@index = 0

elsif $game_variables[35] ==1
@background = Plane.new(Viewport.new(0,0,640,480))
@background.bitmap = RPG::Cache.picture("title_suicune.png")
@background.z -= 10


elsif $game_variables[35] ==2
@background = Plane.new(Viewport.new(0,0,640,480))
@background.bitmap = RPG::Cache.picture("title_Absol.png")
@background.z -= 10


elsif $game_variables[35] ==3
@background = Plane.new(Viewport.new(0,0,640,480))
@background.bitmap = RPG::Cache.picture("title_Johto.png")
@background.z -= 10


elsif $game_variables[35] ==4
@background = Plane.new(Viewport.new(0,0,640,480))
@background.bitmap = RPG::Cache.picture("title_montagne.png")
@background.z -= 10
end

refresh_all
Graphics.transition

loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end

Graphics.freeze

@new_game_window.dispose
@background.dispose
for window in @save_game_window_list
window.dispose
end
end

def update
if Input.trigger?(Input::DOWN)
@index += @index == @number ? 0 : 1
if @erase and @index > 2
@index = 2
end
refresh_all
end
if Input.trigger?(Input::UP)
@index -= @index == 0 ? 0 : 1
refresh_all
end
if Input.trigger?(Input::C)
case @index
when @number # Nouveau jeu
if SAVEBOUNDSLOT and @number == 3
$game_system.se_play($data_system.decision_se)
@erase = true
@index = 0
@new_game_window.contents.clear
@new_game_window.contents.draw_text(9,3,548,48,"RECOMMENCER QUELLE PARTIE?")
refresh_all
else
command_new_game
end
else # Chargement
if @erase
command_new_game
else
$game_temp = Game_Temp.new
on_decision("Save#{@index + 1}.rxdata")
end
end
end
if Input.trigger?(Input::B) and @erase
$game_system.se_play($data_system.cancel_se)
@erase = false
@index = 3
@new_game_window.contents.clear
@new_game_window.contents.draw_text(9,3,548,48,"NOUVELLE PARTIE")
refresh_all
end
if @auto_load != nil
$game_temp = Game_Temp.new
on_decision("SaveAuto.rxdata")
File.delete("SaveAuto.rxdata")
end
end

def refresh_all
for i in 0.. @number-1
if i < @index
@save_game_window_list[i].opacity = 128
@save_game_window_list[i].y = 30 + 83*i
@save_game_window_list[i].height = 80
@save_game_window_list[i].contents = Bitmap.new(548, 48)
set_window(@save_game_window_list[i])
@save_game_window_list[i].contents.draw_text(9, 3, 530, 48, "CONTINUER PARTIE "+(i+1).to_s)
elsif i == @index
@save_game_window_list[i].opacity = 255
@save_game_window_list[i].y = 30 + 83*i
@save_game_window_list[i].height = 163
@save_game_window_list[i].contents = Bitmap.new(548, 131)
set_window(@save_game_window_list[i])
@save_game_window_list[i].contents.draw_text(9, 3, 530, 48, "CONTINUER PARTIE "+(i+1).to_s)
@filename = "Save#{i + 1}.rxdata"
list = read_preview(@filename)
data = list[0]
time_sec = list[1]
hour = (time_sec / 3600).to_s
minute = "00"
minute += ((time_sec%3600)/60).to_s
minute = minute[minute.size-2, 2]
time = hour + ":" + minute
name = data[0].to_s
id = data[1].to_i
captured = data[2].to_s
@save_game_window_list[i].contents.draw_text(9, 42, 252, 48, "NOM:")
@save_game_window_list[i].contents.draw_text(9, 42, 252, 48, name, 2)
@save_game_window_list[i].contents.draw_text(285, 42, 252, 48, "ID:")
@save_game_window_list[i].contents.draw_text(285, 42, 252, 48, sprintf("%05d",id) , 2)
@save_game_window_list[i].contents.draw_text(9, 81, 252, 48, "POKéDEX:")
@save_game_window_list[i].contents.draw_text(9, 81, 252, 48, captured, 2)
@save_game_window_list[i].contents.draw_text(285, 81, 252, 48, "DUREE:")
@save_game_window_list[i].contents.draw_text(285, 81, 252, 48, time, 2)
elsif i > @index
@save_game_window_list[i].opacity = 128
@save_game_window_list[i].y = 30 + 83*i + 83
@save_game_window_list[i].height = 80
@save_game_window_list[i].contents = Bitmap.new(548, 48)
set_window(@save_game_window_list[i])
@save_game_window_list[i].contents.draw_text(9, 3, 548, 48, "CONTINUER PARTIE "+(i+1).to_s)
end
end
if @index == @number
@new_game_window.opacity = 255
@new_game_window.y = 30 + 83*@number
else
@new_game_window.opacity = 128
@new_game_window.y = 30 + 83*(@number+1)
end
end

def set_window(window)
window.contents.font.name = $fontface
window.contents.font.size = $fontsizebig
window.contents.font.color = window.normal_color
end

Audio.bgm_stop

# --------------------------------------------------------
# Chargement
# --------------------------------------------------------
def read_preview(filename)
file = File.open(filename, "r")
time_stamp = file.mtime
characters = Marshal.load(file)
frame_count = Marshal.load(file)
game_system = Marshal.load(file)
game_switches = Marshal.load(file)
game_variables = Marshal.load(file)
total_sec = frame_count / Graphics.frame_rate

# Non utilisé
game_self_switches = Marshal.load(file)
game_screen = Marshal.load(file)
game_actors = Marshal.load(file)
game_party = Marshal.load(file)
game_troop = Marshal.load(file)
game_map = Marshal.load(file)
game_player = Marshal.load(file)
# ------------
read_data = Marshal.load(file)
file.close
return [read_data, total_sec]
end

def read_save_data(file)
characters = Marshal.load(file)
Graphics.frame_count = Marshal.load(file)
$game_system = Marshal.load(file)
$game_switches = Marshal.load(file)
$game_variables = Marshal.load(file)
$game_self_switches = Marshal.load(file)
$game_screen = Marshal.load(file)
$game_actors = Marshal.load(file)
$game_party = Marshal.load(file)
$game_troop = Marshal.load(file)
$game_map = Marshal.load(file)
$game_player = Marshal.load(file)
$read_data = Marshal.load(file)
if SAVE_CONVERT # Conversion des sauvegardes pre-v0.7 à v0.7+
Player.set_trainer_code(Marshal.load(file)) # Variable trainer_code
trainer_id = Marshal.load(file) # Variable
$game_party.actors[0].name = Marshal.load(file) # Game_Actor
$game_party.actors[0].set_graphic($game_party.actors[0].character_name,
$game_party.actors[0].character_hue,
Marshal.load(file),
$game_party.actors[0].battler_hue
)# Game_Actor
end
$pokemon_party = Marshal.load(file)
$random_encounter = Marshal.load(file)
$data_pokedex = Marshal.load(file)
$data_storage = Marshal.load(file)
$battle_var = Marshal.load(file)
$existing_pokemon = Marshal.load(file)
$string = Marshal.load(file)
$map_link = ($read_data != nil and $read_data[3] != nil) ? $read_data[3] : {}
if $game_system.magic_number != $data_system.magic_number
$game_map.setup($game_map.map_id)
$game_player.center($game_player.x, $game_player.y)
end
$game_party.refresh
POKEMON_S::set_SAVESLOT = @index
Player.trainer_trade_code
end

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")
read_save_data(file)
file.close
$game_system.bgm_play($game_system.playing_bgm)
$game_system.bgs_play($game_system.playing_bgs)
$game_map.update
$scene = Scene_Map.new
$scene.update_encounter
Player.pokedex_update
end

alias alias_command_new_game command_new_game
def command_new_game
$map_link = {}
alias_command_new_game
#-----------------------------------------------------
# Variables créées automatiquement au début du jeu
# Elles sont absolument nécessaires
#-----------------------------------------------------
$pokemon_party = POKEMON_S::Pokemon_Party.new
$data_storage = [[0]]
$pokemon_party.create_box
Player.set_trainer_code(rand(2**32))
$random_encounter = Array.new(7)
$random_encounter[0] = 0
$battle_var = POKEMON_S::Pokemon_Battle_Variable.new
$existing_pokemon = []
$string = []
POKEMON_S::set_SAVESLOT = @index
Player.trainer_trade_code
$data_pokedex = Array.new($data_pokemon.length-1)
$data_pokedex[0] = false # Possède ou non
for i in 1..$data_pokemon.length-1
$data_pokedex[i] = [false, false] # Vu, Capturé
end
end
end


On peut donc supposer que l'objet "background" n'a pas été créé et que le script ne le trouve pas.
Seulement, je ne vois pas ce qui cloche dans mon script.

Merci de me venir en aide, que ce soit pour l'une ou l'autre de mes questions !

PS : Je n'ai pas utilisé la balise [code] car elle me créé un texte complètement différent de mon script et le prolonge sur 5000 lignes..

Posté par Nuri Yuri le 23 Fév - 12:44 (2012)
Remplace ta grosse condition par :
Code:
array=["title_suicune.png","title_Absol.png","title_Johto.png","title_montagne.png"]
@background = Plane.new(Viewport.new(0,0,640,480))
@background.bitmap = RPG::Cache.picture(array[rand(4)])
@background.z -= 10

Et normalement ça devrait fonctionner.

Edit : faut que je regarde ton script de plus près...

Posté par Laito' le 23 Fév - 12:45 (2012)
Et met aussi une balise "CODE" plutôt que comme ça, c'est pas lisible après pour repérer les classe et compagnie.

Posté par Nuri Yuri le 23 Fév - 12:53 (2012)
Dans tous les cas ton script est foireux donne nous la source de PSP DS...

Posté par Silver le 23 Fév - 13:00 (2012)
Merci beaucoup Nagato tu as résolu mon problème !

Laitonite : J'ai mis dans le PS que la balise code me donne un tas de sigles incompréhensibles sur 5000 lignes.

Posté par Nuri Yuri le 23 Fév - 13:12 (2012)
Ah bah tant mieux si ça marche. (Même si le script à l'air un peu louche :B)

Posté par Silver le 23 Fév - 13:21 (2012)
Non ne t'inquiètes pas il n'y a aucun problème.
J'ai juste eu à supprimer les @ derrière background.

Posté par Sphinx le 23 Fév - 17:51 (2012)
Sinon c'était possible de passer par la fonction prévue par Krosk "Intro avant titre" qui permet de faire ce qu'on veut avant l'écran "Nouveau jeu / Reprendre une partie" ^^

Auquel cas c'était très simple de passer par les commandes d'évents pour afficher un écran titre aléatoire :p

Posté par Silver le 23 Fév - 18:20 (2012)
Je ne connaissais pas cette fonction tu fais bien de la signaler !