Nous sommes le Sam 19 Juil, 2025 15:24
Supprimer les cookies

Nouveaux PortableApp : PortableBattleOfWesnoth

Image Image Forum dédié à notre projet de clé USB nomade libre sous Windows

Dim 22 Mars, 2009 13:46

Bonjour à tous,

Cela fait un petit moment que j'essaie de créer un nouveau PortableApp, section jeux : PortableBattleOfWesnoth.

Battle for Wesnoth (La bataille pour Wesnoth) est un jeu vidéo de stratégie au tour par tour. C'est un jeu libre sous licence GNU GPL, disponible pour bon nombre de plates-formes (Windows, Linux, Mac OS X...).

L'action se déroule dans un monde médiéval fantastique. Vous incarnez un héros qui peut recruter des troupes depuis son donjon, moyennant une certaine somme d'or. Cet or peut être obtenu en contrôlant des villages, et s'ajoute à l'or conservé à la fin des scénarii précédents. D'un scénario à l'autre, vous pouvez rappeler les combattants que vous aviez recrutés. Ces rappels permettent, avantageusement, de ré-engager des unités expérimentées qui avaient progressé en combattant et en tuant des adversaires (système de niveaux).
(source : Wikipédia)

Actuellement, je travaille sur la version 1.5.14 (qui représente la Release Candidat N°3 de la version 1.6) mais je n'arrive pas à créer un exécutable qui fonctionne :

Je suis les recommandations de portabilisation sur le page web dédiée mais arrivé à l'étape de la création du fichier exécutable, ça ne fonctionne plus :

Image

Image

Image

Image

Je fini avec des alertes mais je dois bien avouer que je ne sais pas ce qu'elle représentent.

Image

Image

Pourriez-vous m'éclairer pour que nous puissions terminer la portabilisation de ce jeux qui je suis sûr, aurait sa place sur le site Framakey ?

D'avance merci…
overmac

Messages : 88

Dim 22 Mars, 2009 20:36

Bonjour,

A première vue, il me semble que ton exécutable que tu as créé n'est pas dans le bon répertoire pour lancer l'application.
Généralement, la composition d'une application Framakey se compose ainsi :

Dossier "LogicielMachinPortable"
|_ Dossier "LogicielMachin" dans lequel tu as tous les fichiers de l'application originale
|_Dossier "LogicielMachinPortableCode" dans lequel tu as tous les fichiers qu'on voit dans ta dernière copie d'écran
|_Le fichier "LogicielMachinPortable.exe" (celui que tu as créé et que je vois sur ta copie d'écran dans le dossier LogicielMAchinPortableCode" et qui est donc à déplacer ici).

Je pense que le problème vient de là.
Tiens nous au courant.
cyrille

Avatar de l’utilisateur
Messages : 953
Géo : Seine et Marne

Lun 23 Mars, 2009 07:19

Merci pour la réponse, je vais essayer ce soir. Surtout que la version 1.6 de Battle Of Wesnoth est sortie hier. Je vais donc refaire tous depuis le début en espérant pourvoir créer ce soir un version portable.

Je vous tiens au courant, à ce soir…
overmac

Messages : 88

Lun 23 Mars, 2009 22:45

cyrille a écrit:Dossier "LogicielMachinPortable"
|_ Dossier "LogicielMachin" dans lequel tu as tous les fichiers de l'application originale
|_Dossier "LogicielMachinPortableCode" dans lequel tu as tous les fichiers qu'on voit dans ta dernière copie d'écran
|_Le fichier "LogicielMachinPortable.exe" (celui que tu as créé et que je vois sur ta copie d'écran dans le dossier LogicielMAchinPortableCode" et qui est donc à déplacer ici).


Voilà ce que j'obtiens :

Image

Avec le dossier Battle for Wesnoth 1.6 qui vient du chemin :

Image

Le contenu des dossiers étant :

Image
Image
Mais au final, j'obtiens toujours comme résultat :
Image

Ce que je ne comprends pas c'est est-ce que je dois transférer le dossier Battle for Wesnoth depuis Program Files vers le dossier PortableBatlleOfWesnoth ou bien dois-je créer l'exécutable ? J'avoue que je suis un peu perdu à ce niveau.
overmac

Messages : 88

Mer 25 Mars, 2009 12:23

Je viens de faire le test sur mon PC et voici donc une démarche qui a fonctionné :
- installer BattleOfWesnoth sur mon PC
- créer quelque part sur mon DD un dossier "PortableBattleOfWesnoth" dans lequel je créé 2 autres dossiers :
* battleofwesnoth
* PortableBattleOfWesnothCode
- Dans le dossier "battleofesnoth" je copie tous les fichiers contenus dans le dossier "C:\Program Files\Battle for Wesnoth 1.6"
- Dans le dossier "PortableBattleOfWesnothCode" j'ai obligatoirement les fichiers suivants :
* PortableBattleOfWesnoth.ico (icône extraite de l'exécutable avec XNResourceEditor.exe)
* PortableBattleOfWesnoth.jpg (le splash qui se lance au démarrage de l'application portable)
* PortableBattleOfWesnoth.nsi

C'est le fichier "PortableBattleOfWesnoth.nsi" qui me sert à créer l'exécutable qui lance l'application portable.
Honnêtement, je ne comprends pas tout ce qu'il y a dans ce fichier :D mais je modifie tout le temps les même lignes (13 - 14 - 17 - 18 - 177) selon le logiciel que je souhaite "portabiliser" .
Je le compile avec NSIS qui me créé alors le fichier "PortableBattleOfWesnoth.exe" dans le dossier " PortableBattleOfWesnothCode". Je déplace ensuite ce fichier dans le dossier "PortableBattleOfWesnoth" et tout fonctionne.

Voici ci-dessous le code du fichier NSIS utilisé

Code: Tout sélectionner
; ----------------------------------------------------
; Portable BattleOfWesnoth
; ----------------------------------------------------
; Par Cyrille L. en utilisant le script de Sarkos adapté par Tuxmouraille
; Utilisant comme base de travail le script de John T. Haller
; License : GPL
; Ce script permet de créer Portable BattleOfWesnoth
; Ce script est à compiler avec NSIS de Nullsoft (http://www.nullsoft.com).
; Il nécessite le plugin "ipicsplash" (affichage splashscreen) pour être compilé.
; ----------------------------------------------------
; Général

!define NAME "PortableBattleOfWesnoth"
!define APP "BattleOfWesnoth"
!define VER "0.2.0.0"
!define WEBSITE "http://www.framakey.org"
!define DEFAULTEXE "wesnoth.exe"
!define DEFAULTAPPDIR "battleofwesnoth"
!define DEFAULTPROFILE "profile"


; Nom de l'exécutable
  Name "${NAME}"
; Etiquette
  Caption "${NAME} - Portable and Proud"
; Icone
  Icon "${NAME}.ico"
  WindowIcon Off
; Nom du fichier à créer
  OutFile "${NAME}.exe"

; Runtime Switches
  SetDateSave on
  SetDatablockOptimize on
  CRCCheck On
  SilentInstall Silent
  AutoCloseWindow True

; ----------------------------------------------------
; Variables

  Var IniPath
  Var DataDir
  Var AppDirectory
  Var AppExecutable
  Var AdditionalParameters
  Var ProfileDir
  Var DisableSplashScreen
  Var ExecString
  Var Drive
  Var AppScripts

; ----------------------------------------------------
; Version Informations

  VIProductVersion "${VER}"
  VIAddVersionKey FileDescription "${NAME} for Windows"
  VIAddVersionKey LegalCopyright "GPL"
  VIAddVersionKey Comments "Allows ${APP} to be run from a removable drive.  For additional details, visit ${WEBSITE}"
  VIAddVersionKey CompanyName "by Framasoft"
  VIAddVersionKey OriginalFilename "${NAME}.exe"
  VIAddVersionKey FileVersion "${VER}"

; ----------------------------------------------------
; Sections

Section "Main"

; Trouver le fichier INI, s'il y en a un
  IfFileExists "$EXEDIR\${NAME}.ini" "" CheckDataINI
    StrCpy "$IniPath" "$EXEDIR"
    Goto ReadINI

  CheckDataINI:
    Push "$EXEDIR"
    Call GetRoot
    Pop $0
    StrCpy "$DataDir" "$0\Data\AppsData"
    IfFileExists "$DataDir\${APP}\${NAME}.ini" ""  NoINI
      StrCpy "$IniPath" "$DataDir\${APP}"
      Goto ReadINI

  ReadINI:
; Lit les paramètres du fichier INI
    ReadINIStr $0 "$IniPath\${NAME}.ini" "${NAME}" "${APP}Directory"
      StrCpy "$AppDirectory" "$EXEDIR\$0"

; Vérifie que les paramètres requis ci-dessus sont présents
    IfErrors NoINI

    ReadINIStr $0 "$IniPath\${NAME}.ini" "${NAME}" "AdditionalParameters"
      StrCpy "$AdditionalParameters" $0
    ReadINIStr $0 "$IniPath\${NAME}.ini" "${NAME}" "${APP}Executable"
      StrCpy "$AppExecutable" $0
    ReadINIStr $0 "$IniPath\${NAME}.ini" "${NAME}" "${APP}Scripts"
      StrCpy "$AppScripts" $0
    ReadINIStr $0 "$IniPath\${NAME}.ini" "${NAME}" "${APP}Profile"
      StrCpy "$ProfileDir" $0
    ReadINIStr $0 "$IniPath\${NAME}.ini" "SplashScreen" "DisableSplashScreen"
      StrCpy "$DisableSplashScreen" $0

; Pour n'importe quelle paramètre du fichier INI non requis contenant une chaine vide, ignorer les erreurs associées
    ClearErrors

; Correct PROGRAMEXECUTABLE si paramètre vide
    StrCmp $AppExecutable "" "" EndINI
    StrCpy "$AppExecutable" "${DEFAULTEXE}"
    Goto EndINI

  NoINI:
; Pas de fichier INI, nous utiliserons les paramètres par défaut
    StrCpy "$AdditionalParameters" ""
    StrCpy "$AppExecutable" "${DEFAULTEXE}"
 ;   StrCpy "$AppScripts" "$EXEDIR\${DEFAULTSCRIPT}"
    StrCpy "$ProfileDir" "$EXEDIR\${DEFAULTPROFILE}"
    StrCpy "$DisableSplashScreen" "false"
   

    IfFileExists "$EXEDIR\${DEFAULTAPPDIR}\${DEFAULTEXE}" "" NoProgramEXE
      StrCpy "$AppDirectory" "$EXEDIR\${DEFAULTAPPDIR}"
      Goto EndINI

  EndINI:
    IfFileExists "$AppDirectory\$AppExecutable" FoundProgramEXE

  NoProgramEXE:
; Si le chemin pointant vers l'exécutable est invalide
    MessageBox MB_OK|MB_ICONEXCLAMATION `$AppDirectory\$AppExecutable was not found.  Please check your configuration`
    Abort

  FoundProgramEXE:
    StrCmp $DisableSplashScreen "true" GetAppParameters
; Affiche le splash screen
    InitPluginsDir
    File /oname=$PLUGINSDIR\splash.jpg "${NAME}.jpg"
    ipicsplash::show 3000 600 400 0x04025C "$PLUGINSDIR\splash.jpg"

; Check des paramètres
  GetAppParameters:
    Call GetParameters
    Pop $0

; Routine si pas de paramètres

  StrCmp "'$0'" "''" "" ExecWithParameters
  StrCpy $ExecString `"$AppDirectory\$AppExecutable"`
  Goto AdditionalParameters

; Routine si paramètres
  ExecWithParameters:
    StrCpy $ExecString `"$AppDirectory\$AppExecutable" $0`
    Goto ExecApp

  AdditionalParameters:
    StrCmp $AdditionalParameters "" ProfileEnvironment

; Envoi des Paramètres additionnels
    StrCpy $ExecString `$ExecString $AdditionalParameters`

; Fake home directory
  ProfileEnvironment:
; Set the %HOMEDRIVE%%HOMEPATH% directory if we have a path
    StrCmp $ProfileDir "" ExecApp
    IfFileExists "$ProfileDir\*.*" "" ExecApp
   Push "$EXEDIR"
   Call GetRoot
   Pop "$Drive"
   
   StrCpy "$ProfileDir" "$ProfileDir" "" 2
   
   System::Call 'Kernel32::SetEnvironmentVariableA(t, t) i("HOMEDRIVE", "$Drive").r0'
   
   System::Call 'Kernel32::SetEnvironmentVariableA(t, t) i("HOMEPATH", "$ProfileDir").r0'

; Lancement Application
  ExecApp:
   SetOutPath "$EXEDIR\battleofwesnoth"
   Exec $ExecString

SectionEnd

Section .onInit
  Call Mutex
SectionEnd

; -------------------------------------------
; Obtenir les paramètres
; -------------------------------------------
Function "GetParameters"
  Push $R0
  Push $R1
  Push $R2
  StrCpy $R0 $CMDLINE 1
  StrCpy $R1 '"'
  StrCpy $R2 1
  StrCmp $R0 '"' loop
    StrCpy $R1 ' ' ; we're scanning for a space instead of a quote
  loop:
    StrCpy $R0 $CMDLINE 1 $R2
    StrCmp $R0 $R1 loop2
    StrCmp $R0 "\" "" "nofile"
      IntOp $2 $R2 + 1
    nofile:
    ;MessageBox MB_OK "r0: $R0"
    StrCmp $R0 "" loop2
    IntOp $R2 $R2 + 1
    Goto loop
  loop2:
    IntOp $R0 $R2 - $2
    IntOp $R0 $R0 - 4
    ;MessageBox MB_OK "$R2 - $2 = $R0"
    StrCpy $R7 $CMDLINE $R0 $2 ; we save the filename
    ;MessageBox MB_OK "$2"
  loop2b:
    IntOp $R2 $R2 + 1
    StrCpy $R0 $CMDLINE 1 $R2
    ;MessageBox MB_OK "rr0: $R0"
    StrCmp $R0 " " loop2b
  StrCpy $R0 $CMDLINE "" $R2
  Pop $R2
  Pop $R1
  Exch $R0
FunctionEnd

; -------------------------------------------
; Obtenir le chemin root
; Auteur : KiCHiK
; Source : http://nsis.sourceforge.net/Get_the_Root_Directory
; -------------------------------------------
Function GetRoot
  Exch $0
  Push $1
  Push $2
  Push $3
  Push $4

  StrCpy $1 $0 2
  StrCmp $1 "\\" UNC
    StrCpy $0 $1
    Goto done

UNC:
  StrCpy $2 3
  StrLen $3 $0
  loop:
    IntCmp $2 $3 "" "" loopend
    StrCpy $1 $0 1 $2
    IntOp $2 $2 + 1
    StrCmp $1 "\" loopend loop
  loopend:
    StrCmp $4 "1" +3
      StrCpy $4 1
      Goto loop
    IntOp $2 $2 - 1
    StrCpy $0 $0 $2

done:
  Pop $4
  Pop $3
  Pop $2
  Pop $1
  Exch $0
FunctionEnd

; -------------------------------------------
; Prévenir plusieurs Instances
; Sources : http://www.veekee.net/wikinsis/docs/AppendiceC.html#C.11
; -------------------------------------------
  Function Mutex
  System::Call 'kernel32::CreateMutexA(i 0, i 0, t "myMutex") i .r1 ?e'
  Pop $R0

  StrCmp $R0 0 +3
   MessageBox MB_OK|MB_ICONEXCLAMATION "${NAME} est déjà lancé."
   Abort
  FunctionEnd

; -------------------------------------------

; Fin du script
cyrille

Avatar de l’utilisateur
Messages : 953
Géo : Seine et Marne

Mer 17 Juin, 2009 13:27

Je viens de tester la version béta, j'ai lancé une campagne et joué une partie. Cela tourne (toujours des partie en anglais mais cela aussi présents dans la version qui s'installe en dur).
Vulcain

Messages : 625
Géo : Poitiers

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit