NdT. AGS la prochaine version d’AGS, la 3.4.0, s’annonce comme une petite révolution. Je vous propose une traduction de ce post tel qu’il était le 24 octobre 2014 (je ne sais pas dans quel mesure j’arriverai à garder cette traduction à jour). Il reste quand même de nombreux anglicismes usuels, que je laisse pour une meilleure compréhensions, et bien sur des fautes d’orthographes car on ne se refait pas. Ceux qui en ont le droit doivent se sentir libre de corriger ma traduction à leur guise. Les <3 sont de moi ; ils marquent les nouveautés dont je suis amoureux.La version d’AGS 3.3.1 est morte, vive AGS 3.4.0 ! En effet, nous avons décidé de changer sa numérotation suite à l’ajout de belles grosses
features de la mort. Cette version est cependant bien la suite logique d’
AGS 3.3.1 Alpha 2, publié par
Gurok il y a quelques mois.
Petite remarque à l’intention de ceux qui était au courant de la version 3.4.0 Alpha datant de 2013, incluant une suppression des limites. Cette version n’est plus en développement actif. Certaines de ces
features sont ou seront ajoutées à cette version, d’autres arriverons dans de futures versions d’AGS.
AGS 3.4.0.1 Alpha 2 - Custom Game ResolutionsTéléchargez AGS 3.4.0.1 alpha 2, archive .zipVersions précédentes :- Spoiler:
ACHTUNG!
| Il s’agit d’une version préliminaire d’AGS 3.4.0. Utilisez là avec précautions. Archivez votre projet avant de l’ouvrir avec cette version d’AGS. Les projets sauvegardés avec l’éditeur 3.4.0 ne seront probablement plus ouvrable avec une éditeur 3.3.0 à cause de nouveaux réglages. |
Dernière mise à jour : 22 octobre 2014 Les nouveaux ajouts depuis AGS 3.4.0 alpha 1 sont signalés avec cette balise NEW
Modifications généralesNEW Résolutions de jeux personnalisés <3
Développez vos jeux dans n’importe quelle résolutions, sensée ou non, tel que 1280x720, 1920x1080 ou, heck (sic, NdT), 233x856.
Une preuve que les résolutions bizarres fonctionnent :
- Spoiler:
Un jeu 200x800:
Le choix de la résolution de jeux se fait non plus par une simple liste déroulante, mais via une fenêtre un peu plus complexe.
- Spoiler:
Sélectionnez l’option "Resolution" et cliquez sur le bouton "..." :
Dans la fenêtre, choisissez une des pré-réglages ou entrez vos propres valeurs de hauteur et largeur, puis appuyez sur OK.
Support des polices WFN “élargies”AGS prend maintenant en charge les caractères des polices WFN des indices 128 à 255, en plus des caractères 0 à 127 déjà supportés.
Retraits de limites nativesCatégorie | Ancienne limite | Nouvelle limite | Commentaire |
Contrôles de GUI | 30 | illimité | NEW |
Longueur des noms de GUI | 20 | illimité | NEW |
Nombre de modules de scripts | 50 | illimité |
Moteur de jeuxLibre résolution d’affichage <3
Jouez au jeux AGS dans n’importe quelle résolution supportée par votre ordinateur, avec ou sans bordures noirs. Le facteur de mise à l’échelle agrandissant ou rétrécissant est presque sans limite. Faites tournez ces bon vieux jeux AGS 320x200 en full HD 1920x1080.
Le nouveau Winsetup.exe vous aidera à configurer le bousin.
Problèmes connus à ce jour :
- N’attendez pas de miracle du
downscalling. Réduire un jeu haute résolution plus de 1,5 ou 2 fois le rendra difficilement reconnaissable, et rendra sans doute les textes illisibles.
- Il y a un problème étrange avec les mouvement de la souris lorsque vous faîtes tourner un jeux basse résolution sans mise à l’échelle dans une large fenêtre plein écran. Je (NdT,
Crimson Wizard) suis en train de regarder ce qu’il en est.
Synchronisation verticale en mode plein écran Direct3D <3
Cette caractéristique était déjà disponible dans l’édition
Draconian d’AGS. Elle fut intégrée à la branche principale de développement avec AGS 3.3.1. Il est maintenant possible d’activer ou de désactiver la synchronisation verticale en utilisant la case “Vertical sync” du Winsetup.exe. Si la case est cochée, le jeux commence avec la synchronisation verticale activée. En mode DirectDraw 5, vous pouvez toujours la désactiver en jeux en utilisant
System.VSync = false;. En mode Direct3D 9, la propriété
System.VSync devient non modifiable (
read-only), avant elle était simplement inutile.
Correction de bugs- Le moteur de jeux bougera maintenant les portrait avec le personnage en train de parler lorsque le mode BasedOnCharacterPosition est activée, si le personnage en train de parler se déplace entre deux “Say”.
- Correction d’erreurs occasionnels du pathfinder lors de mouvement en lignes droites dans des walkables areas un peu complexes (reporté ici) <3
- Afficher \[ ne consommera plus tout les antislashs le précédent (e.g. "\\\\\[" sera affiché \\[ comme attendu).
- Correction d’un crash pouvant se produire lorsqu’une capture d’écran est réalisé pendant que la fenêtre de jeu est bougée, minimisée ou restaurée.
- NEW Correction du non bouclage des fichier audio WAVE lorsque la fenêtre de jeu a été restaurée.
Langage de scriptBoucles forEn plus de la boucle
while, AGS accepte maintenant les boucles
for. La syntaxe est :
- Code:
-
for([initialisation];[condition];[increment])
{
[loop body]
}
Exemple:
- Code:
-
for(player.x = 0; player.x < 100; player.x++)
Wait(1);
Important: Vous ne pouvez pas déclarer de variable dans la partie initialisation de la boucle
for. Par exemple, "
for(x = 0; ..." marchera, mais "
for(int x = 0; ..." ne fonctionnera pas. Cela changera peut-être dans le future.
Cassez vos boucles avec breakVous pouvez maintenant sortir d’une boucle avec l’instruction
break. Par exemple :
- Code:
-
i = length - 1;
while(i >= 0)
{
if(page[i] == target)
break;
i--;
}
arrêtera la boucle si un la cible est trouvé, ou retournera -1 si elle est absente.
Instruction ContinueVous pouvez sauter jusqu’a la prochaine itération d’une boucle avec l’instruction continue. Par exemple :
- Code:
-
for(x = 0; x < 100; x++)
{
if(x % 2 == 0)
continue;
Display("%d", x);
}
Affichera seulement les nombres impaires compris entre 0 et 100.
Boucles do...whileLa boucle do… while est maintenant supproté. Par exemple :
- Code:
-
x = 1;
do
{
x++;
Display("%d", x);
} while(x < 1);
Contrairement à la boule while, la boucle do… while execute son code *avant* de vérifier la condition. L’exemple si dessus n’affichera qu’une fois 2.
Dynamic Arrays dans les StructsLes dynamic arrays sont maintenant autorisées dans les structs.
NEW Dynamic arrays retournées par une fonction membre d’une Struct.Il est maintenant possible de définir une fonction membre d’une struct qui retourne une dynamic array.
Managed StructsEn langauge AGS, une managed struct est une struct pouvant être créé dynamiquement. Vous devez utiliser un pointeur pour les désigner (de même que pour les types natifs commes Region ou Hotspot). Vous devez les déclarer avec l’instruction “managed” et en créer de nouevlles instances avec l’instruction new, comme cela :
- Code:
-
managed struct Point
{
int X;
int Y;
};
Point *GetPosition()
{
Point *result;
result = new Point;
result.X = 30;
result.Y = 40;
return result;
}
Important: Les managed structs sont pour l’instant assez limités car ne pouvant pas contenir de pointeur (et donc de dynamic arrays). Tout les espoirs sont permis pour les prochaines versions.
Amélirations de #defineUn #define peut maintenant renvoyer à d’autres constantes #define. Comme en VC++, #define symbol expansion only needs to make sense at the time of reference (NdT, j’ai pas compris cette phrase, alors je laisse comme ça. Suggestions acceptèes avec plaisir.). De plus, comme en VC++, l’ordre de définition des constantes #define n’a pas d’importance. Ainsi, des monstruosités de ce genre sont possibles :
- Code:
-
#define RED GREEN
#define BLUE 456
#define GREEN BLUE
Display("%d", RED); // Prints 456
#undef BLUE
#define BLUE 123
Display("%d", RED); // Prints 123
Note: Pour éviter les définitions criculaires, un #define ne peut renvoyer à lui même ou à une autre variable précédement défnitie comme extension de ce #define.
Fonctions d’extensions d’une classe statique <3
Le premie paramêtre d’une fonction peu maintenant être définit comme un identifiant statique correspondant à une struct. Par exemple :
- Code:
-
function AbsInt(static Maths, int value)
{
if(value < 0)
value = 0 - value;
return(value);
}
La syntaxe est la mmême que pour une méthode d’extension classique, (e.g. Chracter*), mais pour les méthodes statiques. Le code si dessus définit une méthode de la classe statique Math appelé AbsInt. Vous pouvez ensuite l’importer dans un header :
- Code:
-
import function AbsInt(static Maths, int value);
And then use it elsewhere in your code just like it were a built-in Maths function:
- Code:
-
int x = Maths.AbsInt(-3);
Nouveaux opérateurs d’assigenementLes oprérateurs d’assignement suivants sont supportés, dans un style proche du C :
*= (Multiple par et assigne)
/= (Divise par et assigne)
&= (Bitwise ET et assigne)
|= (Bitwise OU et assigne)
^= (Bitwise XOR et assigne) (NdT, il faudra demander à Kitai ou Atavismus la différence entre OR etr XOR. Il me semble que TRUE XOR FALSE renvoie TRUE mais que TRUE XOR TRUE renvoie FALSE)
<<= (Bitshift gauche et assigne)
>>= (Bitshift droite et assigne)
Script APIParamètre optionnel de direction pour Character.ChangeRoomComme dans l’édition Draconian d’AGS, la fonction Characher.ChangeRoom s’utilise maintenant comme cela :
- Code:
-
Character.ChangeRoom(int room, optional int x, optional int y, optional CharacterDirection direction)
CharacterDirection est un nouvel enum natif définissant des directions (eDirectionUp, eDirectionUpLeft, etc.).
Character.DestinationX et Character.DestinationYDeux nouvelles propriétés en lecture seule utilisé pour déterminer le point d’arrivée d’un personnage lorsqu’il se déplace (Walk, NdT et peut-être Move). Si le personnage est immobile, ces valeurs sont respectivement les mêmes que Character.x et Character.y.
Character.FaceDirection <3
Cette fonction permet de tourner le personnage dans une direction donnée en utilisant le nouvel enum Direction (eDirectionUp, eDirectionUpLeft, etc).
GetRoomProperty ---> Room.GetPropertyGetRoomProperty devient Room.GetProperty pour ce mettre en cohérence avec Room.GetTextProperty. Dans vos projets importés, vous devrez changer vos scripts ou désactiver l’option "Enforce object-based scripting" du general settings.
IsInteractionAvailable() pour d’autres typesUn autre ajout de l’édition Draconian. La méthode IIsInteractionAvailable() fonctionne maintenant sur les Hotspots, Objects et Characters.
API des Audio ClipsDeux nouvelles propriétés permettant de gérer les fichier audios apparaissent dans cette version d’AGS :
- Code:
-
Game.AudioClipCount
Retourne le nombre de fichier et
- Code:
-
Game.AudioClips[n]
Vous permet d’accéder a un clip audio particulier.
API des PluginsIUne nouvelle fonction peut-être utiliser pour détecter si un plugin a été chargé :
- Code:
-
Game.IsPluginLoaded(const string name)
ou le name est le nom de fichier d’un plugin.
Dialog OptionsLa couleur de surlignage des options de dialogue n’est plus codée en natif, qui imposait le jaune poussin (14). Vous pouvez maintenant utiliser :
- Code:
-
game.dialog_options_highlight_color = xxx;
et définir votre couleur de surlignage préférée. La valeure par défaut est toujours jaune poussin (14).
GUIControl.ZOrderCette nouvelle propriété des controles de GUI (button, label, etc.) vous permet d’obtenir et de modifier leurs ZOrder.
File.Seek et File.PositionLa nouvelle fonction File.Seek permet de définir une nouvelle position dans le fichier streamé ouvert, position relative au début, à la fin ou par rapport à la dernière ouverture. La propriété File.Position vous permet d’obtenir la position actuelle.
Régions de CodeEncore une features issue de l’édition Draconian d’AGS. Vous pouvez maintenant définir des régions de codes arbitraires pour réduire l’affichage de vos scripts :
- Code:
-
#region MyRegion
do stuff;
do stuff;
do stuff;
#endregion MyRegion
L’éditeur d’AGS vous permet alors de plier et déplier ce régions comme des block de code. Cela n’a aucun effet sur la compilation : la portion de code replié sera bien compilé.
Corrections de BugEditeurPadding pour les Text GUI WindowsLes Text GUI windows ont maintenant une propriété padding qui permet de controler la taille de l’espace entre la brodure et le texte à l’intérieur de la fenêtre. Avant, la valeur été fixée nativement à 3 pixels, maintenant elle est par défaut à 3.
Clickable pour les Objects <3
La propriété Clikable est maintenant aussi disposé dans l’éditeur pour que vous puissiez la définir pendant la phase de design. Avant elle n’été définissable que par le script.
Corrections de Bug- L’historique Annuler ne sera plus supprimé lors d’un changement de docking d’un onglet.
- Fixations d’un crash arrivant parfois lors de la fermeture d’un script.
- Correction d’un crash lors de la séléction d’un personnage sans view normale dans la fenêtre de design des rooms.
- Ctrl+Tab marche maintenant dès le permier appuit lorsque vous cyclez entre les onglets ouverts dans l’éditeur.
- Go to Line... va maintenant au bon numéro de ligne, et ne la sélectionne plus.
- Le projet est mainteant entiérement recompilé lorsque la valeure Enable Debug Mode du General Settings est différente de celle de la dernière compilation.
- L’éditeur de sprite surligne maintenant la cible du drop lors d’un drag and drop de sprite.
Contributeurs <3
Alan v. Drake
Crimson Wizard
Gurok
monkey_05_06
Tzachs
salty-horse