Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - Baguettator

#201
Hi there !

My question could be very stupid, but I have no idea of how ags handles that...

Imagine I have a DynamicSprite "f" that is a square ("rectangle" ?) with these attributes : f.Width=30, f.Height=34.

If I do : f.Rotate(90)

It makes : f.Width=34 and f.Height=30.

Right :)

BUT, if I do : f.Rotate(45)

What will be the width and height of f ?
#202
Hmm... I can't vizualize your solution. How could it "increase" the number of parameters in a function by passing a struct ?
#203
Thanks ErioO !

Also, I just thought about something I encountered before, and maybe it could be changed in new versions of AGS : now, the maximum number of parameters in a function is 14. Could this limit be removed/pushed away ? It could be useful :)

EDIT : also new suggestion : would it be possible and technically possible to have a text in a label that uses different fonts ? Also for ListBox Items in different colors ? It could be useful ;) But I don't know if it's technically possible in AGS ?
#204
Hey !

Is it possible to manage in-game the windowed mode ? It could be pleasant to decide in-game to switch from full screen to windowed mode and vice-versa, or adjust the size of the windowed mode.
#205
Perfect ! It works great !! Thanks a LOT :)
#206
OK, but the ReadRawLineBack function is used in another .txt file, not the one for the translation. So are we talking about the same thing ?

Sorry if I misunderstand you, english is not my 1st language :(
#207
Does that mean that I need to put this :

// Text encoding hint
//#Encoding=UTF-8
// Source text encoding hint
//#GameEncoding=UTF-8

At the top of my translation file, then save the file where I have to read something using the ReadRawLineBack function in UTF-8, and then it will work as expected ?
#208
PROBLEM !! :)

I installed the 3.6 last version, and I encountered a problem using the ReadRawLine function.

I use this function to read some attributes for characters and custom things players can create to play with in the game. So I read these informations in a .txt file, and store that in a struct.

I have to read this line :

0;NomVéhicCréé0;null;null;null;0;25;25;25;25;55;35;10;10;90;10;null;0;null;0;null;0;0;

and it crashes !

I debugged the situation and found that, using this function, it meant that :

String s=File.ReadRawLineBack();
Display(s);
// Displayed : "0;NomV"

It seems that "é" was causing an error in the ReadRawLineBack function. I changed into the .txt file and replaced all the "é" with "e", and it worked perfectly.

Any idea what's happenning ? It was NOT happenning with the 3.5.1 version I used before :)

EDIT : was the limit of 199 removed for the ReadRawLineBack function ? I thought that yes, but I'm not sure...

EDIT 2 : just managed to launch the game with the 3.6, and I found that scrolling with the finger pad works perfectly ! (it was one of my previous questions).
#209
Oh, ok, I understand better.

QuoteYes, script are compiled, and compiled scripts are loaded by the engine fully. The bigger script is, the bigger memory it requires.
Usually script sizes are in kilobytes though, but this may be more if they also include large global arrays of fixed size.

no problem, the greatest arrays in my game or < to 300, and there are not so much. So it shouldn't hurt the RAM.

QuoteSave data into the custom file, remove it from the variables. When necessary - load it back. There are file commands in ags script:
https://adventuregamestudio.github.io/ags-manual/File.html
But the disk cache is the last resort, you probably won't need this. Unless you are close to the game completion and found that your script data takes too much memory.

Understood ! I use that to store the parameters for custom characters the player can create to play with.

QuoteI mean rather - have these cartes stored in files, and loaded, as scripting everything in a function will likely require same memory. The point of this solution is to not have all of this data mentioned in script.
But this solution comes with extra problem: you need to save these files prior to using them in game. This means that you also need some kind of a "map editor", either scripted as a AGS game, or separate tool.
Alternatively, you may describe maps in a text format and parse them in script, for instance using IniFile module

Well finally it will be very easier for me to store them directly in the app, until it doesn't hurt so much the RAM (and it seems to be a very small impact on it).

QuoteThat likely means your active process(es) are using 408 Mb total.
I think "Mo" is "Megabytes" in French?

Yes, I believe MB is the same as Mo. So, if my game, when it's running, is using 430Mo (or MB), it means it's remaining 2.570GB (or Mo) ? That's so huuuuuuge :)
#210
Wow, thanks Crimson for your explanation !

If I consider I have 150 maps in my app, and if I calculate with 1 int = 4 byte, it means my 150 maps= 2482800bytes, so 2,5MB. Right ?

I don't know if it's a lot, and I should have to calculate for the whole data of my game. But is there an easy way to have this value (the total data of a game) displayed somewhere ?

Having very long script files is also impacting the RAM ?

When you talk about disk cache : what do you mean ? How to use that in AGS ?

If I understand you well, instead of having an array like cartes[150] that is initialized at game_start, I should have instead only one 'cartes' instance, and a function like :

Code: ags
function Creationcarte(int c)
{
  if (c==1) // code the map #1
  else if (c==2) // code the map #2
  // etc

  // Then, display the chosen map
}


This function could be called when a map has to be chosen, instead of creating 150 maps at game_start, and when needed, choosing 1 map and displaying it.

EDIT : when I run my game, I just had a look at the Task Manager, and it displays 408,5Mo in the Memory Section. Does it mean I'm using 408,5Mo over 3GB ? (I don't know the conversion from Mo to MB...).

EDIT 2 : I imagine that the main thing that takes place in memory are the sprites, right ? Maybe my struct, as it is, is very insignificant about my worries, even if I had 2000 instances of 'cartes' ?

EDIT 3 : I don't understand what are the custom saves. What's about ? Instead of AGS saves ?
#211
Advanced Technical Forum / About AGS "memory"
Mon 31/01/2022 13:13:29
Hi there !

I wonder how many data can be stored in an AGS game.

In my game, I stock the data for maps that are displayed in-game (it simulates a tabletop game). All the maps have many data, including tokens' x/y/orientation, tiles' positions, etc... often randomized between several possibilities. Currently the game owns about 200 different maps, and I plan to add more and more. The maps are managed within a structure.

As it represents a HUGE amount of data, and because you can imagine easily that the game also manages characters (about 150), GUIS (about 100), other scripts etc... Here's my question :

Is there a limit when the engine is lagging because of too many data stored, or simply can't memorize more data because of limitation ?

Sorry if my question is a bit "noob-style", but I don't know anything about these things... :(

Here is my structure for the maps, to let you see how "huge" it is :

Code: ags
struct Cartes
{
  String titre, histoire, dallesrequises;
  bool sansegout, sanslitbleu, sanslitvert; // vaut true si un de ces types de cartes ne doit pas être mis dans la carte
  int deckzombie[3]; // Les types de zombies qui vont être découverts grâce à l'exploration et donc confirmés
  int nbdalles;
  int hauteur, largeur;
  int x, y; // Permet de connaître le coin haut-gauche de la carte entière
  int dalles[14]; // stocke le "nom" de chaque dalle
  int orientationdalles[14]; // stocke l'orientation de chaque dalle
  int spritedalles[14]; // stocke la sprite de chaque dalle
  int xdalles[14], ydalles[14]; // coordonnées des dalles pour placement de la carte
  bool dallesplacementmanuel[14];
  bool zonesanspionzomb[50];
  int categorie; // stocke les cartes en fonction des boîtes nécessaires
  int nbzonesinvalea; // NECESSAIRE ?
  int tentesalea[11]; // Pour savoir si les tentes sont aléatoires ou non (dans TTS, avec la String)
  bool dallesansobjectif[14]; // Place des pions fouilles sans placer d'objectifs dans les zones de la dalle
  bool dallesansradio[14]; // Ne place pas de pions radio sur cette dalle
  int distance; // indique la distance de la carte par rapport à la colonie, influence le temps de déplacement et la durée de l'exploration
  int niveaudanger; // le niveau de danger de la carte
  
  int nbpionsamasquer;
  Button *pionsamasquer[50]; // Pointeurs vers les boutons qu'il faut masquer pour une raison ou une autre
  
  int spriteprecedente; // Mémorise la carte précédente pour les campagnes avec histoire adaptée
  bool queteenchainee; // Mémorise si ce scénario s'enchaîne, dans le cadre d'une mini-quête
  int objectifvert, objectifbleu, objectifjaune, objectifblanc, objectifviolet, objectifrose, objectifatrouver; // vaut 1 si un obj de couleur est caché
  
  int nbzonebatiment; // compte le nb de zones de bâtiment de la carte
  int xzonebatiment[100], yzonebatiment[100], typezonebatiment[100]; // Stocke toutes les zones de bâtiment de la carte
  int nbpionsfouille;
  int xpionsfouille[100], ypionsfouille[100], typepionsfouille[100];
  int nbobjectifs;
  int zonesobjectifs[100]; // indique pour chaque zone du batiment à quel objectif cela peut correspondre
  int changementtypesalle[30]; // Permet de changer le type de salle du pion objectif (PAS du pion fouille situé dessous !)
  int nbobjectifsmanuel;
  int indexobjectifsmanuel[50]; // on leur donne la valeur de l'objectif pour attribuer les infos ci-dessous à cet objectif
  int xobjectifsmanuel[50], yobjectifsmanuel[50]; // on stocke les infos pour des objectifs placés manuellement
  int xobjectifseul[30], yobjectifseul[30]; // coordonnées des objectifs placés seuls
  int nbobjectifscouleur;
  int xobjectifscouleur[10], yobjectifscouleur[10], couleurobjectifscouleur[10];
  int sansobjvert[50], sansobjbleu[50], sansobjviolet[50], sansobjjaune[50], sansobjblanc[50], sansobjrose[50]; // si vaut 1, l'objectif de couleur sera pas trouvé dans le pion fouille concerné
  int xobjectifspecial, yobjectifspecial; // coordonnées de l'objectifspecial
  int nbpionsdeclencheurs;
  int xpionsdeclencheurs[20], ypionsdeclencheurs[20];
  int nbinvasion;
  int xinvasion[10], yinvasion[10], sensinvasion[10];
  int nbinvasioncouleur;
  int xinvasioncouleur[10], yinvasioncouleur[10], couleurinvasion[10], sensinvasioncouleur[10];
  int nbinvasionfixe;
  int xinvasionfixe[10], yinvasionfixe[10], sensinvasionfixe[10];
  int nbinvasionalea;
  int xinvalea[100], yinvalea[100], sensinvalea[100];
  int nbexit;
  int xexit[30], yexit[30], sensexit[30];
  int nbdepart;
  int xdepart[30], ydepart[30];
  int nbvoitures; // Compte le nombre de voitures qui peuvent apparaître dans la carte
  int nbvoiture1, probavoiture1, indexvoiture1; // Index=index du véhicule si découvert en exploration. Vaut -1 si aléatoire. Le véhicule indexé de cette manière est transporté en room 11 avec son jumeau, tant que la mission n'est pas jouée
  int xvoiture1[10], yvoiture1[10], sensvoiture1[10]; 
  int nbvoiture2, probavoiture2, indexvoiture2;
  int xvoiture2[10], yvoiture2[10], sensvoiture2[10];
  int nbvoiture3, probavoiture3, indexvoiture3;
  int xvoiture3[10], yvoiture3[10], sensvoiture3[10];
  int nbvoiture4, probavoiture4, indexvoiture4;
  int xvoiture4[10], yvoiture4[10], sensvoiture4[10];
  int nbhelicoheliport, probahelicoheliport, indexhelicoheliport; // Index=idem que pour les voitures, mais pour l'hélico
  int xhelicoheliport[10], yhelicoheliport[10];
  int nbhelicorue, probahelicorue, indexhelicorue;
  int xhelicorue[10], yhelicorue[10];
  int nbvehiculespec;
  int xvehiculespec[5], yvehiculespec[5], sensvehiculespec[5], spritevehiculespec[5];
  int zoneexpcount; // compte les zones extérieures (rues)
  int typezoneexp[100], xzoneexp[100], yzoneexp[100]; // tableaux pour les zones extérieures (rue)
  int nbdecombres;
  int xdecombres[8], ydecombres[8], couleurdecombres[8], sensdecombres[8], tailledecombres[8]; // taille : 0 petit, 1 grand
  int nbportes;
  int xportes[50], yportes[50], couleurportes[50], sensportes[50], ouvertureporte[50]; // ouverture : 0 fermée, 1 ouverte
  bool portesinversees[50]; // vaut true si le pion porte correspondant doit être inversé
  int nbmirador;
  int xmirador[5], ymirador[5], sensmirador[5];
  int nbbarricades;
  int xbarricades[5], ybarricades[5], sensbarricades[5], ouverturebarricades[5];
  int nbsallecachee;
  int xsallecachee[5], ysallecachee[5], senssallecachee[5];
  int xsas, ysas, senssas, facesas; // SAS ROTATIF, face sas : 1 droit, 2 angle
  int xechelle, yechelle, sensechelle;
  int nbbarbeles;
  int xbarbeles[5], ybarbeles[5], sensbarbeles[5];
  int nbpionpersos;
  int xpionpersos[5], ypionpersos[5];
  int nbinterrupteurjaune;
  int xinterrupteurjaune[5], yinterrupteurjaune[5], sensinterrupteurjaune[5], lienbatimentinterrupteurjaune[5]; // indique si le bâtiment révèle un interrupteur
  int nbinterrupteurblanc;
  int xinterrupteurblanc[5], yinterrupteurblanc[5], sensinterrupteurblanc[5], lienbatimentinterrupteurblanc[5];
  int nbinterrupteurviolet;
  int xinterrupteurviolet[5], yinterrupteurviolet[5], sensinterrupteurviolet[5], lienbatimentinterrupteurviolet[5];
  int nbpionapparitions;
  int xpionapparitions[10], ypionapparitions[10], numeropionapparition[10];
  int nbindicateursinv;
  int xindicateursinv[10], yindicateursinv[10], numeroindicateursinv[10];
  int nbpiondepartsurv;
  int xpiondepartsurv[20], ypiondepartsurv[20];
  int nbpiondepartsurvsiege;
  int xpiondepartsurvsiege[50], ypiondepartsurvsiege[50];
  int nbpionzomb;
  int xpionzomb[50], ypionzomb[50];
  // TENTES
  int nbtentes;
  int xtentes[15], ytentes[15], senstentes[15], spritetentes[15];
  // Batiments
  // Batiments de 0 à 13, interrupteurs sont stockés en 14 (blanc), 15 (jaune) et 16 (violet)
  int xouvbat[17], youvbat[17]; // coordonnées des pions ouverture bâtiment
  int lieninterrupteurjaune[17], lieninterrupteurblanc[17], lieninterrupteurviolet[17]; // Vaut 1 si l'interrupteur est géré par le bâtiment
  int lienobjectifspec[17], lienobjectifbleu[17], lienobjectifvert[17], lienobjectifjaune[17], lienobjectifblanc[17], lienobjectifviolet[17], lienobjectifrose[17]; // idem pour objectifs couleur
  Button *lienvehicule1[17]; // idem pour un véhicule
  int zonesbatiment[100]; // indique pour chaque zone de bâtiments à quel bâtiment ça correspond
  int zonesinterrupteurjaune[100], zonesinterrupteurviolet[100], zonesinterrupteurblanc[100]; // idem pour les interrupteurs. Vaut 1 si cette zone est attribuée à l'interrupteur
  bool generationbatimentmanuelle[100]; // si vaut true, on génère dans ce bâtiment dès le début de l'expédition
  
  // MARQUEURS POUR L'EXPLORATION
  // Si >1 ou = à la valeur maximale de la carte, tout a été trouvé
  int exit, pionsobjectif, vehicules, typeszombie, danger;
  
  import void PresentationExp();
  import void StringTTS();
  
  import void Invasionaleatoire();
  
  import void PlacementPionZombies();
  import void ZonesExpedition();
  import void ZonesBatiment();
  
  import void CreationCartes(int sprite);
  import function T(int d, int p);
  import function X(int d, int p);
  import function Y(int d, int p);
  import void Reset();
  import void OrientationDalles(sens s0, sens s1=-1, sens s2=-1, sens s3=-1, sens s4=-1, sens s5=-1, sens s6=-1, sens s7=-1, sens s8=-1, sens s9=-1, sens s10=-1, sens s11=-1, sens s12=-1, sens s13=-1);
  import void Composition(NumDalles d1, NumDalles d2=-1, NumDalles d3=-1, NumDalles d4=-1, NumDalles d5=-1, NumDalles d6=-1, NumDalles d7=-1, NumDalles d8=-1, NumDalles d9=-1, NumDalles d10=-1, NumDalles d11=-1, NumDalles d12=-1, NumDalles d13=-1, NumDalles d14=-1);
  import void PortesCouleursOuvertesManuel(int d1, int x1, int y1, couleur c1, sens s1, int d2=-1, int x2=-1, int y2=-1, couleur c2=-1, sens s2=-1);
  import void PionDepartSurv(int n1, int n2=-1, int n3=-1, int n4=-1, int n5=-1, int n6=-1, int n7=-1, int n8=-1, int n9=-1, int n10=-1);
  import void IndicateursInvasionS3Manuel(int numero1, int d1, int x1, int y1, int numero2=-1, int d2=-1, int x2=-1, int y2=-1, int numero3=-1, int d3=-1, int x3=-1, int y3=-1);
  import void ChangementTypesSalles(int n1, types t1, int n2=-1, types t2=-1, int n3=-1, types t3=-1, int n4=-1, types t4=-1, int n5=-1, types t5=-1, int n6=-1, types t6=-1, int n7=-1, types t7=-1);
  import void DecombresPetitsManuel(int d1, int x1, int y1, couleur c1, sens s1, int d2=-1, int x2=-1, int y2=-1, couleur c2=-1, sens s2=-1);
  import void DecombresGrandsManuel(int d1, int x1, int y1, couleur c1, sens s1, int d2=-1, int x2=-1, int y2=-1, couleur c2=-1, sens s2=-1);
  import void PortesMallFermees(int d1, int n1, int d2=-1, int n2=-1, int d3=-1, int n3=-1, int d4=-1, int n4=-1, int d5=-1, int n5=-1, int d6=-1, int n6=-1, int d7=-1, int n7=-1);
  import void DoublePorteMallFermee(int d1, int n1, couleur c1, int d2=-1, int n2=-1, couleur c2=-1, int d3=-1, int n3=-1, couleur c3=-1);
  import void DoublePorteMallOuverte(int d1, int n1, couleur c1, int d2=-1, int n2=-1, couleur c2=-1, int d3=-1, int n3=-1, couleur c3=-1);
  import void TentesAlea(int t0=-1, int t1=-1, int t2=-1, int t3=-1, int t4=-1, int t5=-1, int t6=-1, int t7=-1, int t8=-1, int t9=-1, int t10=-1);
  import void ZoneSansPionZomb(int n1, int n2=-1, int n3=-1, int n4=-1, int n5=-1, int n6=-1, int n7=-1, int n8=-1, int n9=-1, int n10=-1, int n11=-1, int n12=-1, int n13=-1, int n14=-1);
  import void ZoneSansObjCouleur(couleur c, int n1, int n2=-1, int n3=-1, int n4=-1, int n5=-1, int n6=-1, int n7=-1, int n8=-1, int n9=-1, int n10=-1, int n11=-1, int n12=-1, int n13=-1);
  import void PionsFouillesSemiManuel(int d1, int n1, int d2=-1, int n2=-1, int d3=-1, int n3=-1, int d4=-1, int n4=-1, int d5=-1, int n5=-1, int d6=-1, int n6=-1, int d7=-1, int n7=-1);
  import void PionsFouillesVidesSemiManuel(int d1, int n1, int d2=-1, int n2=-1, int d3=-1, int n3=-1, int d4=-1, int n4=-1, int d5=-1, int n5=-1, int d6=-1, int n6=-1, int d7=-1, int n7=-1);
  import void PionsFouillesVidesManuel(int d1, int x1, int y1, int d2=-1, int x2=-1, int y2=-1, int d3=-1, int x3=-1, int y3=-1, int d4=-1, int x4=-1, int y4=-1);
  import void PionsFouillesManuel(int d1, types t1, int x1, int y1, int d2=-1, types t2=-1, int x2=-1, int y2=-1, int d3=-1, types t3=-1, int x3=-1, int y3=-1);
  import void DallePlacementManuel(int d1, int d2=-1, int d3=-1, int d4=-1, int d5=-1, int d6=-1, int d7=-1, int d8=-1, int d9=-1, int d10=-1, int d11=-1, int d12=-1, int d13=-1, int d14=-1);
  import void DalleSansObjectifs(int d1, int d2=-1, int d3=-1, int d4=-1, int d5=-1, int d6=-1, int d7=-1, int d8=-1, int d9=-1, int d10=-1, int d11=-1, int d12=-1, int d13=-1, int d14=-1);
  import void PortesPrisonFermeesManuel(int d1, int x1, int y1, couleur c1, sens s1, int d2=-1, int x2=-1, int y2=-1, couleur c2=-1, sens s2=-1);
  import void PortesPrisonOuvertesManuel(int d1, int x1, int y1, couleur c1, sens s1, int d2=-1, int x2=-1, int y2=-1, couleur c2=-1, sens s2=-1);
  import void PortesStandardsFermeesManuel(int d1, int x1, int y1, sens s1, int d2=-1, int x2=-1, int y2=-1, sens s2=-1, int d3=-1, int x3=-1, int y3=-1, sens s3=-1);
  import void PortesStandardsOuvertesManuel(int d1, int x1, int y1, sens s1, int d2=-1, int x2=-1, int y2=-1, sens s2=-1, int d3=-1, int x3=-1, int y3=-1, sens s3=-1);
  import void CellulesBlancFermeesManuel(int d1, int x1, int y1, sens s1, int d2=-1, int x2=-1, int y2=-1, sens s2=-1, int d3=-1, int x3=-1, int y3=-1, sens s3=-1);
  import void CellulesVioletFermeesManuel(int d1, int x1, int y1, sens s1, int d2=-1, int x2=-1, int y2=-1, sens s2=-1, int d3=-1, int x3=-1, int y3=-1, sens s3=-1);
  import void PionExitManuel(int d1, int x1, int y1, sens s1, int d2=-1, int x2=-1, int y2=-1, sens s2=-1, int d3=-1, int x3=-1, int y3=-1, sens s3=-1);
  import void SalleCachee(int d1, int x1, int y1, sens s1, int obj1, int d2=-1, int x2=-1, int y2=-1, sens s2=-1, int obj2=-1);
  import void PionDepart(int n1, sens s1, int n2=-1, sens s2=-1, int n3=-1, sens s3=-1, int n4=-1, sens s4=-1, int n5=-1, sens s5=-1, int n6=-1, sens s6=-1, int n7=-1, sens s7=-1);
  import void PlacementBarricades(int d1, int x1, int y1, int ouverture1, sens s1, int d2=-1, int x2=-1, int y2=-1, int ouverture2=-1, sens s2=-1);
  import void PortesCouleursFermeesManuel(int d1, int x1, int y1, couleur c1, sens s1, int d2=-1, int x2=-1, int y2=-1, couleur c2=-1, sens s2=-1);
  import void Tentes(int sprite1, int d1, int n1, sens s1, int sprite2=-1, int d2=-1, int n2=-1, sens s2=-1, int sprite3=-1, int d3=-1, int n3=-1, sens s3=-1);
  import function IndicateursInvasionS3(int zone, int numero1, int numero2=-1, int numero3=-1, int numero4=-1, int numero5=-1, int numero6=-1);
  import void ObjectifsCouleur(int d1, int x1, int y1, couleur c1, int d2=-1, int x2=-1, int y2=-1, couleur c2=-1, int d3=-1, int x3=-1, int y3=-1, couleur c3=-1);
  import void InverserPortes(int p1, int p2=-1, int p3=-1, int p4=-1, int p5=-1, int p6=-1, int p7=-1, int p8=-1, int p9=-1, int p10=-1, int p11=-1, int p12=-1, int p13=-1, int p14=-1);
  import void PionExit(int n1, sens s1, int n2=-1, sens s2=-1, int n3=-1, sens s3=-1, int n4=-1, sens s4=-1, int n5=-1, sens s5=-1, int n6=-1, sens s6=-1, int n7=-1, sens s7=-1);
  import void SASManuel(int d, int x, int y, int face, sens s);
  import void SAS(int d, int face, sens s);
  import void PionsDeclencheurs(int d1, int d2=-1, int d3=-1, int d4=-1, int d5=-1, int d6=-1, int d7=-1, int d8=-1, int d9=-1, int d10=-1, int d11=-1, int d12=-1, int d13=-1, int d14=-1);
  import void VehiculesRue(int proba, int n1, sens s1, int n2=-1, sens s2=-1, int n3=-1, sens s3=-1, int n4=-1, sens s4=-1, int n5=-1, sens s5=-1, int n6=-1, sens s6=-1);
  import void VehiculesGarage(int proba, int n1, sens s1, int n2=-1, sens s2=-1, int n3=-1, sens s3=-1, int n4=-1, sens s4=-1, int n5=-1, sens s5=-1, int n6=-1, sens s6=-1);
  import void HelicoptereRue(int proba, int n1, int n2=-1, int n3=-1, int n4=-1, int n5=-1, int n6=-1);
  import void HelicoptereHeliport(int proba, int n1, int n2=-1, int n3=-1, int n4=-1, int n5=-1, int n6=-1);
  import void ZonesInvasionAlea(int n1, sens s1, int n2=-1, sens s2=-1, int n3=-1, sens s3=-1, int n4=-1, sens s4=-1, int n5=-1, sens s5=-1, int n6=-1, sens s6=-1, int n7=-1, sens s7=-1);
  import void ZonesInvasionAleaManuel(int d1, int x1, int y1, sens s1, int d2=-1, int x2=-1, int y2=-1, sens s2=-1, int d3=-1, int x3=-1, int y3=-1, sens s3=-1);
  import void ZonesInvasionRougesFixesManuel(int d1, int x1, int y1, sens s1, int d2=-1, int x2=-1, int y2=-1, sens s2=-1, int d3=-1, int x3=-1, int y3=-1, sens s3=-1);
  import void PionDepartManuel(int d1, int x1, int y1, int d2=-1, int x2=-1, int y2=-1, int d3=-1, int x3=-1, int y3=-1, int d4=-1, int x4=-1, int y4=-1);
  import void PionsRecherche(int d1, int x1, int y1, int d2=-1, int x2=-1, int y2=-1, int d3=-1, int x3=-1, int y3=-1, int d4=-1, int x4=-1, int y4=-1);
  import void ZonesInvasionRouges(int n1, sens s1, int n2=-1, sens s2=-1, int n3=-1, sens s3=-1, int n4=-1, sens s4=-1, int n5=-1, sens s5=-1, int n6=-1, sens s6=-1, int n7=-1, sens s7=-1);
  import void ZonesInvasionRougesManuel(int d1, int x1, int y1, sens s1, int d2=-1, int x2=-1, int y2=-1, sens s2=-1, int d3=-1, int x3=-1, int y3=-1, sens s3=-1);
  import void ZonesInvasionRougesFixes(int n1, sens s1, int n2=-1, sens s2=-1, int n3=-1, sens s3=-1, int n4=-1, sens s4=-1, int n5=-1, sens s5=-1, int n6=-1, sens s6=-1, int n7=-1, sens s7=-1);
  import void ZonesInvasionCouleur(int n1, couleur c1, sens s1, int n2=-1, couleur c2=-1, sens s2=-1, int n3=-1, couleur c3=-1, sens s3=-1, int n4=-1, couleur c4=-1, sens s4=-1);
  import void ZonesInvasionCouleurManuel(int d1, int x1, int y1, couleur c1, sens s1, int d2=-1, int x2=-1, int y2=-1, couleur c2=-1, sens s2=-1);
  import void PortesExtStandardsFermees(int d1, int n1, int d2=-1, int n2=-1, int d3=-1, int n3=-1, int d4=-1, int n4=-1, int d5=-1, int n5=-1, int d6=-1, int n6=-1, int d7=-1, int n7=-1);
  import void PortesExtStandardsOuvertes(int d1, int n1, int d2=-1, int n2=-1, int d3=-1, int n3=-1, int d4=-1, int n4=-1, int d5=-1, int n5=-1, int d6=-1, int n6=-1, int d7=-1, int n7=-1);
  import void PortesIntStandardsFermees(int d1, int n1, int d2=-1, int n2=-1, int d3=-1, int n3=-1, int d4=-1, int n4=-1, int d5=-1, int n5=-1, int d6=-1, int n6=-1, int d7=-1, int n7=-1);
  import void PortesIntStandardsOuvertes(int d1, int n1, int d2=-1, int n2=-1, int d3=-1, int n3=-1, int d4=-1, int n4=-1, int d5=-1, int n5=-1, int d6=-1, int n6=-1, int d7=-1, int n7=-1);
  import void CellulesIntVioletFermees(int d1, int n1, int d2=-1, int n2=-1, int d3=-1, int n3=-1, int d4=-1, int n4=-1, int d5=-1, int n5=-1, int d6=-1, int n6=-1, int d7=-1, int n7=-1);
  import void CellulesIntBlancFermees(int d1, int n1, int d2=-1, int n2=-1, int d3=-1, int n3=-1, int d4=-1, int n4=-1, int d5=-1, int n5=-1, int d6=-1, int n6=-1, int d7=-1, int n7=-1);
  import void PortesPrisonIntFermees(int d1, int n1, couleur c1, int d2=-1, int n2=-1, couleur c2=-1, int d3=-1, int n3=-1, couleur c3=-1, int d4=-1, int n4=-1, couleur c4=-1);
  import void PortesPrisonIntOuvertes(int d1, int n1, couleur c1, int d2=-1, int n2=-1, couleur c2=-1, int d3=-1, int n3=-1, couleur c3=-1, int d4=-1, int n4=-1, couleur c4=-1);
  import void PortesPrisonExtFermees(int d1, int n1, couleur c1, int d2=-1, int n2=-1, couleur c2=-1, int d3=-1, int n3=-1, couleur c3=-1, int d4=-1, int n4=-1, couleur c4=-1);
  import void PortesIntCouleursFermees(int d1, int n1, couleur c1, int d2=-1, int n2=-1, couleur c2=-1, int d3=-1, int n3=-1, couleur c3=-1, int d4=-1, int n4=-1, couleur c4=-1);
  import void PortesExtCouleursFermees(int d1, int n1, couleur c1, int d2=-1, int n2=-1, couleur c2=-1, int d3=-1, int n3=-1, couleur c3=-1, int d4=-1, int n4=-1, couleur c4=-1);
  import void Mirador(int d1, int x1, int y1, sens s1, int fouille1, int d2=-1, int x2=-1, int y2=-1, sens s2=-1, int fouille2=-1);
  import void Pionapparition(int numero1, int d1, int x1, int y1, int numero2=-1, int d2=-1, int x2=-1, int y2=-1, int numero3=-1, int d3=-1, int x3=-1, int y3=-1);
  import void LienPionsSpeciauxBatiment(int numerobatiment, int n1, int n2=-1, int n3=-1, int n4=-1, int n5=-1, int n6=-1, int n7=-1, int n8=-1, int n9=-1, int n10=-1, int n11=-1, int n12=-1, int n13=-1);
  import void FormationBatiment(int numero, int n1, int n2=-1, int n3=-1, int n4=-1, int n5=-1, int n6=-1, int n7=-1, int n8=-1, int n9=-1, int n10=-1, int n11=-1, int n12=-1, int n13=-1);
  import void FormationBatimentInterrupteur(couleur c, int n1, int n2=-1, int n3=-1, int n4=-1, int n5=-1, int n6=-1, int n7=-1, int n8=-1, int n9=-1, int n10=-1, int n11=-1, int n12=-1, int n13=-1); 
  import void PlacementPionsFouilles(int d);
  import void PlacementObjectifs(int d);
  import void PlacementObjectifSpecialManuel(int d, int x, int y);
  import void GenerationBatimentManuel(int n1, int n2=-1, int n3=-1, int n4=-1, int n5=-1, int n6=-1, int n7=-1, int n8=-1, int n9=-1, int n10=-1, int n11=-1, int n12=-1, int n13=-1, int n14=-1);
  import void PionOuvertureBatimentSemiManuel(int numerobatiment1, int z1, int numerobatiment2=-1, int z2=-1, int numerobatiment3=-1, int z3=-1, int numerobatiment4=-1, int z4=-1, int numerobatiment5=-1, int z5=-1, int numerobatiment6=-1, int z6=-1, int numerobatiment7=-1, int z7=-1);
  import void PionOuvertureBatiment(int n1, int d1, int n2=-1, int d2=-1, int n3=-1, int d3=-1, int n4=-1, int d4=-1, int n5=-1, int d5=-1, int n6=-1, int d6=-1, int n7=-1, int d7=-1);
  import void PionOuvertureBatimentManuel(int numerobatiment1, int d1, int x1, int y1, int numerobatiment2=-1, int d2=-1, int x2=-1, int y2=-1, int numerobatiment3=-1, int d3=-1, int x3=-1, int y3=-1);
  import void PlacementObjectifsManuel(int numero, types type1, int xtype1, int ytype1, types type2=-1, int xtype2=-1, int ytype2=-1, types type3=-1, int xtype3=-1, int ytype3=-1, types type4=-1, int xtype4=-1, int ytype4=-1);
  import void PlacementObjectifsSemiManuel(int numero, int d1, int z1, int d2=-1, int z2=-1, int d3=-1, int z3=-1, int d4=-1, int z4=-1, int d5=-1, int z5=-1, int d6=-1, int z6=-1);
  import void PlacementObjectifsSeulsManuel(int d1, int xtype1, int ytype1, int d2=-1, int xtype2=-1, int ytype2=-1, int d3=-1, int xtype3=-1, int ytype3=-1, int d4=-1, int xtype4=-1, int ytype4=-1);
  import void PionDepartSurvSiege();
  import void EchelleHeliport(int d, int n);
  import void Barbeles(int d1, int x1, int y1, sens s1, int d2=-1, int x2=-1, int y2=-1, sens s2=-1);
  import void VehiculeSpecManuel(TypeVehiculeSpec type, int d, int x, int y, sens s);
  import void VehiculeSpecGarage(TypeVehiculeSpec type, int d, sens s);
  import void VehiculeSpecRue(TypeVehiculeSpec type, int n, sens s);
  import void PionPersonnage(int d, int x, int y);
  import void InterrupteursManuel(couleur c, int d1, int x1, int y1, sens s1, int numerobatiment1=-1, int d2=-1, int x2=-1, int y2=-1, sens s2=-1, int numerobatiment2=-1);
  import void MasquerPions(Button *b1, Button *b2=0, Button *b3=0, Button *b4=0, Button *b5=0, Button *b6=0, Button *b7=0, Button *b8=0, Button *b9=0, Button *b10=0, Button *b11=0, Button *b12=0, Button *b13=0, Button *b14=0);
  import void TirageCarte();
};
#212
OK, will see in 3.6 !

And what about the ekeyCtrlLeft and ekeyCtrlRight ? Have they been deleted ?
#213
Oh, I see ! But is there a way to fix it ?

EDIT : eKeyCtrlLeft and eKeyCtrlRight don't exist... Have they got another name in AGS ?

EDIT 2 : so I just used their ASCII code (405 and 406) instead, but there are no "enum value" for them in my version (3.5.1)

EDIT 3 : in the same "theme", is "eMouseWheelNorth" and "eMouseWheelSouth" should work with a tactile pad of a PC ? (I don't know the english name for that, but you know, the tactile zone where your fingers can simulate the mouse, like for a smartphone. Scrolling can be done by using two fingers).
#214
Sorry to post it here, but maybe it needs to be fixed in the new 3.6 coming...

I encounter this problem : when I press "enter", it generates something that would be done by pressiong CtrlK or something like that (a combination of 2 keys, but NOT the "enter" key).

I have no "if (keycode==eKeyenter)" in my "on_keypress" function... And I don't ever know if "enter" key can be used like that.

Any idea about it ? Which value has the enter key ?
#215
Also, sorry for the double-post, but I think this question has been asked a thousand times, but if possible, could we imagine a compatibility for AGS managing the PNG files like it manages BMP files ?

Creating DynamicSprites from PNG files out of the game, things like that. Would be perfect, with the alpha canal, will make the life easier for dynamicsprites with transparent backgrounds :)
#216
Also I had an idea about Listboxes : should it be possible to have a feature that when you click on a listbox, if you just clicked on the already selected index, the listbox gets Listbox.SelectedIndex=-1 ?

It should be a nice native effect. What do you think ?
#217
Great !

The function to built for Android inside the Editor will be a very nice feature !!

I plan to go on the 3.6 very soon with my game.
#218
Great Job Crimson Wizard and the developer team !

It seems that the 3.6 can be considered as a beta version, now ? Or should we wait a bit more time ?

The new features are very interesting :)

Any way to have the "GUI Controls clip their content" option available individually ? Or is it for all GUI Controls ?
#219
Quoteusing most trivial nearest-neighbour method.

Do you mean it's a method that is not very good ?

What I'm trying to do is to create several sprites from one sprite. It will allow to decrease the game's size because many sprites will be created when the game is launched. They use the sprite (that is already in the game) and resize it smaller and put it on another background. But the main reason is that I allow the player to add his own sprites (from files on his computer), and so in this case I automatically create the other sprites from his "custom" image, instead of asking him "create another sprite using the first one and putting it on the background I gave you with the game".

Not sure if it's clear, but it's really useful to do that. Until now, it seems that resizing a 140*140 sprite into a 30*30 one gave me an ugly result.

EDIT : well maybe it's because I resize it too much ?
#220
Hi there !

I tried to use the resize function on DynamicSprite, but I felt it was not really well working. The image is maybe too complex, and so it's more "pixelized", and not so precise as expected.

Any way to have this function working better in AGS ? Or is there a reason of that ? Or a module that could help ?
SMF spam blocked by CleanTalk