Forum d'entraide à la création de jeux d'aventure
 
PortailPortail  AccueilAccueil  RechercherRechercher  S'enregistrerS'enregistrer  Connexion  
Le deal à ne pas rater :
Cartes Pokémon : la prochaine extension Pokémon sera EV6.5 Fable ...
Voir le deal

 

 [Module] IsoWalk (ex Use motsly the 8 Directions - U8D)

Aller en bas 
4 participants
Aller à la page : 1, 2, 3  Suivant
AuteurMessage
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Billbis


Nombre de messages : 1346

Date d'inscription : 10/05/2012


[Module] IsoWalk (ex Use motsly the 8 Directions - U8D) Empty
MessageSujet: [Module] IsoWalk (ex Use motsly the 8 Directions - U8D)   [Module] IsoWalk (ex Use motsly the 8 Directions - U8D) EmptyDim 3 Mar 2013 - 18:38

Ce module est issu d'une discussion avec valoulef que vous pouvez trouver ici.
J'ai été aidé par Kitai pour la partie pratique et par Pidem pour la partie théorique.
Voici donc :
IsoWalk v1.1
(click droit, enregistrer sous, environ 11ko)
(ex U8D - Use mostly 8 Directions)

Pour le nom, j'ai hésité avec Pinap (pour Pinap Is Not A Pathfinder) ou encore Onepup (pour Onepu N'Est Pas Un Pathfinder) mais finalement, je suis resté sur Use 8 Directions (U8D) IsoWalk !
^^
Ce petit module contient une nouvelle fonction Walk (nommé IsoWalk) qui s'utilise comme la fonction Walk normale, mais qui tente de forcer un déplacement du personnage spécifié selon les 8 directions naturelles, afin de limiter les effet de "glissements".

Un petit schéma explicatif :
[Module] IsoWalk (ex Use motsly the 8 Directions - U8D) 1362334821-u8d

Imaginons que le personnage situé au point A doit se rendre au point B.
Plutôt que d'y aller en ligne droite, ce qui peut provoquer un effet de glissement, le module fait passer le personnage par P1.
Si P1 n'est pas dans une Walkable Area, alors le personnage passera par P2.
Si P2 n'est pas dans une Walkable Area, alors tant pis. Le personnage se déplacera normalement avec effet de glissement.   triste
Si il y a un obstacle entre A-P1 ou P1-B, le personnage le contourne en via le pathfinding natif (donc en glissant).  triste
Ce module fonctionne donc mieux avec les WalkeableAreas grandes et dégagées qu'avec celles petites et encombrées.
L'ordre des priorités est personnalisable.

Par défaut, le module contient un hack qui lance la fonction player.IsoWalk(mouse.x, mouse.y) lors d'un clic de souris en mode eModeWalkTo suivi d'un ClaimEvent(), mais c'est désactivable.
clin d'oeil
Désolé pour les commentaires de codes en franglais.
De toute façon, il est fortement déconseillé de comprendre le code de ce module sous peine d'attraper un sérieux mal de tête.

grand sourire
Commentaires traduits en Anglais + code un peu plus propre (08/03/13)
Ajout d'une distance minimum pour déclencher le module (par défaut, 20 pixel, customisable) (02/06/2013)
Changement de nom, possibilité de faire plusieurs déplacements non bloquants simultanée sur plusieurs personnages. Ajout d'un petit hack pour éviter le déclenchement d'un comportement étrange du pathfinder d'AGS. (03/03/2014)
Encapsulation des variables optionnelles dans une struct, parce que. (22/05/2014).

Vous pouvez bien sur utiliser, modifier et redistribuer ce module à volonté, sans limite, sans obligation de me demander ni de me créditer.
N'hésitez pas à me communiquer vos bugs rencontrés, suggestions et autres remarques.

Utilisation :
Code:
// fonction principale
cEgo.IsoWalk(100, 100);
cEgo.IsoWalk(100, 100, eBlock, eAnywhere);

// pour désactiver le module ( IsoWalk se comportera comme un walk normal), utile pour faire une option.
IsoWalkModule.ModuleON = false;

// distance minium en pixel pour que le module soit actif (20 par défaut). En dessous, un walk normal est appelé.
IsoWalkModule.MinDistance = 100;

// change l'ordre de priorité des points de passages P1 et P2.
// vrai : la diagonal en premier (faux par défaut).
IsoWalkModule.UseAlternateHorizontalPath = true;
IsoWalkModule.UseAlternateVerticalPath = true;

IsoWalk header
Code:
// Header for module 'IsoWalk', version 1.1
//
// Author: Billbis & Pidem
//
// Abstract:
//
//  Enforce walking on the 8 standard directions when possible to avoid gliding effects.
//  Contain an alternative walk function (IsoWalk(int x, int y, optional BlockingStyle, optional WalkWhere))
//  Usage: cEgo.IsoWalk(100,100);
//  By default, hacks mouse click in WalkTo mode to perform a player.IsoWalk().
// 
// Dependencies:
//
//  AGS version required:  build for AGS 3.2.1 and 3.3.0, not sure if it works with older versions.
//
//  AGS setting required: No particular configuration is needed. Not very useful if you do not have
//  8 directions in your walking views or if your game is in Low Resolution.
//
// Configuration:
//
//  Optional:
//   
//    IsoW_HACKWALK is define as true.
//    Define it as false to use normal mouse comportment for eModeWalkTo (or delete the corresponding section in IsoWalk Script).
//   
//    IsoWalkModule.moduleON (bool) can be set to false to force IsoWalk to act as normal walk function.
//    (useful to set this module as optional).
//    IsoWalkModule.UseAlternateHorizontalPath and IsoWalkModule.UseAlternateVerticalPath (bool) will change waypoints priorities.
//    (see code comments for details).
//    IsoWalkModule.MinDistance (int) is the minimum distance (in pixel) to activate the module.
//
// Caveats:
//
//  This module works better on large free WalkeableAreas than on small busy ones.
//  If no alternative way is found, characters will use normal walk comportment.
//
// Revision history:
//  verion 1.1: 2014/05/22
//      Optional variables are now encaplusated in a struct.
//  version 1.0: 2014/03/04
//      Name change from Use 8 Direction to IsoWalk. Addition of a few '+3' to avoid a strange comportment of
//      AGS pathfinder.
//      The module now support multi-character non blocking IsoWalks !
//  version beta 0.4: 2013/06/27
//      Bug correction: WA detection now take in account viewport.
//  version beta 0.3: 2013/06/12
//      Addition of Minimal Distance setting.
//  version beta 0.2: 2013/03/08
//      Code cleaning + more customizations possibles.
//  version beta 0.1: 2013/03/03
//      First release.
// 
// License:
//
//  IsoWalk is publish under the terms of the
//  Do What The Fuck You Want To Public License, Version 2
//
// This program is free software. It comes without any warranty, to
// the extent permitted by applicable law. You can redistribute it
// and/or modify it under the terms of the Do What The Fuck You Want
// To Public License, Version 2, as published by Sam Hocevar. See
// http://sam.zoy.org/wtfpl/COPYING for more details.
//
// Thanks:
//
//  Kitai, valoulef


// Defines
//Override Mouse Click in mode WalkTo to use IsoWalk for the main character
#define IsoW_HACKWALK true // $AUTOCOMPLETEIGNORE$

//Struct definition
struct IsoWalkModule {
   
    import static attribute bool ModuleON;
    import static bool get_ModuleON(); // $AUTOCOMPLETEIGNORE$
    import static void set_ModuleON(bool input); // $AUTOCOMPLETEIGNORE$
   
    import static attribute bool UseAlternateHorizontalPath;
    import static bool get_UseAlternateHorizontalPath(); // $AUTOCOMPLETEIGNORE$
    import static void set_UseAlternateHorizontalPath(bool input); // $AUTOCOMPLETEIGNORE$   
   
    import static attribute bool UseAlternateVerticalPath;
    import static bool get_UseAlternateVerticalPath(); // $AUTOCOMPLETEIGNORE$
    import static void set_UseAlternateVerticalPath(bool input); // $AUTOCOMPLETEIGNORE$   
   
    import static attribute int MinDistance;
    import static int get_MinDistance(); // $AUTOCOMPLETEIGNORE$
    import static void set_MinDistance(int input); // $AUTOCOMPLETEIGNORE$
   
};

// Function imports

/// Walk to point (x,y) using only the 8 directions if possible.
import void IsoWalk(this Character*, int x, int y, BlockingStyle = eNoBlock, WalkWhere = eWalkableAreas);

IsoWalk Script
Code:
// IsoWalk module script

//Variables declaration & definition
bool ModuleON = true; //if turn OFF, IsoWalk act as normal Walk. To set the module as an option.
bool UseAlternateHorizontalPath = false; //exchange waypoint priorities. False = vertical / horizontal first
bool UseAlternateVerticalPath = false; //True = diagonal first
int MinDistance = 20; //Minimum distance (in pixel) for the Module to be active.

// struct static definitions
static bool IsoWalkModule::get_ModuleON() {
    return ModuleON;
}
static void IsoWalkModule::set_ModuleON(bool input) {
    ModuleON = input;
}

static bool IsoWalkModule::get_UseAlternateHorizontalPath() {
    return UseAlternateHorizontalPath;
}
static void IsoWalkModule::set_UseAlternateHorizontalPath(bool input) {
    UseAlternateHorizontalPath = input;
}

static bool IsoWalkModule::get_UseAlternateVerticalPath() {
    return UseAlternateVerticalPath;
}
static void IsoWalkModule::set_UseAlternateVerticalPath(bool input) {
    UseAlternateVerticalPath = input;
}

static int IsoWalkModule::get_MinDistance() {
    return MinDistance;
}
static void IsoWalkModule::set_MinDistance(int input) {
    if (input >= 0 && input <= System.ViewportWidth) {
        MinDistance = input;
    }
}

// Stuff for non blocking walk
bool IsoW_noBlock = false; // optimisation of the repeatedly_execute() checks.
int IsoW_x[];
int IsoW_y[];
bool IsoW_eWalkableAreas[];
bool IsoW_character[];

function game_start () {
  IsoW_x = new int[Game.CharacterCount];
  IsoW_y = new int[Game.CharacterCount];
  IsoW_eWalkableAreas = new bool[Game.CharacterCount];
  IsoW_character = new bool[Game.CharacterCount];
}

//Functions definition

// Return absolute value
function IsoW_Abs(int x) {
  if (x >= 0) return x;
  else return -x;
}

// Main module function
void IsoWalk(this Character*, int x, int y, BlockingStyle BStyle, WalkWhere WWhere) { // Alternative walk function. Core of the module.
  int ID = this.ID;
  int DeltaX = IsoW_Abs(x - this.x); //Distances between character and destination
  int DeltaY = IsoW_Abs(y - this.y);
  if ((ModuleON)&& ((DeltaX*DeltaX + DeltaY*DeltaY) > (MinDistance*MinDistance))) { //If Distance > MinDistance (Pythagore)
    int Signe;
    int xP1, xP2, xWP, yP1, yP2, yWP;
    //Calculating Waypoint Coordinates
    if (DeltaX >= DeltaY) { //Diagonal + Horizontal movement needed
      if (this.x - x >= 0) {
        Signe = 1;
      } else {
        Signe = -1;
      }
      if (!UseAlternateHorizontalPath) {
        xP1= x + DeltaY*Signe;  //Waypoint coordiantes
        yP1= this.y;
        xP2= this.x + DeltaY*(-Signe); //Alternative waypoint coordinate
        yP2= y;
      } else {// if IsoW_UseAlternateHorizontalPath P1 <-> P2
        xP1= this.x + DeltaY*(-Signe);  //Waypoint coordiantes
        yP1= y;
        xP2= x + DeltaY*Signe;//Alternative waypoint coordinate
        yP2= this.y;
      }
    } else { //DeltaX < DeltaY Diagonal + Vertical movement needed
      if (this.y - y >= 0) {
        Signe = 1;
      } else {
        Signe = -1;
      }
      if (!UseAlternateVerticalPath) {
        xP1= this.x;  //Waypoint coordiantes
        yP1= y + DeltaX*Signe;
        xP2= x; //Alternative waypoint coordinate
        yP2= this.y + DeltaX*(-Signe);
      } else {// if IsoW_UseAlternateVerticalPath P1 <-> P2
        xP1= x;  //Waypoint coordiantes
        yP1= this.y + DeltaX*(-Signe);
        xP2= this.x; //Alternative waypoint coordinate
        yP2= y + DeltaX*Signe;
      }
    }
    //Walking
    if ( WWhere == eWalkableAreas) {
      if (GetWalkableAreaAt(xP1-GetViewportX(), yP1-GetViewportY()) !=0) { //if P1 is in a WA, we use it
        xWP = xP1 + 3; // +3 are small hacks to force AGS to use Djikstra
        yWP = yP1 + 3;
      } else if (GetWalkableAreaAt(xP2-GetViewportX(), yP2-GetViewportY()) !=0) { //if P2 is in a WA but not P1, we use P2
        xWP = xP2 + 3;
        yWP = yP2 + 3;
      } else { //is not P1 neither P2 are in a WA, then we give up
        xWP = x;
        yWP = y;
      }
      if (BStyle == eBlock) {
        this.Walk(xWP, yWP, eBlock, eWalkableAreas);
        this.Walk(x, y, eBlock, eWalkableAreas);
      } else { //BStyle == eNoBlock
        this.Walk(xWP, yWP, eNoBlock, eWalkableAreas);
        IsoW_x[ID] = x;
        IsoW_y[ID] = y;
        IsoW_character[ID] = true;
        IsoW_eWalkableAreas[ID] = true;
        IsoW_noBlock = true; // 2nd part of the movement in Repeatidly_execute
      }
    } else { // WWhere == eAnywhere
      if (BStyle == eBlock) {
        this.Walk(xP1, yP1, eBlock, eAnywhere);
        this.Walk(x, y, eBlock, eAnywhere);
      } else { //BStyle == eNoBlock
        this.Walk(xP1, yP1, eNoBlock, eAnywhere);
        IsoW_x[ID] = x;
        IsoW_y[ID] = y;       
        IsoW_character[ID] = true;
        IsoW_eWalkableAreas[ID] = false;
        IsoW_noBlock = true; // 2nd part of the movement in Repeatidly_execute
      }
    }
  } else { //if module is OFF, or if too short distance
    this.Walk(x, y, BStyle, WWhere);
  }
}

//Non blocking movement
function repeatedly_execute() {
  if (IsoW_noBlock) {
    int i = 0;
    while (i < Game.CharacterCount) {
      if (IsoW_character[i] == true && character[i].Moving == false) {
        if (IsoW_eWalkableAreas[i]) {
          character[i].Walk(IsoW_x[i], IsoW_y[i], eNoBlock, eWalkableAreas);
        } else {
          character[i].Walk(IsoW_x[i], IsoW_y[i], eNoBlock, eAnywhere);
        }
        IsoW_character[i] = false;
      }
      i++;
    }
    IsoW_noBlock = false;
    i = 0;
    while (i < Game.CharacterCount) {
      if (IsoW_character[i]) {
        IsoW_noBlock = true;
      }
      i++;
    }
  }
}

// intercept left clicks in eModeWalkto to order a IsoWalk
function on_mouse_click(MouseButton button) { 
  if (IsoW_HACKWALK) {
    if (button == eMouseLeft) {
      if (Mouse.Mode == eModeWalkto) {
          player.IsoWalk(mouse.x + GetViewportX(), mouse.y + GetViewportY(), eNoBlock, eWalkableAreas);
          ClaimEvent();
      }
    }
  }
}

_________________
Mon petit DevBlog


Dernière édition par Billbis le Jeu 22 Mai 2014 - 19:54, édité 8 fois (Raison : Mise à jour v1.1)
Revenir en haut Aller en bas
http://nothingaboutthedog.blogspot.fr/
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef


Nombre de messages : 1791

Age : 35

Localisation : Condate

Date d'inscription : 01/08/2011


[Module] IsoWalk (ex Use motsly the 8 Directions - U8D) Empty
MessageSujet: Re: [Module] IsoWalk (ex Use motsly the 8 Directions - U8D)   [Module] IsoWalk (ex Use motsly the 8 Directions - U8D) EmptyLun 4 Mar 2013 - 22:53

Bon du coup j'ai testé le module avec Roger, en attendant d'avoir un personnage à 8 directions. Ça marche bien ! Un truc que je n'avais pas compris, tant que le point intermédiaire se situe dans une walkable area, le module fonctionne même si un obstacle est sur la trajectoire car le perso le contourne et continue de suivre ton système ! C'est donc déjà très performant. Le seul souci, mais pas très grave (et sûrement contournable en triffouillant le jeu), c'est que la logique à plat et celle de la perspective ne sont pas toujours les mêmes, et du coup il y a une situation dans laquelle notre ami Roger prend un itinéraire très bizarre car il semble s'éloigner du point B (alors qu'en fait il reste sur le même axe x) avant de le rejoindre. Mais ça ça vient en grande partie de la perspective de ma room. Je verrai si je peux y faire quelque chose pour limiter ce genre de situations.

En tout cas bravo, je crois que mon jeu va gagner en réalisme grâce à toi !

_________________
Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
Revenir en haut Aller en bas
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef


Nombre de messages : 1791

Age : 35

Localisation : Condate

Date d'inscription : 01/08/2011


[Module] IsoWalk (ex Use motsly the 8 Directions - U8D) Empty
MessageSujet: Re: [Module] IsoWalk (ex Use motsly the 8 Directions - U8D)   [Module] IsoWalk (ex Use motsly the 8 Directions - U8D) EmptyMar 5 Mar 2013 - 17:07

Par contre, je viens de voir que la fonction ne s'appliquait pas aux déplacements scriptés, par exemple quand le clic sur un hotspot en mode interact implique un déplacement dans le script de la room. Tu ne l'as pas prévu dans ton code ou ce n'est pas normal ?

_________________
Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
Revenir en haut Aller en bas
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Billbis


Nombre de messages : 1346

Date d'inscription : 10/05/2012


[Module] IsoWalk (ex Use motsly the 8 Directions - U8D) Empty
MessageSujet: Re: [Module] IsoWalk (ex Use motsly the 8 Directions - U8D)   [Module] IsoWalk (ex Use motsly the 8 Directions - U8D) EmptyMar 5 Mar 2013 - 17:45

valoulef a écrit:
Un truc que je n'avais pas compris, tant que le point intermédiaire se situe dans une walkable area, le module fonctionne même si un obstacle est sur la trajectoire car le perso le contourne et continue de suivre ton système !
Bin oui, c'est AGS qui fait ça tout seul, comme un grand, via son pathfinding. En effet, mon module n'est PAS un algorithme de pathfinding, il utilise celui d'AGS (oui je radote).

valoulef a écrit:
Le seul souci, mais pas très grave (et sûrement contournable en triffouillant le jeu), c'est que la logique à plat et celle de la perspective ne sont pas toujours les mêmes, et du coup il y a une situation dans laquelle notre ami Roger prend un itinéraire très bizarre car il semble s'éloigner du point B (alors qu'en fait il reste sur le même axe x) avant de le rejoindre. Mais ça ça vient en grande partie de la perspective de ma room.
Pas facile de te répondre sans voir la room en question. A priori ce n'est pas un bug du code. En générale, il faut que toutes les horizontales de la walkeable area soit sur un même niveau de mise à l’échelle. Ca marche mieux avec un point de fuite central. Sinon on peux essayer de jouer sur le z du personnage (en cas de collines par exemple). Il y a plusieurs modules sur le forum anglophone a propos de ce point. On peux aussi essayer d'inverser l'ordre des priorités P1 - P2 pour voir si c'est mieux ?

valoulef a écrit:

En tout cas bravo, je crois que mon jeu va gagner en réalisme grâce à toi !
Merci ! Mais ne te sens pas du tout obligé de l'utiliser ! Ça ne me vexe pas du tout s'il reste lettre morte. clin d'oeil

valoulef a écrit:
Tu ne l'as pas prévu dans ton code ou ce n'est pas normal ?
Ce n'est pas prévu dans le code, donc "c'est normal".
A vrai dire, je ne vois pas du tout comment je pourrais l'implémenter. Et c'est un sacré problème ! Merci de l'avoir soulevé.
A mon avis, il ne faut pas rentrer de WalkToPoint dans l'éditeur, mais coder le déplacement en dur pour chaque interaction via un appel de U8D_walk... confus

_________________
Mon petit DevBlog
Revenir en haut Aller en bas
http://nothingaboutthedog.blogspot.fr/
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef


Nombre de messages : 1791

Age : 35

Localisation : Condate

Date d'inscription : 01/08/2011


[Module] IsoWalk (ex Use motsly the 8 Directions - U8D) Empty
MessageSujet: Re: [Module] IsoWalk (ex Use motsly the 8 Directions - U8D)   [Module] IsoWalk (ex Use motsly the 8 Directions - U8D) EmptyMar 5 Mar 2013 - 18:20

Billbis a écrit:
A priori ce n'est pas un bug du code.

Non, c'est même sur que ce n'est pas le cas, ça vient bien de la perspective non centrale de mon décor. C'était juste une remarque comme ça, mais c'est tout à fait normal.

Billbis a écrit:
On peux aussi essayer d'inverser l'ordre des priorités P1 - P2 pour voir si c'est mieux ?

Là c'est au minimum délicat et au maximum ingérable, car c'est quasiment sûr que l'ordre idéal change à chaque déplacement, selon le contexte. Mais bon, il n'y aura je pense que de rares cas ou ça fera vraiment bizarre (sauf peut-être pour le couloir qui a une profondeur importante, dans la mesure où le point de vue se situe au fond), et je m'adapterai en essayant de retoucher en fonction mes walkable area. Sinon c'est pas très grave.



Billbis a écrit:

Ce n'est pas prévu dans le code, donc "c'est normal".
A vrai dire, je ne vois pas du tout comment je pourrais l'implémenter. Et c'est un sacré problème ! Merci de l'avoir soulevé.
A mon avis, il ne faut pas rentrer de WalkToPoint dans l'éditeur, mais coder le déplacement en dur pour chaque interaction via un appel de U8D_walk...

Hum, c'est curieux... Pourtant le clic en mode "Walk to" est normalement interprété comme un "cEgo.WalkTo(x, y)"... ou pas, ce qui m'inquiète pour mon autre problème de dialogue mais bref. Du coup ça devrait pouvoir se régler avec une petite fonction appelant ton Module pour chaque "WalkTo", non ?


EDIT ah oui non je viens de comprendre pourquoi ça ne marche pas en regardant dans ton code, en fait tu demandes à AGS d'annuler la fonction "WalkTo"... Ceci explique cela.

_________________
Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
Revenir en haut Aller en bas
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Billbis


Nombre de messages : 1346

Date d'inscription : 10/05/2012


[Module] IsoWalk (ex Use motsly the 8 Directions - U8D) Empty
MessageSujet: Re: [Module] IsoWalk (ex Use motsly the 8 Directions - U8D)   [Module] IsoWalk (ex Use motsly the 8 Directions - U8D) EmptyMer 6 Mar 2013 - 7:44

Petit sondage, quels chemins préférez vous par défauts :
pour l'instant c'est ceux en haut à gauche (le personnage part du centre pour aller vers l'une des extrémités des branches). Mais vous qu'en pensez vous ? Lesquels font le plus naturel ?
[Module] IsoWalk (ex Use motsly the 8 Directions - U8D) 1362517728-bruit3
[Module] IsoWalk (ex Use motsly the 8 Directions - U8D) 1362517728-bruit4

_________________
Mon petit DevBlog
Revenir en haut Aller en bas
http://nothingaboutthedog.blogspot.fr/
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef


Nombre de messages : 1791

Age : 35

Localisation : Condate

Date d'inscription : 01/08/2011


[Module] IsoWalk (ex Use motsly the 8 Directions - U8D) Empty
MessageSujet: Re: [Module] IsoWalk (ex Use motsly the 8 Directions - U8D)   [Module] IsoWalk (ex Use motsly the 8 Directions - U8D) EmptyMer 6 Mar 2013 - 21:59

Début de la partie périmée du message

Ah oui j'ai toujours pas répondu à ta question. Va falloir que je me penche dessus, mais ce sera pour demain. Dis-moi, y'a un truc que je pige pas dans ton code.

Tout à la fin :
Code:
  if (u8d_HackWalk) {
   

C'est quoi cette condition sortie de nulle part ?? (EDIT : je viens de comprendre, elle est définie dans l'ash en fait...)


Sinon je me dis que si je décide d'utiliser ton module (qui à ce que j'ai compris est susceptible d'évoluer ?), je pourrais peut-être créer une commande personnalisée qui remplacerait WalkTo et qui ferait appel à ta "méga fonction de la mort qui fait l'intérêt de ton module"... Comme ça, ça s'appliquerait à l'ensemble des déplacements. C'est possible d'importer une fonction d'un module dans le GlobalScript ?

Fin de la partie périmée du message. Veuillez nous excuser pour la gène occasionnée

EDIT : Ah mais non en fait il y a juste à taper cEgo.U8D_walk à la place de cEgo.WalkTo ! C'est magique ! Tu me l'avais dit mais j'avais pas pigé. Ben du coup, ça va, de toute façon dans la plupart des cas il faut coder les déplacements. Je créérai peut-être juste une commande de remplacement pour que ce soit moins galère à taper, mais encore avec l'autocomplétion ça va... Bref, c'est cool.

EDIT (chemin préférentiel) :
Bon, alors d'après les rapides tests que je viens de faire, j'aurais tendance à faire l'inverse de ce que tu as fait, c'est à dire appliquer le schéma en haut à droite. Mais en fait cela dépend vraiment de la room. Je viens de tester dans une autre, et là ton système de directions fonctionne mieux. L'idéal, ce serait de créer une variable dont la valeur définirait les chemins par défaut, et qu'on pourrait définir dans le script de chaque room, mais bon, je sais pas si c'est très facile à mettre en place...

Nouvel Edit encore une fois (important):
Finalement ta fonction plusoumoins pose un problème parce qu'elle utilise une division de variables. J'ai utilisé U8D_walk quand on parle à la secrétaire. Sauf que pour pas me prendre la tête dans les tests, j'ai placé Roger initialement aux coordonnées où il est censé se diriger avant de lui parler. Ce qui fait que xbis et ybis sont = à 0. Résultat : le jeu crash car il n'est pas en mesure de calculer la variable "plusoumoins", étant donné qu'il est impossible de diviser un nombre par zéro... Donc il faudrait trouver une autre formule pour "plusoumoins".

_________________
Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
Revenir en haut Aller en bas
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Billbis


Nombre de messages : 1346

Date d'inscription : 10/05/2012


[Module] IsoWalk (ex Use motsly the 8 Directions - U8D) Empty
MessageSujet: Re: [Module] IsoWalk (ex Use motsly the 8 Directions - U8D)   [Module] IsoWalk (ex Use motsly the 8 Directions - U8D) EmptyJeu 7 Mar 2013 - 20:43

valoulef a écrit:
Nouvel Edit encore une fois (important):
Finalement ta fonction plusoumoins pose un problème parce qu'elle utilise une division de variables. J'ai utilisé U8D_walk quand on parle à la secrétaire. Sauf que pour pas me prendre la tête dans les tests, j'ai placé Roger initialement aux coordonnées où il est censé se diriger avant de lui parler. Ce qui fait que xbis et ybis sont = à 0. Résultat : le jeu crash car il n'est pas en mesure de calculer la variable "plusoumoins", étant donné qu'il est impossible de diviser un nombre par zéro... Donc il faudrait trouver une autre formule pour "plusoumoins".
Oups, le vieux bug de la mort !
Merci du signalement. Tu es un sacré testeur !
Tu peux rajouter +1 en haut et en bas, ça devrai marcher langue
Code:
int PlusOuMoins = (this.x - x +1) / U8D_Abs(this.x - x +1);
Quoi qu'on peut avoir un personnage aux coordonnées négatives...
Je vais corriger ça pour la prochaine version.


valoulef a écrit:
Je créérai peut-être juste une commande de remplacement pour que ce soit moins galère à taper, mais encore avec l'autocomplétion ça va...
[Module] IsoWalk (ex Use motsly the 8 Directions - U8D) 1362688492-replace
grand sourire
Je met U8D_walk pour me mettre en accord avec les recommendations du forum officiel, mais les utilisateurs peuvent changer ça à volonté.

valoulef a écrit:
Dis-moi, y'a un truc que je pige pas dans ton code.

Tout à la fin :
Code:
if (u8d_HackWalk) {

C'est quoi cette condition sortie de nulle part ?? (EDIT : je viens de comprendre, elle est définie dans l'ash en fait...)
Billbis a écrit:
Par défaut, le module contient un hack qui lance la fonction player.U8D(mouse.x, mouse.y) lors d'un clic de souris en mode eModeWalkTo suivi d'un ClaimEvent(), mais c'est désactivable.

valoulef a écrit:
L'idéal, ce serait de créer une variable dont la valeur définirait les chemins par défaut, et qu'on pourrait définir dans le script de chaque room
Très bonne suggestion ! Un peu de boulot, mais c'est plus marrant comme ça !

_________________
Mon petit DevBlog
Revenir en haut Aller en bas
http://nothingaboutthedog.blogspot.fr/
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef


Nombre de messages : 1791

Age : 35

Localisation : Condate

Date d'inscription : 01/08/2011


[Module] IsoWalk (ex Use motsly the 8 Directions - U8D) Empty
MessageSujet: Re: [Module] IsoWalk (ex Use motsly the 8 Directions - U8D)   [Module] IsoWalk (ex Use motsly the 8 Directions - U8D) EmptyJeu 7 Mar 2013 - 20:57

Quelle motivation ! Faudrait pas trop laisser Nothing about the dog sur la touche à cause de moi quand même ! clin d'oeil

_________________
Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
Revenir en haut Aller en bas
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Billbis


Nombre de messages : 1346

Date d'inscription : 10/05/2012


[Module] IsoWalk (ex Use motsly the 8 Directions - U8D) Empty
MessageSujet: Re: [Module] IsoWalk (ex Use motsly the 8 Directions - U8D)   [Module] IsoWalk (ex Use motsly the 8 Directions - U8D) EmptyVen 8 Mar 2013 - 7:52

valoulef a écrit:
Faudrait pas trop laisser Nothing about the dog sur la touche à cause de moi
A vrai dire, c'est la traduction de ce fichier pour Kitai qui prend le plus de retard. Mais promis Kitai, je m'y remet vite !
clin d'oeil
A, et sinon ma partie de Drakensang n'avance pas non plus. Pourtant l'Aventurie à besoin de moi !

Sinon j'ai trouvé un autre bug débile :
lors d'un mouvement eNoBlock eAnywhere, la deuxième partie du mouvement ce fait en eWalkeableAreas...
Ce bug, en plus de l'infâme division par zéro (c'est pas ma faute, c'était l'astuce de Pidem), est corrigé dans la prochaine version qui arrive ce soir ou ce week-end.

Spoiler:

_________________
Mon petit DevBlog
Revenir en haut Aller en bas
http://nothingaboutthedog.blogspot.fr/
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
Kitai


Nombre de messages : 2907

Date d'inscription : 01/08/2006


[Module] IsoWalk (ex Use motsly the 8 Directions - U8D) Empty
MessageSujet: Re: [Module] IsoWalk (ex Use motsly the 8 Directions - U8D)   [Module] IsoWalk (ex Use motsly the 8 Directions - U8D) EmptyVen 8 Mar 2013 - 9:11

Billbis a écrit:
A vrai dire, c'est la traduction de ce fichier pour Kitai qui prend le plus de retard. Mais promis Kitai, je m'y remet vite !
clin d'oeil
T'en fais pas, je suis aussi censé bosser dessus, mais j'ai très peu de temps à moi en ce moment.

C'est d'ailleurs pourquoi je n'ai pas donné suite à ma recherche sur ce problème de déplacements en diagonale (ma piste, déjà partiellement implémentée à vrai dire, consistait à "simplement" remplacer le pathfinding par un algorithme A*, que tu as déjà évoqué).

En tout cas félicitations pour ce boulot, c'est une somme de réflexion, puis de mise en pratique de la théorie !
Et j'admire ton respect des consignes officielles pour les modules, je l'ai fait une fois et depuis j'ai laissé tomber :P

_________________
Ga is Ga
Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
Revenir en haut Aller en bas
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Billbis


Nombre de messages : 1346

Date d'inscription : 10/05/2012


[Module] IsoWalk (ex Use motsly the 8 Directions - U8D) Empty
MessageSujet: Re: [Module] IsoWalk (ex Use motsly the 8 Directions - U8D)   [Module] IsoWalk (ex Use motsly the 8 Directions - U8D) EmptyVen 8 Mar 2013 - 21:10

La nouvelle version du module est en ligne :
-corrections de deux bugs gênants.
-Recodage complet de la fonction U8D_walk pour rendre le code plus propre et moins inintelligible.
-Ajout d'un petit switch U8D_moduleON pour rendre le module optionnelle (quand U8D_moduleON = false, U8D_walk agit comme la fonction walk).
-Ajout de deux bools U8D_UseAlternateHorizontalPath et U8D_UseAlternateVerticalPath pour définir la priorité P1 / P2.

Le billet d'ouverture a été mis à jour. La mise à jour est rétrocompatible. N'hésitez pas a me dire ce que vous en pensez.
Je vais creuser le problème des WalkToPoint en mode interact, on peut peut être utiliser Hotspot.WalkToX et Hotspot.WalkToY ?

Kitai a écrit:
En tout cas félicitations pour ce boulot, c'est une somme de réflexion, puis de mise en pratique de la théorie !
Merci !
Kitai a écrit:
Et j'admire ton respect des consignes officielles pour les modules
A vrai dire je ne les respectent que moyennement, mais je trouve ça bien de mettre un préfixe devant les fonctions et variable d'un module public, alors je le fait.
Kitai a écrit:
ma piste consistait à "simplement" remplacer le pathfinding par un algorithme A*, que tu as déjà évoqué
J'aime bien le "simplement". grand sourire

_________________
Mon petit DevBlog


Dernière édition par Billbis le Sam 20 Avr 2013 - 11:42, édité 1 fois
Revenir en haut Aller en bas
http://nothingaboutthedog.blogspot.fr/
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef


Nombre de messages : 1791

Age : 35

Localisation : Condate

Date d'inscription : 01/08/2011


[Module] IsoWalk (ex Use motsly the 8 Directions - U8D) Empty
MessageSujet: Re: [Module] IsoWalk (ex Use motsly the 8 Directions - U8D)   [Module] IsoWalk (ex Use motsly the 8 Directions - U8D) EmptySam 9 Mar 2013 - 14:39

Billbis a écrit:

J'aime bien le "simplement". grand sourire

C'est drôle, j'avais commencé à écrire un post dans lequel je faisais exactement la même remarque, mais que je n'ai finalement pas posté.

Ca à l'air cool en tout cas cette deuxième version. L'ajout des deux "bools" (je sais pas ce que c'est un bool mais j'ai compris l'idée*) risque encore de tout changer dans la recherche de réalisme. Du bon boulot qui à terme, pourrait peut-être bien servir aux créations les plus ambitieuses ! Je t'encourage à le proposer sur la communauté anglosaxonne dès que tu en es pleinement satisfait, mais bon, je pense que tu n'as pas besoin de moi pour l'envisager.

Billbis a écrit:
Code:

export U8D_moduleON, U8D_UseAlternateHorizontalPath, U8D_UseAlternateVerticalPath; //You may want to mport these in your GlobalScript.ash

On peut y faire appel depuis les scripts des rooms ou pas ?


*Ah si c'est tout simplement une variable boléenne, je suis bête.

_________________
Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
Revenir en haut Aller en bas
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Billbis


Nombre de messages : 1346

Date d'inscription : 10/05/2012


[Module] IsoWalk (ex Use motsly the 8 Directions - U8D) Empty
MessageSujet: Re: [Module] IsoWalk (ex Use motsly the 8 Directions - U8D)   [Module] IsoWalk (ex Use motsly the 8 Directions - U8D) EmptySam 9 Mar 2013 - 15:44

valoulef a écrit:
On peut y faire appel depuis les scripts des rooms ou pas ?
Et bien, si tu les importes au préalable dans le GlobalScript.ash, oui !
grand sourire
Code:
//    You can import a few bool in your GlobalScript.ash to do some customizations.
//      import bool U8D_moduleON;
//      import bool U8D_UseAlternateHorizontalPath;
//      import bool U8D_UseAlternateVerticalPath;)
//    U8D_moduleON can be set to false to force U8D_walk to act as normal walk function.
//    (useful to set this module as optionnal).
//    U8D_UseAlternateHorizontalPath and U8D_UseAlternateVerticalPath will change waypoints priorities.
//    (see code comments for details).

D'ailleurs, merci pour avoir relevé la coquille, mport veux bien sur dire import.

_________________
Mon petit DevBlog
Revenir en haut Aller en bas
http://nothingaboutthedog.blogspot.fr/
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef


Nombre de messages : 1791

Age : 35

Localisation : Condate

Date d'inscription : 01/08/2011


[Module] IsoWalk (ex Use motsly the 8 Directions - U8D) Empty
MessageSujet: Re: [Module] IsoWalk (ex Use motsly the 8 Directions - U8D)   [Module] IsoWalk (ex Use motsly the 8 Directions - U8D) EmptyMer 5 Juin 2013 - 13:30

Donc comme je te l'ai déjà dit ton module est vraiment super. Par contre, je viens de remarquer que pour les micro déplacements (10 ou 20 pixels) ça fait bizarre de voir le perso changer de direction à la vitesse de la lumière. Admettons qu'il soit à la coordonnée 0*0 et qu'on veuille le déplacer à la coordonée 10*5, il va d'abord se déplacer de 5 pixels, puis tourner pour se déplacer de 5 autres pixels. Et tout ça en un pas. Donc s'il y avait une longueur minimale pour que le U8D_walk fasse effet, ça serait pas mal. Je pense que ça doit pas être trop compliqué à prévoir (enfin je pense) sauf si tu prends en compte le scaling où là ça serait un peu plus chiant.

J'ai aussi remarqué que dans les bords extrêmes des Walkable Area ou quand il y a des trous dans celle ci, il arrive que le perso fasse du sur-place ou presque sur un ou de pas, mais pour le coup je ne sais pas si ça vient du module, car il ne change pas de direction.

Sinon le module est parfois un peu chaud à gérer pour les déplacements programmés dans certaines zones à problèmes (pour garder une certaine fluidité), mais ça vaut le coup !

_________________
Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
Revenir en haut Aller en bas
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Billbis


Nombre de messages : 1346

Date d'inscription : 10/05/2012


[Module] IsoWalk (ex Use motsly the 8 Directions - U8D) Empty
MessageSujet: Re: [Module] IsoWalk (ex Use motsly the 8 Directions - U8D)   [Module] IsoWalk (ex Use motsly the 8 Directions - U8D) EmptyMer 5 Juin 2013 - 19:57

valoulef a écrit:
Donc s'il y avait une longueur minimale pour que le U8D_walk fasse effet, ça serait pas mal.
Bonne idée, et facile à implémenter : ça sera dans la prochaine version.
Citation :
mais pour le coup je ne sais pas si ça vient du module,
A priori, non. C'est juste qu'AGS essaye de finir les animations de marche avant de passer à la suite...

_________________
Mon petit DevBlog
Revenir en haut Aller en bas
http://nothingaboutthedog.blogspot.fr/
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef


Nombre de messages : 1791

Age : 35

Localisation : Condate

Date d'inscription : 01/08/2011


[Module] IsoWalk (ex Use motsly the 8 Directions - U8D) Empty
MessageSujet: Re: [Module] IsoWalk (ex Use motsly the 8 Directions - U8D)   [Module] IsoWalk (ex Use motsly the 8 Directions - U8D) EmptyLun 10 Juin 2013 - 17:35

J'ai remarqué un bug hyper bizarre et qui je pense ne peut venir que de l'U8D_Walk, dans la mesure ou le personnage fait une étape dans son déplacement.

Il se produit lorsqu'on se trouve au bord d'un angle d'une Walkable Area, et qu'on se déplace de l'autre côté. Pour être plus clair, voilà un schéma :

[Module] IsoWalk (ex Use motsly the 8 Directions - U8D) 607931walkable

1 : Position de base
2 : Point intermédiaire de passage
3 : Destination

Le plus bizarre, c'est que ce point intermédiaire bizarrement placé ne correspond pas aux critères habituels, vu que le personnage glisse sur tout le trajet (au moins dans un cas où ça s'est produit).

A priori, ça reste quand même rare car les conditions pour que le bug se produise sont assez spécifiques...

_________________
Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
Revenir en haut Aller en bas
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Billbis


Nombre de messages : 1346

Date d'inscription : 10/05/2012


[Module] IsoWalk (ex Use motsly the 8 Directions - U8D) Empty
MessageSujet: Re: [Module] IsoWalk (ex Use motsly the 8 Directions - U8D)   [Module] IsoWalk (ex Use motsly the 8 Directions - U8D) EmptyLun 10 Juin 2013 - 19:39

Étrange... vu de loin, ça ressemble à une erreur de signe (variable Signe du module) pour un chemin secondaire... Le plus simple serai que tu m’envoies la room en question en MP ou par mail (clic droit sur la room en question dans l'éditeur, create template from room) que je puisse essayer de reproduire (et corriger) l'éventuel bug.
Juste pour en savoir plus : y a t'il un obstacle sur le trajet (objet ou personnage solide) ? Le personnage va-t-il au point 3 une fois arrivée en 2, sans que tu ais re-cliqué ? Le déplacement est il déclenché par un clique en mode WalkTo, par un script ou par un clic sur un hotspot ?

_________________
Mon petit DevBlog
Revenir en haut Aller en bas
http://nothingaboutthedog.blogspot.fr/
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef


Nombre de messages : 1791

Age : 35

Localisation : Condate

Date d'inscription : 01/08/2011


[Module] IsoWalk (ex Use motsly the 8 Directions - U8D) Empty
MessageSujet: Re: [Module] IsoWalk (ex Use motsly the 8 Directions - U8D)   [Module] IsoWalk (ex Use motsly the 8 Directions - U8D) EmptyLun 10 Juin 2013 - 21:00

Billbis a écrit:
y a t'il un obstacle sur le trajet (objet ou personnage solide) ?


Non, en dehors de l'absence de walkable area.

Billbis a écrit:
Le personnage va-t-il au point 3 une fois arrivée en 2, sans que tu ais re-cliqué ?

Oui

Billbis a écrit:
Le déplacement est il déclenché par un clique en mode WalkTo, par un script ou par un clic sur un hotspot ?

Il est déclenché par un clic en mode WalkTo.



Ok je verrais à t'envoyer ça, mais comme je le dis c'est très spécifique donc pas idéal à reproduire. Cela dit il y a une situation où c'est assez simple, je te donnerai les coordonnées au pire.

_________________
Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
Revenir en haut Aller en bas
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Billbis


Nombre de messages : 1346

Date d'inscription : 10/05/2012


[Module] IsoWalk (ex Use motsly the 8 Directions - U8D) Empty
MessageSujet: Re: [Module] IsoWalk (ex Use motsly the 8 Directions - U8D)   [Module] IsoWalk (ex Use motsly the 8 Directions - U8D) EmptyMer 12 Juin 2013 - 20:48

valoulef a écrit:
Ok je verrais à t'envoyer ça.


J'attends toujours. ^^
En fait, ça m'aiderai pas mal pour comprendre et corriger le bug (ça m’économisera surtout pas mal de cachets de paracétamol).

Sinon, au passage : *NOUVELLE VERSION*
Beta 0.3
Pas de grand changement, juste le rajout de la distance minimum pour déclencher le module (par défaut, 20 pixels, customisable via U8D_MinDistance (ligne 7 du .asc).
Pensez à dé-commenter les export et import pour y avoir accès depuis tout les scripts.
1er post mis à jour en conséquence.

_________________
Mon petit DevBlog
Revenir en haut Aller en bas
http://nothingaboutthedog.blogspot.fr/
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef


Nombre de messages : 1791

Age : 35

Localisation : Condate

Date d'inscription : 01/08/2011


[Module] IsoWalk (ex Use motsly the 8 Directions - U8D) Empty
MessageSujet: Re: [Module] IsoWalk (ex Use motsly the 8 Directions - U8D)   [Module] IsoWalk (ex Use motsly the 8 Directions - U8D) EmptyMer 12 Juin 2013 - 22:02

Oui c'est vrai, je n'y suis que peu retourné depuis, j'essaye d'y penser demain.

Je mettrai aussi à jour ma version sourire

_________________
Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
Revenir en haut Aller en bas
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Billbis


Nombre de messages : 1346

Date d'inscription : 10/05/2012


[Module] IsoWalk (ex Use motsly the 8 Directions - U8D) Empty
MessageSujet: Re: [Module] IsoWalk (ex Use motsly the 8 Directions - U8D)   [Module] IsoWalk (ex Use motsly the 8 Directions - U8D) EmptyJeu 13 Juin 2013 - 19:58

Bon, après une petite heure d'investigation :
-J'ai reproduis le bug rencontré par valoulef dans sa room, et à plusieurs reprise, de plusieurs endroits différents.
-Je l'ai aussi redéclenché dans un autre projet, avec une autre room (mauvais signe, ça veux dire que c'est bien la faute de mon module, pas celle de valoulef).
-C'est beaucoup plus fréquent que ce que je pensai, beaucoup trop pour être laissé dans l'état.
-A priori, le bug ne se déclenche que lorsque (xWP1, yWP1) n'est pas dans une walkeable area.

Ce que je ne comprend pas, c'est que ça déclenche un mouvement en trois étapes (!), et que ce n'est à priori pas un bête problème de calcul.
J'ai pensé que c'était un problème d'accolades mal fermés, mais j'ai tout revérifier et mes accolades semblent ok.
Vu la position totalement farfelue du point de passage buggé, j'ai cherché des inversions (y,x) au lieu de (x,y), mais je n'en ai pas trouvé.
Je ne vois pas d'où ça peut venir. pleure
Kitai, à l'aide ! pleure

_________________
Mon petit DevBlog
Revenir en haut Aller en bas
http://nothingaboutthedog.blogspot.fr/
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
Kitai


Nombre de messages : 2907

Date d'inscription : 01/08/2006


[Module] IsoWalk (ex Use motsly the 8 Directions - U8D) Empty
MessageSujet: Re: [Module] IsoWalk (ex Use motsly the 8 Directions - U8D)   [Module] IsoWalk (ex Use motsly the 8 Directions - U8D) EmptyJeu 13 Juin 2013 - 21:18

Billbis a écrit:
Kitai, à l'aide ! pleure

Je suis flatté par tant de considération, mais je ne sais pas si je serai d'une grande aide.
Pour le coup j'ai jeté un coup d’œil plus attentif à ton code. Voilà ce que je peux dire :

  1. Tout d'abord, truc tout bête, mais quand tu vérifies s'il y a une zone de déplacement possible à chacun des deux points intermédiaires en lignes 72 et 76, tu oublies de prendre en compte le décalage de l'écran (GetWalkableAreaAt prend les coordonnées de l'écran, pas de la pièce).
    Toutefois, à moins que le problème ne survienne que pour les pièces à défilement, je doute que ce comportement vienne de là.
  2. Ma seule piste pour le moment est que la seconde commande Walk d'affilée (lignes 86 et 97), bien que ne prenant visiblement effet que lorsque le personnage a atteint le point de destination intermédiaire, est peut-être interprétée in situ : le calcul du chemin à parcourir pour le personnage serait donc effectué depuis sa position d'origine, et c'est ce chemin qui serait mis "à la file" après le chemin jusqu'au point intermédiaire. Dès lors, le comportement pourrait bien être assez chaotique.
    Malheureusement l'explication de l'exécution des fonctions bloquantes est un peu obscure, et ma traduction n'arrange clairement pas les choses.

Voilà tout ce à quoi je pense pour le moment...

Regarde alors si le problème persiste dans les mêmes conditions si tu passes en eNoBlock : puisque dans ce cas tu gères le point intermédiaire dans repeatedly_execute, si mon explication vise juste, le problème ne devrait pas se manifester.

_________________
Ga is Ga
Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
Revenir en haut Aller en bas
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef


Nombre de messages : 1791

Age : 35

Localisation : Condate

Date d'inscription : 01/08/2011


[Module] IsoWalk (ex Use motsly the 8 Directions - U8D) Empty
MessageSujet: Re: [Module] IsoWalk (ex Use motsly the 8 Directions - U8D)   [Module] IsoWalk (ex Use motsly the 8 Directions - U8D) EmptyJeu 13 Juin 2013 - 22:41

Billbis a écrit:

-J'ai reproduis le bug rencontré par valoulef dans sa room,

[...]

Je ne vois pas d'où ça peut venir. pleure
Kitai, à l'aide ! pleure




Valoulef, créateur de dépression nerveuse depuis près de 25 ans clin d'oeil

_________________
Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
Revenir en haut Aller en bas
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Billbis


Nombre de messages : 1346

Date d'inscription : 10/05/2012


[Module] IsoWalk (ex Use motsly the 8 Directions - U8D) Empty
MessageSujet: Re: [Module] IsoWalk (ex Use motsly the 8 Directions - U8D)   [Module] IsoWalk (ex Use motsly the 8 Directions - U8D) EmptyVen 14 Juin 2013 - 6:49

Merci Kitai d'avoir jeté un coup d'oeil. sourire

Kitai a écrit:
tu oublies de prendre en compte le décalage de l'écran (GetWalkableAreaAt prend les coordonnées de l'écran, pas de la pièce).
Bien vu ! Je vais corriger ça. En l’occurrence, les rooms où le bug en question apparait sont non scrollables. (attention, je ne dit pas que le bug n'apparait pas dans les rooms scrollablse, j'en sais rien).

Kitai a écrit:
Reguarde alors si le problème persiste dans les mêmes conditions si tu passes en eNoBlock
Bin, pour l'instant le bug n'est apparu que en eNoBlock, vu que déclenché par des clics de souris. Mais je vais essayer de le reproduire en mode eBlock, pour voir.

_________________
Mon petit DevBlog
Revenir en haut Aller en bas
http://nothingaboutthedog.blogspot.fr/
Contenu sponsorisé





[Module] IsoWalk (ex Use motsly the 8 Directions - U8D) Empty
MessageSujet: Re: [Module] IsoWalk (ex Use motsly the 8 Directions - U8D)   [Module] IsoWalk (ex Use motsly the 8 Directions - U8D) Empty

Revenir en haut Aller en bas
 
[Module] IsoWalk (ex Use motsly the 8 Directions - U8D)
Revenir en haut 
Page 1 sur 3Aller à la page : 1, 2, 3  Suivant
 Sujets similaires
-
» Plateau (module)
» [Module] ShowInteractiveAreas
» Module InfoBulles
» Module PDFFile
» Razorblade 3D 1.0, module 3D

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Adventure Games Studio fr :: CREATION DE JEUX :: Modules et plugins-
Sauter vers: