Author Topic: Question Dimension  (Read 846 times)

Dedoum

  • Legomaniaque
  • Posts: 1477
    • http://www.lord-of-death.com
Question Dimension
« on: October 06, 2008, 10:35:39 AM »
Bonjour,

Snaky, est-il possible de redimensionner une map en échelle 0,75 par exemple ?

En sachant que j'ai pleins de maps moh que je voudrai faire tourner sur cod4(voir 5) mais que la dimension des maps entre moh et cod4 n'est pas la même ?

Sans parler de textures bien sûr, mais uniquement de brushs classiques.

Merci.
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème ! (Proverbe Shadok)

snaky

  • Squatteur de forum
  • ****
  • Posts: 3332
    • http://profparty.forumpro.fr
Question Dimension
« Reply #1 on: October 06, 2008, 06:08:38 PM »
hummm  Je crois que la fonction d'origine de radiant n'est pas terrible, car déjà, elle est lente (le PC calcule les rendus en même temps), plante lorsque le nombre de brushs est trop grand, et donne quelquefois des résultats byzares...

Je peux essayer de te concocter un VBS qui pourrait modifier l'échelle d'une carte si tu le veux... Car je n'ai pas d'autre moyen pratique en tête :s

[EDIT, 22 minutes plus tard]

Voici le script ! Copie-Colle le dans un nouveau document texte, que tu renomme en *.vbs (par exemple, "Mettre à l'échelle.vbs"). Ensuite, double-clic dessus: il devrait se lancer, et une console apparaitra peut-etre (tout dépend de l'interprétateur windows chargé par défaut). Dans tous les cas, le programme te demanderas d'abord le nom de ta carte. La carte doit être placée dans le dossier où se situe le fichier *.vbs (ce dernier, normalement, t'indique la marche à suivre pour l'utiliser lui-même). Indique alors le nom de la carte au programme, sans oublier l'extention (nom par défaut: carte.map).
Apres, il te demande le coefficiant multiplicateur à appliquer. Utilise un nombre quelconque: s'il n'est pas correct, le programme te le signalera. Si tu crois avoir entré un nombre valide (genre 0.75), et que le programme te fais une remarque désobligeante, change le caractère de séparation de la virgule. Si tu avais entré 0.75, entre 0,75 et inversement.

Apres, le programme caugite. Une fois terminé, il te dira que la mise à l'échelle s'est bien déroulée. S'il ne te dit rien au bout d'une trentaine de secondes (durée variable suivant la taille de la carte), alors c'est qu'une erreur a du se produire: signales-le moi et on voit ca par MSN.

Code: [Select]
On Error Resume Next

dim FSO, WSS
set FSO = CreateObject("Scripting.FileSystemObject")
set WSS = WScript.CreateObject("Wscript.Shell")
LocalFolder = FSO.GetparentFolderName(WScript.ScriptFullName)
carte = "carte.map"

while not FSO.FileExists(LocalFolder & "\" & carte)
carte = inputbox("Le fichier '" & carte & "' n'a pas été trouvé dans le répertoire local. Veuillez placer votre ou vos maps à convertir dans le répertoire où se situe ce VBS puis indiquer le nom de la carte à mettre à l'échelle dans le champ d'entrée ci-dessous." & chr(10) & chr(10) & "Dossier local:" & chr(10) & chr(10) & LocalFolder, "Indiquez le nom de carte (ou 'Annuler')", carte)
if (carte = "") Then Quitter()
WEnd
Err = 0
scale = 0.75
scale = FormatNumber(inputbox("Veuillez indiquer le facteur multiplicateur de la taille de la carte. Faites attention à ne pas excéder la grille de votre éditeur de carte!", "Coeficiant multiplicateur", scale))
if scale = 0 Then Quitter()
while Err <> 0
Err = 0
scale = FormatNumber(inputbox("Vous n'avez pas entré un nombre correct!" & chr(10) & "Veuillez indiquer le facteur multiplicateur de la taille de la carte. Faites attention à ne pas excéder la grille de votre éditeur de carte!", "Coeficiant multiplicateur", scale))
if scale = 0 Then Quitter()
WEnd
Err = 0

set map = FSO.OpenTextFile(LocalFolder & "\" & carte, 1)
set sortie = FSO.CreateTextFile(LocalFolder & "\Scaled_" & carte, TRUE)

while map.AtEndOfStream <> TRUE
line = Split(map.ReadLine, " ", -1, 1)

for i=LBound(line) To UBound(line)
  Err = 0
  res = FormatNumber(line(i), -1, -1, 0, 0)
  if Err = 0 Then sortie.Write Replace((res*scale), ",", ".", 1, -1, 1) Else sortie.write line(i)
  if i < UBound(line) Then sortie.write " "
next
sortie.writeline ""
WEnd
msgbox "Le programme a apparemment effectué la convertion de carte sans dommage. Vous pouvez la récupérer dans le dossier du VBS (dans le dossier où était la carte originale). La carte convertie s'appelle Scaled_" & carte, 64, "Fin de programme"

Sub Quitter()
msgbox "Vous avez demandé à terminer le programme. Ce dernier va donc s'arrêter. A bientot!", 64, "Fin de programme"
wscript.quit
end sub


Concrêtement, que fais ce programme?
Ce programme utilise les homothéties mathématiques pour générer la nouvelle carte. Il va en fait multiplier TOUS les nombres qu'il rencontre dans le .map par la valeur du multiplicatif indiqué par l'utilisateur, excepté les nombres sur le nom de texture.
Ainsi, les distances entre les points de la carte et l'origine du repère sont multipliées par cette valeur de l'utilisateur. Si votre carte était excentrée d'origine (le centre de la carte est aux environs de ( 1024 0 0 ) par exemple), l'excentrage sera multiplié par la valeur du multiplicatif ! Soyez donc à peu pres sûr que votre map soit centrée.
Deplus, vérifiez que la carte ne dépasse pas de la grille! Sinon, la compilation ne se fera surement pas.

La multiplication de tous les nombres implique que les textures seront aussi modifées. La taille des textures est donc également changée et mise en proportion de la carte (c'est à dire multipliée par la valeur de l'indicatif utilisateur).
Léger problème: il en va de même pour les rotations de la texture, donc si vous avez des textures auxquelles une rotation a été appliquée, vous aurez un angle de rotation qui aura augmenté...! Mais comme apparemment, Dedoum, tu ne tiens pas aux textures, j'ai jugé inutile de corriger le problème.
Si jamais tu veux que je le fasse, dis-le moi, c'est assez simple à corriger !

Vous ne pouvez pas donner une valeur négative au coeficiant de multiplication!
En effet, si vous le faites, les faces s'inverseront, et les triangles définissant les demi-espaces des brushs seront indirects. La normale de chaque face sera inversée, et les brushs seront donc tous erronés!
« Last Edit: October 06, 2008, 06:45:38 PM by snaky »

tourist-tam

  • Tailleur de maps
  • Posts: 420
Question Dimension
« Reply #2 on: October 06, 2008, 07:26:57 PM »
euh .... Dedoum, il y a une fonction "scale" dans Radiant pour CoD4 qui te permet de redimensionner tous les brushes selectionnes.

Tam

Dedoum

  • Legomaniaque
  • Posts: 1477
    • http://www.lord-of-death.com
Question Dimension
« Reply #3 on: October 06, 2008, 07:30:44 PM »
heu, ouai, je veux bien, mais concretement, avec 3000 brushs, je risque de galérer.
L'idée de Snaky est interessante, mais il n'est capable d'afficher qu'un morceau de la map dans radiant alors que dans le .map, tous les brushs y sont !
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème ! (Proverbe Shadok)

snaky

  • Squatteur de forum
  • ****
  • Posts: 3332
    • http://profparty.forumpro.fr
Question Dimension
« Reply #4 on: October 06, 2008, 07:37:37 PM »
Etrange, j'ai testé sur plusieurs maps, et il n'y a pas de problème apparent: toute la carte passe bel et bien  hummm

Envoie-moi ta carte par MSN, que je regarde pourquoi cela foire  :blink:  

tourist-tam

  • Tailleur de maps
  • Posts: 420
Question Dimension
« Reply #5 on: October 06, 2008, 07:40:36 PM »
Quote
heu, ouai, je veux bien, mais concretement, avec 3000 brushs, je risque de galérer.
L'idée de Snaky est interessante, mais il n'est capable d'afficher qu'un morceau de la map dans radiant alors que dans le .map, tous les brushs y sont !
Oo

T'as pas mis des morceaux en prefabs?


Tam


 

Dedoum

  • Legomaniaque
  • Posts: 1477
    • http://www.lord-of-death.com
Question Dimension
« Reply #6 on: October 06, 2008, 07:52:15 PM »
Non, mais j'ai trouvé une solution sympa :

J'ai transformé mohdm6 avec qmapreader.Net et retransformé celle ci avec l'outil de Snaky, le résultat est très interressant.

Seuls une dizaine de brushs ont dégénerés.
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème ! (Proverbe Shadok)

snaky

  • Squatteur de forum
  • ****
  • Posts: 3332
    • http://profparty.forumpro.fr
Question Dimension
« Reply #7 on: October 06, 2008, 07:53:11 PM »
Ca m'interesserait d'avoir la map, car j'aimerai comprendre pourquoi certains dégénèrent  :blink:  

Dedoum

  • Legomaniaque
  • Posts: 1477
    • http://www.lord-of-death.com
Question Dimension
« Reply #8 on: October 06, 2008, 07:56:50 PM »
« Last Edit: October 06, 2008, 07:57:34 PM by Dedoum »
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème ! (Proverbe Shadok)

snaky

  • Squatteur de forum
  • ****
  • Posts: 3332
    • http://profparty.forumpro.fr
Question Dimension
« Reply #9 on: October 06, 2008, 08:31:29 PM »
^^ Je parlais de l'original, sinon, je ne peux pas savoir d'où vient le soucis :s

Dedoum

  • Legomaniaque
  • Posts: 1477
    • http://www.lord-of-death.com
Question Dimension
« Reply #10 on: October 06, 2008, 08:38:49 PM »
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème ! (Proverbe Shadok)

snaky

  • Squatteur de forum
  • ****
  • Posts: 3332
    • http://profparty.forumpro.fr
Question Dimension
« Reply #11 on: October 06, 2008, 09:37:47 PM »
bon, déjà, le fait que seuls 49 brushs soient passés en utilisant directement le VBS vient d'un oublis de prise en compte des patch/LOD terrain.

Ce code-ci devrait les prendre en compte, et ne pas changer certaines constantes de ces brushs "spéciaux":

Code: [Select]
On Error Resume Next

dim FSO, WSS
set FSO = CreateObject("Scripting.FileSystemObject")
set WSS = WScript.CreateObject("Wscript.Shell")
LocalFolder = FSO.GetparentFolderName(WScript.ScriptFullName)
carte = "carte.map"

while not FSO.FileExists(LocalFolder & "\" & carte)
carte = inputbox("Le fichier '" & carte & "' n'a pas été trouvé dans le répertoire local. Veuillez placer votre ou vos maps à convertir dans le répertoire où se situe ce VBS puis indiquer le nom de la carte à mettre à l'échelle dans le champ d'entrée ci-dessous." & chr(10) & chr(10) & "Dossier local:" & chr(10) & chr(10) & LocalFolder, "Indiquez le nom de carte (ou 'Annuler')", carte)
if (carte = "") Then Quitter()
WEnd
Err = 0
scale = 0.75
scale = FormatNumber(inputbox("Veuillez indiquer le facteur multiplicateur de la taille de la carte. Faites attention à ne pas excéder la grille de votre éditeur de carte!", "Coeficiant multiplicateur", scale))
if scale = 0 Then Quitter()
while Err <> 0
Err = 0
scale = FormatNumber(inputbox("Vous n'avez pas entré un nombre correct!" & chr(10) & "Veuillez indiquer le facteur multiplicateur de la taille de la carte. Faites attention à ne pas excéder la grille de votre éditeur de carte!", "Coeficiant multiplicateur", scale))
if scale = 0 Then Quitter()
WEnd
Err = 0

set map = FSO.OpenTextFile(LocalFolder & "\" & carte, 1)
set sortie = FSO.CreateTextFile(LocalFolder & "\Scaled_" & carte, TRUE)

while map.AtEndOfStream <> TRUE
line = map.ReadLine
if not left(line, 1) = " " and not left(line, 2) = "//" Then
  line = Split(line, " ", -1, 1)
  for i=LBound(line) To UBound(line)
   Err = 0
   res = FormatNumber(line(i), -1, -1, 0, 0)
   if Err = 0 Then sortie.Write Replace((res*scale), ",", ".", 1, -1, 1) Else sortie.write line(i)
   if i < UBound(line) Then sortie.write " "
  next
  sortie.writeline ""
else
  sortie.writeline line
end if

WEnd
msgbox "Le programme a apparemment effectué la convertion de carte sans dommage. Vous pouvez la récupérer dans le dossier du VBS (dans le dossier où était la carte originale). La carte convertie s'appelle Scaled_" & carte, 64, "Fin de programme"

Sub Quitter()
msgbox "Vous avez demandé à terminer le programme. Ce dernier va donc s'arrêter. A bientot!", 64, "Fin de programme"
wscript.quit
end sub

De plus, il ne changera pas les valeurs des numéros de brushs (ca permettra de retrouver un brush plus rapidement).

Il reste encore quelques soucis, effectivement, avec quelques brushs abérants et le brush des débris en haut à gauche qui s'est déplacé lors de la mise à l'échelle  hummm  

Dedoum

  • Legomaniaque
  • Posts: 1477
    • http://www.lord-of-death.com
Question Dimension
« Reply #12 on: October 07, 2008, 09:01:20 AM »
Ok, merki !

Je testerai ce soir ! (Il faut aussi que je retélécharge le sdk de cod4 parce que sinon, ca ne servirai à pas grand chose ^^)
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème ! (Proverbe Shadok)

tourist-tam

  • Tailleur de maps
  • Posts: 420
Question Dimension
« Reply #13 on: October 07, 2008, 09:09:52 AM »
Oublie pas d'installer l'updates (V1.1).

Tam

Dedoum

  • Legomaniaque
  • Posts: 1477
    • http://www.lord-of-death.com
Question Dimension
« Reply #14 on: October 07, 2008, 11:56:31 AM »
vi, merci. il faut aussi copier-coller l'install de Cod4 vers un autre HDD ou autre partition pour y mettre le sdk non ?
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème ! (Proverbe Shadok)

tourist-tam

  • Tailleur de maps
  • Posts: 420
Question Dimension
« Reply #15 on: October 07, 2008, 11:25:52 PM »
Pas necessairement: le tout est de modifier la clef de la base de registre pour que le chemin d'installation corresponde au chemin de destination: genre une copie du dossier CoD4 ne sera pas prise en compte lors de l'installation du modtools sans cette modification.

Tam