Sujet n°10079
Posté par Nuri Yuri le 31 Juil - 12:58 (2011)
Titre : Modifier la résolution du RGSS Player
Bonjour, voici un tuto qui vous apprendra à modifier la résolution du RGSS Player par la modification de la DLL et de Game.exe, ça peux servir aux utilisateur de PSP DS 0.4 qui souhaitent avoir une autre résolution (interface perso) mais qui n'arrivent pas à la modifier par les scripts... Celle ci ne se modifie pas par les scripts car ceux ci detectent que le fichier DLL est celui qui met la bonne résolution, si le fichier DLL est mauvais, la résolution est corrigé. Il faudra télécharger ces fichier qui sont prêts pour être modifiés : http://www.megaupload.com/?d=U323D167.

I - Index

II - Modification de la résolution par les scripts
III - Modification de la résolution dans Game.exe
IV - Modification de la résolution dans la DLL
VII - Convertir les valeurs

II - Modification de la résolution par les scripts

Il faut quand même passer cette étape car si l'utilisateur supprime la DLL et/ou le fichier Game.exe et les remplace par autre choses, les scripts devront mettre leur résolution.
Voici le script qui se trouve dans PSP DS :
Code:
#===============================================================     
# Redimensionner la fenêtre de jeu     
#---------------------------------------------------------------     
# Edité par Nuri Yuri (塗 ゆり) le 16/07/2011   
# Crédit non requis     
#---------------------------------------------------------------   
begin   
  #===
  # Vérification de la bonne version du fichier RGSS100J.dll
  # La fenêtre sera redimensionnée par script si c'est la mauvaise version
  #===
 
  fn = API.read_ini("Game","Library") 
  if File.exist?(fn)
    f = open(fn)
    f.pos = 78
    str = f.read(5)     
    f.close
  else
    str = nil
  end
 
  if str!="pspv4"
   
  #===   
  # Verification de l'existance du registre.   
  #===   
  os=API.read_ini(psp="PSP",osv="OS")   
  if os==""   
    s=0     
    img = Sprite.new   
    img.bitmap = RPG::Cache.title("img")     
    while s==0     
      Input.update     
      Graphics.update   
      if Input.trigger?(Input::C)     
        s="1"     
      elsif Input.trigger?(Input::B)     
        s="2"     
      end     
    end     
    API.write_ini(psp,osv,s)   
    os=API.read_ini(psp,osv)   
    img.dispose   
  end   
  if os=="2"   
    Hauteur = 432 + 26       
  else   
    Hauteur = 432 + 32   
  end   
  Largeur = 288     
  #===   
  # Modification de la fenêtre   
  #===   
  #Taille de l'écran de l'ordi   
  com_width=API::GSM.call(0)   
  com_height=API::GSM.call(1)   
     
  #Calcul des positions sur l'ecran   
  x=(com_width-Largeur)/2   
  y=(com_height-Hauteur)/2   
  #Redimension   
  API::SWP.call(API.handle, 0, x,y, Largeur, Hauteur, 0) 
end
rescue   
  p "Erreur lors du redimensionnement.\n#{$!}"   
end 


# Création de la fenêtre du cadre

@interface_alpha = Sprite.new 
@interface_alpha.bitmap = RPG::Cache.picture("cadre") 
@interface_alpha.z = 20000 
@interface_alpha.opacity = 255 

Dans ce script il y a 3 choses importantes :
Ligne 23 : if str!="pspv4", ça permet de vérifier si le string de 5 caractères dans la DLL est bien celui qui correspond à votre version, vous pouvez le remplacer par autre chose, mais, ça devra aussi être remplacé dans la DLL donc si vous mettez if str!="IPKJ0" dans la DLL à la position 78 on devra trouver IPKJ0.
Ligne 47 & 49 : Hauteur = 432 + 26 & Hauteur = 432 + 32, c'est la hauteur du cadre, vous devrez donc remplace 432 par celle que vous voulez.
Ligne 51 : Largeur = 288, largeur du cadre à remplacer par celle que vous souhaitez.
C'est tout pour les scripts.

III - Modification de la résolution dans Game.exe

Maintenant il faut modifier la résolution dans Game.exe car c'est lui qui créé la fenêtre.
Voici le code qui créé la fenêtre :

On y vois : push 000001e0h et push 00000280h, ça correspond à la largeur et la hauteur, mais nous ne pouvons pas trouver d'assembleur et désassembleur aussi facilement qu'un éditeur hexadécimal, donc on va faire avec ce qu'on a mais avant on va analyser le code :
On nous montre le code machine et le code assembleur et ce fameux code machine c'est ce qu'on verra avec l'éditeur hexadécimal mais il faut le comprendre pour ne pas faire de gaffe, 6880020000 <= push 00000280h, donc le 68 nous aidera à trouver la valeur dans le code machine avec l'éditeur hex et le 80020000 est la valeur envoyé à la fonction... mais il semble qu'il y ai un petit problème, c'est écris 80020000 et pas 00000280... Bah, ..., Le processeur n'interprête pas les nombres comme nous ... nous les lisons de droite à gauche chiffre par chiffre et le proc' les lis de gauche à droit octets par octets donc pour nous AaBbCcDd c'esr DdCcBbAa pour le proc donc faites gaffe quand vous mettrez les valeurs.
Maintenant, on doit ouvrir un éditeur hexadécimal, le fichier Game.exe et modifier les valeurs, il faudra chercher 6880020000 et remplacer 80020000 qui est la largeur par celle que vous souhaitez en hex exemple : 00010000 pour 256px, il faut faire de même avec la hauteur qui se trouve juste avant (68E0010000) que vous remplacerez par la valeur que vous voulez aussi en hex exemple : E0010000 => 90010000 pour 400px. La fenêtre créé par Game.exe est maintenant à la bonne résolution... mais elle sera modifié par le RGSS.
Screens



IV - Modification de la résolution dans la DLL

Cette fois ci, trouver les valeurs est plus dur, donc je vais vous donner les offset de celle ci comme ça il n'y aura plus qu'a les modifier, attention c'est des variables donc il n'y aura pas de commande devant (68).
Pour la largeur : 8C7EE, pour la hauteur : 8C7F8, il faut mettre les valeurs qui ont été mise dans Game.exe, après vous allez au début du fichier à l'offset 4E et vous écrivez ce qui permet aux script de savoir que c'est le bon fichier.
Si tout est bien fait, le jeu devrai se lancer avec la bonne résolution et y rester.
Screens



VII - Convertir les valeurs

Pour convertir vos valeur il suffit d'utiliser la calculatrice de Windows et la passer en mode programmeur, vous entrez la valeur en Decimal, puis vous demandez l'affichage en Hex. Vous obtenez 280(00000280) pour 640, il faut renverser tous les octets pour les insérer à la place des valeurs par défauts dans les fichier : 00 00 02 80 => 80 02 00 00.


Voilà. (c'est pas vraiment de la qualité mais, je pense qu'il y a ce qu'il faut et ça m'évitera de toujours avoir à répondre aux MPs à propos de ça.)

Posté par Zbooby le 31 Juil - 13:49 (2011)
1er essais... Echoué, je relis et je recommence !
Merci pour ton tuto Yuri :D


EDIT: Deuxième essais... Reussi, Merci !

Posté par Bati le 15 Oct - 14:10 (2011)
J'ai bien compris jusqu'au III, après j'avoue ne rien avoir compris a ton histoire d'héxadécimal, aurais-tu la gentillesse de m'expliquer?

Posté par Nuri Yuri le 15 Oct - 15:49 (2011)
Tu dois convertir la résolution voulue en hexadécimal puis retourner les paires de nombres hexadécimaux pour qu'ils soient compris correctement par le programme.
256x192 donnerai : 256 = 00 00 01 00 et 192 = 00 00 00 c0 puis tu les retournes donc 256 = 00 01 00 00 et 192 = c0 00 00 00, après tu prends un éditeur hexadécimal puis tu y entre ces nombres aux adresses voulues.

Posté par Guigui28240 le 15 Oct - 22:59 (2011)
Salut je n'ai pas compris non plus pourrais-tu le refaire avec plus de screens ou une video stp?

Posté par Nuri Yuri le 16 Oct - 12:26 (2011)
Je vous ai fait un patcher comme ça ça ne sera pas trop dur pour vous.
Téléchargement : http://www.megaupload.com/?d=8WPC7OGY
Ouvrez le fichier Game.ini et modifiez les valeur de Width et Height.
Normalement le patcher devrai le voir, si vous n'avez pas mis les bonnes changez les et appuyez sur X ou Echap quand il vous demande si c'est la bonne résolution.
Si vous appuyez sur Entrée le patch s'effectue et se ferme.

Posté par Kosuke Kyuu le 21 Oct - 21:17 (2011)
Oh excellent Yuri !
J'ai testé et c'est vraiment sympa ^^


Faut-il préciser que si on utilise ton patch sur un "nouveau projet" avec RPG Maker XP, il ne faut pas oublier de remplacer dans Game.ini :

 
Library=RGSS100J.dll  par Library=RGSS104E.dll ?

Au passage, on ne pourrait automatiser cela, non ? (créer/modifier un Game.ini qui par le fait changerai cela)


ça servira certainement à certains ^^ (à moi, c'est fort possible)

Posté par Nuri Yuri le 21 Oct - 23:05 (2011)
Renomme simplement RGSS104E.dll en RGSS100j.dll
J'utilise RMXP 1.03 donc c'est RGSS104E.dll mais vous c'est RMXP 1.01 donc RGSS100J.dll, RMXP modifie sans qu'on lui demande le nom de la lib dans le fichier INI alors vaut mieux renommer la lib c'est moins chiant.

Posté par Kosuke Kyuu le 22 Oct - 19:47 (2011)
Ah, en effet xD
Merci une fois encore. ^^

Posté par og_loc-TATOO le 3 Juil - 14:04 (2012)
Je remonte le topic pour poser deux question:

1) => Pourquoi avoir fait aussi compliquer pour modifier la taille ?

2) => Ton lien megaupload n'est plus valide, tu pourrais le mettre sur un autre support ?

Posté par Sphinx le 3 Juil - 16:47 (2012)
og_loc-TATOO a écrit:
1) => Pourquoi avoir fait aussi compliquer pour modifier la taille ?


Parce qu'il n'y a pas 36 solutions différentes connues pour le faire Clin d'œil foireux

Posté par Pαlвσlѕку le 3 Juil - 17:23 (2012)
On peut aussi redimensionner par script, mais la redimension est visible alors que avec la méthode de Yuri elle n'est pas visible.

Posté par og_loc-TATOO le 3 Juil - 17:59 (2012)
Ha ouais c'est vrai que c'est mieux ainsi ^^

Il n'y avait pas moyen de raccourcir la méthode ?
De faire en sorte de modifier dans une des catégorie pour que ça modifie aussi dans les autres ?

Posté par Kosuke Kyuu le 12 Sep - 20:50 (2012)
Bonjour/bonsoir à tous,

J'espère que quelqu'un ici a encore le contenu du lien de Nyuky car le lien est mort (c'est du MegaUpload).
Si quelqu'un l'a encore, j'aimerai qu'il (ou qu'elle) le réupload je lui en serais vraiment reconnaissant,

Kosuke Kyuu.

Posté par mario5102 le 21 Juil - 18:18 (2013)
possible de reuploader les fichier ? car ca m'aurais intérréssé et comme cela fait longtemps que je n'ai pas été actif ici :/

Posté par Nuri Yuri le 21 Juil - 18:53 (2013)
Je n'ai malheureusement plus les fichiers...

Posté par mario5102 le 8 Aoû - 12:14 (2013)
ah d'accord ben merci quand meme