[Custom Content] Créer un pont-levis

Répondre
Partager Rechercher
Comme on a commencé à en parler, je lance ce petit topic qui mettra certainement du temps pour arriver à terme... s'il y parvient.

Donc, un pont-levis dans nwn2. Sérions les problèmes

1/ Le modèle : bon, rien de trop méchant là

En gros, un plan en planches de bois, des chaines, une roue et la structure. Juste prévoir que ce soit adaptable partout

2/ Les animations : ça se complique bien fort

En effet, il faut pouvoir ouvrir et fermer, en ayant des états 'idle' pour les deux.

Dans ce cas là, il est clair qu'il faut creuser la fonction PlayCustomAnimation() et pas la bonne vieille PlayAnimation() non ? Ça seul Ariok peut le dire je crois ?

En tout cas, ça signifie d'avoir :

- Pont fermé
- Pont descendant
- Pont ouvert
- Pont descendant

3/ Le script : ça devient complexe... ou pas

Donc là, l'idée serait de placer par défaut un objet walkmesh helper à l'endroit où le pont ouvert doit permettre la marche.

Un placeable "blocker" viendrait bloquer la marche et la vue lorsque le pont est fermé.

Le placeable roue associé lancerait l'animation du pont ( descente / levée ) et sa propre animation ( rotation ) ainsi que l'apparion / disparition du placeable blocker.

Qu'en dites-vous ?
Je ne vois pas ce que vient faire le WM dans les scripts

Le WM inclus au modèle...

Un plaçable qui bloque la vue au niveau du pont relevé et un qui bloque le passage au WM de chaque coté du pont (ou un seul bien long). Le tout activé par script (à voir si l'activation des collisions dynamiques dans le patch 1.13 fonctionnera, car c'est un peu basé dessus)... sinon, j'avais pensé à une créature invisible (pas le sort, juste transparente) et paralysée (pour qu'elle ne se déplace pas même si un PJ la bouscule).

Et puis un beau modèle bien conçu et avec des mouvements bien réalisés, c'est pas si facile...
J'en ai 2 jolis (pas finis, sinon ils seraient sur le Vault) sur mon disque dur

Edit : suite à une petite recherche, j'ai retrouvé la version campagnarde (oui, je sais, il n'y a pas de texture ... enfin pour être exact, il n'y a plus)
Miniatures attachées
Cliquez sur l'image pour la voir en taille réelle

Nom : Pont_levis_rondins.jpg
Taille : 807x619
Poids : 51,8 Ko
ID : 44736  
Pas mal l'idée en soi mais je constate, comme ça, deux problêmes :

- Si une créature ou un PJ se trouve sur le pont-levis, impossible de le relever (ce qui suppose d'utiliser un trigger pour son ouverture/fermeture - c'est le plus simple).

- Le calcul de zone avec le pont-levis en position fermé/ouvert qui risque de pas donner la meme chose. Si on calcul pont ouvert, le passage sera calculé, mais que se passera-t-il une fois qu'on ouvrira le pont (et inversement).
Citation :
Publié par Sonia Blade
Si une créature ou un PJ se trouve sur le pont-levis, impossible de le relever (ce qui suppose d'utiliser un trigger pour son ouverture/fermeture - c'est le plus simple).
En effet, cela pose un problème, mais je pense qu'il est loin d'être insoluble et cela sans passer par un trigger pour l'ouverture/fermeture.

Citation :
Publié par Sonia Blade
Le calcul de zone avec le pont-levis en position fermé/ouvert qui risque de pas donner la même chose. Si on calcul pont ouvert, le passage sera calculé, mais que se passera-t-il une fois qu'on ouvrira le pont (et inversement).
Non, le WM est indépendant de l'ouverture/fermeture, c'est pour cette raison qu'il faut un plaçable dont les collisions dynamiques seront activées lors de la première phase du levage du tablier du pont.
Cela empêchera que d'autres personnages puissent emprunter le pont une fois celui-ci en mouvement... tout en laissant le temps à un personnage de franchir le pont s'il est déjà dessus : les collisions étant des plans orientés, le personnage devrait pouvoir finir son franchissement.
Après, il est toujours possible de voir si des créatures (au sens large) sont sur le tablier (trigger ?) et de les téléporter au pied du pont, comme si elles avaient glissé.

C'est à ce niveau que j'en étais lorsque j'ai dû arrêter ce joli projet
@ Sonia : très juste, il faudrai un script qui vérifie si une créature ou un placeable se trouve sur le pont avant de le relever les jump du bon côté, donc ajout d'un waypoint.

Pour ce qui est du calcul de zone, je pense que tu parles du walkmesh non ?

@Argyl :
fais péter les fichiers ;P

Pour le walkmesh intégré, disons que j'aimerai autant laisser un maximum de marge aux créateurs de contenu... et leur permettre de maîtriser réellement, quitte à leur demander (un peu) plus de travail.

Je pense que gérer un seul placeable bloquant le passage et la vue serait plus adapté. Si en plus, on peut gérer les collisions avec le nouveau patch, tant mieux.

Pour ce qui est du (des) modèles, disons qu'on peut monter un peu le compte de poly, et que je pense pouvoir faire le texturage sans souci. Si tu veux que je le fasse sur tes modèles, no pb. Pour les mouvements, on est sur quelque chose de plus simple qu'une créature quand même, mais je ne dis pas que ce soit simple.

Ce qui m'inquiète le plus, c'est PlayCustomAnimation() en fait.
Citation :
Publié par Laban
Pour le walkmesh intégré, disons que j'aimerai autant laisser un maximum de marge aux créateurs de contenu... et leur permettre de maîtriser réellement, quitte à leur demander (un peu) plus de travail.
Et bien, vu que le modèle est animé et que le WM suivra toute modification isométrique, je ne sens pas la nécessité d'augmenter la charge de travail des mappeurs

Citation :
Publié par Laban
Je pense que gérer un seul placeable bloquant le passage et la vue serait plus adapté. Si en plus, on peut gérer les collisions avec le nouveau patch, tant mieux.
Ce n'est possible que si les collisions C2 et C3 sont activables indépendamment l'une de l'autre ; de mémoire, C2 pour le passage et C3 pour la vue.

Citation :
Publié par Laban
Pour ce qui est du (des) modèles, disons qu'on peut monter un peu le compte de poly, et que je pense pouvoir faire le texturage sans souci. Si tu veux que je le fasse sur tes modèles, no pb. Pour les mouvements, on est sur quelque chose de plus simple qu'une créature quand même, mais je ne dis pas que ce soit simple.
C'est bien beau, mais c'est quoi le budget Là, le modèle n'a pas de texture et aucun groupe de smoothing n'est établi, d'où le coté très tout-en-arrête. Il fait déjà 1176 sans 2-3 éléments encore manquant.

Citation :
Publié par Laban
Ce qui m'inquiète le plus, c'est PlayCustomAnimation() en fait.
En fait, je ne m'en inquiéterais qu'à la fin
PlayCustomAnimation() : Attendre la fin, pourquoi pas, mais si ça ne marchait pas, le travail ne serait-il pas perdu ?

Polys : Je sais que les docks de neverwinter montent à 20 000. Considérant que c'est un objet qui ne sera présent qu'une fois par map, et qui est un objet important, une moyenne de 5 000 (fourchette 2000 - 10 000) me semble ok.

Walkmesh indépendant : tu as sans doute raison.

Collisions : Il faudrait que je vérifie les C2 / C3 avec le RWS et kivinen alors ? À dire vrai, le coup de spawner un placeable qui bloque le passage et la vue est une idée de Mr kivinen à la base.
@Ariok : Merci pour l'info, même s'il fallait s'en douter d'après tes récits

@Laban : Un travail n'est jamais perdu, il nourrit déjà son créateur et puis comme pour l'activation/désactivation des collisions, il faut croire qu'on arrivera à quelque chose
Je suis un indécrottable optimiste
Pour le plaçable qui bloque la vue et le passage, ça coulait de source suite au blog de Rob (je ne sais pas si les plaçables pouvaient être spawnés avec les collisions dynamiques)
Citation :
A SetCollision(object oTarget, int bCollision) function has been made available. This will allow builders and DMs to turn the collision of a creature or placeable object on or off dynamically. This function is only useful on creatures/players/placeables that already have collision and will set collision to NONE if called on an object that never had collision in the first place.
En relisant ceci, je n'ai pas l'impression que les deux types de collisions puissent être activées indépendamment
Il faudra donc au pire :
  • un plaçable pour bloquer le passage (C2 activée lors de la remontée du tablier)
  • un plaçable pour bloquer la vue et surtout la ligne de tir (activation C3) à mi-chemin de la fermeture (juste pour être chiant au niveau réalisme )
ou un peu moins de réalisme :
un plaçable qui bouche la ligne de tir et le passage dès les premiers instants de la fermeture (mais bon, c'est tout de suite moins bon lors de l'ouverture).
@Ariok : oui mais comment faire précisément ? On reprend une porte, et les noms d'animations associés ? En fait un pont-levis, c'est une grosse porte.

@Argyl : Mais il me semblait que les placeables qui font ça, bloquer le chemin et la vue, existent déjà non ? Collision ball par exemple, c'est quoi ?

Dans MotB, il me semble que c'est utilisé, sur le plan de l'Ombre, le tas de rochers qu'il faut basher ?
Si vous definissez le pont levis comme une porte, que vous utilisiez les noms d animation des portes vous ne devriez pas avoir de probleme de colision. Vu que les etats des portes ( ouverte / fermée), les prennent en compte
@Ariok : J'y avais pensé, mais lorsqu'on regarde les vidéos sur les portes, il n'y a guère que 2 états et pas d'animation pointue, c'est du top basique. Une rotation simple avec un axe vertical en principe.
Par contre, il me vient une idée, mettre un HP de porte sur le modèle, faire une animation de porte qui soit compatible avec le mouvement du tablier, et une fois vérifié et réglé la synchronisation, rendre la porte invisible.
  1. La tablier empêche de voir physiquement
  2. La porte invisible bloque la ligne de tir
Ça va être une magnifique usine à gaz, mais ça pourrait être du plus bel effet.

@Laban : Pour CollisionBall, je ne sais pas, je ne l'ai jamais utilisé (faut dire que je ne mape pas, j'ai vraiment pas le temps ).
Et j'avoue à mon grand dam, je n'ai pas encore eu le temps de faire MotB... et oui, j'ai honte
Alors j'ai eu une réponse de kivinen, et ça me semble bien résoudre le problème. Je colle en anglais, commentaire ensuite.

Citation :
kivinen: Alban: yes, just take collision box, duplicate the line in the placeables.2da and change the BlockLOS from 0 to 1 for that new line. Then create placeable blueprint for that object and when you start closing bridge immediately place that there and then kill throw all players inside the box out from there. Then when you open the bridge remove the box when the bridge is completely open.
kivinen: note, that people can get stuck inside the collsion ball/box.
kivinen: i.e. after you create it, you want to see if there is someone in there, and jump him out from there, i.e he falls down when the bridge closes to the other side.
kivinen: if you create big collsion box so that PC is inside that box, he cannot get out as regardless which way he goes he gets blocked by the box. I.e. box is not solid, it has just walls that will block movement.
kivinen: people could run in after you check but before you create... better check it some time after you have created the box, as it would also be logical that you would be thrown to the other side of bridge only after the bridge is raised up enough...
kivinen: I created 10 different collsion balls for our wards, and just created the one with correct size...
kivinen: [When the collision box would be added] depends how quickly the bridge is animated.
kivinen: [The SetSize() function ] was not there before, now I would most likely use the SetScale, or perhaps not, as I would like to create it with correct size from the beginning.
kivinen: default collision ball has BlockLOS set to 0, so it will not block LoS, but will block movement.
kivinen: so what I did I duplicated the line in the placeable.2da and changed the BlockLOS for that new line to 1, and used that appearance for my blueprints.
kivinen: you most likely want to scale the collision box object with same scaling as the bridge, so you properly block the whole bridge.
kivinen: i.e. make instructions so that when people place the bridge, they also take the collision box and scale it accordinly and make blueprint of it.
kivinen: For best effect you could create collision box yourself and make it so it has exactly same dimensions as the bridge.
kivinen: making the collision box is simple, as I think it is just box made out of 12 triangles.
kivinen: i.e. import the plc_mc_collbox to 3ds max, and scale it to match the dimensions of the walkable bridge part of the bridge, and make sure their coordinates are same and then export it back.
Donc, voilà la technique selon Kivinen. Il s'en est servi sur Cerea2 pour créer des "wards", sorts de protection / barrière circulaires. En gros un cube invisible autour du lanceur de sorts, ceux qui sont dedans ne peuvent en sortir, et il a bloqué le "Line of Sight' ou Champ de vision via les 2DA en créant les objets.

Sa solution consiste à créer la collision box rectangulaire pour qu'elle ait les mêmes coordonnées et dimensions que le pont-levis. De sorte que le script récupère la taille du pont et redimensionne la box en fonction.

De plus il faut vérifier quand la box est ajoutée qu'il n'y a personne dedans, sinon il sera enfermé. Donc, jumper ce qui est dedans vers un waypoint.

Voilà, et donc a priori, ça résoud théoriquement le problème des scripts.

Mais du coup, j'en reste à l'idée que les animations sont ce qu'il y a de plus complexe.
C'est pas pour faire de la nécro, c'est juste pour dire que le projet et en cours (toujours...)


2-3 trucs un peu urgent à finir pour le module pour lequel je travaille et puis je m'auto-inflige un stage d'amélioration 3D à base de pieds de bouc


Toutefois l'un dans l'autre, ça devrait être en partie cuit dans pas trop long (Laban, j'ai noté ta proposition d'amélioration de texture si la mienne est vraiment pas top ou trop merdique ... même si tu sembles un peu pris par la conversion).
Ça c'est une bonne nouvelle alors

Entre temps, j'en ai parlé à Hellfire|RWS et il m'a dit qu'ils avaient intégré un pont-levis, mais fermé dans une tour du TowerPack. Donc la partie modèle étant faite, j'ai demandé à GrinningFool s'il pouvait faire les scripts à condition d'avoir les fichiers MDB etc et il est d'accord.

Donc j'ai demandé à Ariok s'il pouvait se charger de la partie 3DS mais pour le coup, c'est quand même surtout lui qui est pris par la conversion. Donc si tu voulais t'intégrer dans le projet en reprenant / produisant les modèles (pont-levis avec collision et walkmesh + collision box adaptée ) et les animations, ça pourrait se faire en quelques jours.

La discussion en anglais est ici : http://www.robinsonworkshop.com/phpB...opic.php?t=488
(pas eu des masses de réponses encore )
Citation :
Publié par Laban
Ça c'est une bonne nouvelle alors

Entre temps, j'en ai parlé à Hellfire|RWS et il m'a dit qu'ils avaient intégré un pont-levis, mais fermé dans une tour du TowerPack. Donc la partie modèle étant faite, j'ai demandé à GrinningFool s'il pouvait faire les scripts à condition d'avoir les fichiers MDB etc et il est d'accord.

Donc j'ai demandé à Ariok s'il pouvait se charger de la partie 3DS mais pour le coup, c'est quand même surtout lui qui est pris par la conversion. Donc si tu voulais t'intégrer dans le projet en reprenant / produisant les modèles (pont-levis avec collision et walkmesh + collision box adaptée ) et les animations, ça pourrait se faire en quelques jours.

La discussion en anglais est ici : http://www.robinsonworkshop.com/phpB...opic.php?t=488
(pas eu des masses de réponses encore )
Si argyl peut prendre ce projet, ca m arrangerait. La je suis sur les conversions
Ça fait un moment que j'ai fini le pont-levis dont l'image est dans un post au dessus, mais voilà, il y a un hic et un de taille : Aucune de mes parties animées n'apparaît Pourtant, on voit le squelette.

J'ai beau trituré le bistruc dans tous les sens (chaîne de caractères trop longue (pas ça), texture non carré bien que multiple de 2 (pas ça non plus), trop de clé d'animation (pas ça non plus), dll vérolées ou corrompues (pas ça non plus) et finalement en faisant un plan large je suis tombé là dessus (cf image).

J'ai un deuxième squelette qui apparaît en bord de carte... après vérif c'est pas ça qui chouite, ça le fait avec tous les plaçables animés. (je laisse tout de même l'image afin que tout le monde voit de qui il retourne).
Miniatures attachées
Cliquez sur l'image pour la voir en taille réelle

Nom : bugpasdrole.jpg
Taille : 945x302
Poids : 120,6 Ko
ID : 47766  
Ça avance, quelques problèmes avec un script à la con
Code:
void main()
{
    object oDBridge = GetObjectByTag("PLC_BR_ADBRIDGE010");
    PlayAnimation(ANIMATION_PLC_OPENIDLE,1.0,0.0);
}
Il me renvoie :
Citation :
ERREUR : VARIABLE DEFINED WITHOUT TYPE
pour la ligne du PlayAnimation

Pour finir, des vignettes :
Miniatures attachées
Cliquez sur l'image pour la voir en taille réelle

Nom : Pont-levis01.jpg
Taille : 707x680
Poids : 119,2 Ko
ID : 48148   Cliquez sur l'image pour la voir en taille réelle

Nom : Pont-levis02.jpg
Taille : 608x475
Poids : 135,6 Ko
ID : 48149  
Pour le script, c'est tout simplement que la constante ANIMATION_PLC_OPENIDLE ne correspond à rien.

Elle n'est pas dans les constantes de l'éditeur de script en tout cas, j'ai regardé. Donc cherche une constante d'animation valable, comme ANIMATION_PLACEABLE_OPEN peut être ?

Sinon tu as toutes les animations qui sont dans les 2das, nwn2_animstan pour les animations hors combat et nwn2_animcom pour les animations en combat. Pour les lancer il faut utiliser PlayCustomAnimation et le string à mettre c'est celui qui est indiqué dans la colonne ANIMATION du 2da.
Je sais pas d'où tu lance ce script mais, soit il y a une partie en trop(dans le cas ou le script est exécuté sur le plaçable, je vois pas trop pourquoi tu vas le rechercher, soit il ne marchera pas car tu n'assignes pas le fait de jouer l'animation au plaçable.
Bah, PlayAnimation n'a pas d'argument (c'est pas si c'est le terme exact) qui précise l'objet, j'ai donc misé sur le fait que si on appelle l'objet avant il appliquera l'action sur celui-ci.

D'après le descriptif de la fonction, c'est : PlayAnimation(animation, durée_d_exécution, répétition_au_bout_de).
C'est en tout cas ce que j'en ai compris
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés