modable ou pas modable

Répondre
Partager Rechercher
Bonjour à tous

Je me lance dans la fabrication d'un tout petit module pour jouer des parties multi de type "action" à 4 ou 8 joueurs.
J'ai déja moddé pour d'autres jeux, et ce que j'aime c'est modder, pas forcément jouer avec le mod ensuite. Mais quand même je garde à l'esprit qu'il faut que ça soit jouable à la fin.

Donc voilà j'ai besoin d'un peu d'aide pour m'aider à cerner ce qui est faisable et ce qui ne l'est pas. Je ne vous demande pas de me dire comment ça se fait (bien que j'apprécierais si vous pouvez), mais juste de m'aider à ne pas m'acharner sur des trucs impossibles.


- Une de mes premières préoccupation c'est de limiter l'usage de la caméra, afin d'éviter qu'un joueur puisse utiliser la cam pour voir dans les pièces adjacentes sans y entrer (le jeu perdrait beaucoup d'intérêt). J'ai décortiqué le prélude de NWN et il y a un perso qui active un script pour mettre la caméra dans un mod ou un autre. C'est bien mais je voudrais en plus que le joueur ne puisse plus changer le mod de caméra une fois que c'est appliqué.
- Et si on pouvait aussi régler la distance maximale du dézoom ce serait royal.


J'aurais d'autres questions plus tard.
J'espère pouvoir vous montrer mon p'tit module en version ultra-béta d'ici quelques semaines.
Pour le champ de vision y a des outils plus simples que de vérouiller la caméra il me semble, peut-être en augmentant l'épaisseur du brouillard pour que les joueurs voient moins loin, ça a l'avantage de ne demander aucun script. Sinon en ce qui concerne le verouillage caméra si c'est la solution que tu choisis tu as une fonction pour ça :
SetCameraMode(oPlayer, CAMERA_MODE_CHASE_CAMERA)
pour verouiller la distance à laquelle est la caméra à l'instant T (ça implique que tu forces un zoom avant de verouiller) :
LockCameraDistance(oPlayer, TRUE)
Et je pense (pas sur du tout) que c'est cette fonction pour forcer la distance voulue :
SetCameraHeight(oPlayer, 0.0) 0.0 étant la distance à laquelle tu veux mettre la caméra.

J'ai pas testé, mais si tu galères j'peux y jeter un oeil à l'occaz
Wouha merci beaucoup.

Ce jeu est vraiment formidable. Les possibilités offertes aux modeurs sont énormes. Je débute à peine et je prends conscience de la richesse des fonctions, des musiques et des éclairages. C'est un régal.

Quand je pense que le jeu a 10 ans

Citation :
J'ai pas testé, mais si tu galères j'peux y jeter un oeil à l'occaz
Pour l'instant je vais voir avec ça. Je pense que je dois pouvoir me débrouiller mais je te dirais si j'ai un problème. Merci ENORMEMENT.
Bon voilà, après un peu d'apprentissage, où j'en suis arrivé :

J'ai écrit ce script, qui fonctionne, mais ne fait pas exactement ce que je voudrais.

Code:
object oPlayer = GetPCSpeaker();
void main()
{
    SetCameraMode(oPlayer, 3);

    SetCameraHeight(oPlayer, 0.0);

    LockCameraDistance(oPlayer, TRUE);
}
J'explique :
SetCameraMode demande un chiffre, 1= camera "Top Down" (une caméra verticale), 2= camera poursuite, et 3= camera libre. C'est la troisième qui me plait.

SetCameraHeight ne fait pas ce que je voulais. Ca règle la hauteur de la camera au dessus de la tête du perso, mais pas le dezoom donc ça n'agrandit pas l'angle de vue. Si on met un grand chiffre, ça met la cam si haute qu'en inclinant un peu vers l'horizontale on ne voit plus les pieds du perso.

LockCameraDistance fonctionne bien comme on le pensait. Ca bloque le zoom/dezoom à la valeur où il se trouve avant le lancement du script.

Donc il me manque la possibilité d'amener le zoom à la valeur que je veux, pour ensuite le bloquer.
Des idées ?
Bon j'ai jeté un oeil j'te propose ça :
Donc tu mets le premier script dans le OnEnter d'un déclencheur générique :
void main()
{
object oPC = GetEnteringObject();
ExecuteScript("sc_cameralocked", oPC);
}
et ensuite tu créées simplement un second script avec pour non "sc_cameralocked" qui contient ceci :

void main()
{
object oPC = OBJECT_SELF;
float fDir = DIRECTION_WEST;
float fDist = 15.0;
float fPitch = 60.0;

SetCameraFacing(DIRECTION_WEST,fDist,fPitch, CAMERA_TRANSITION_TYPE_SNAP);
LockCameraDistance(oPC, TRUE);
LockCameraPitch(oPC, TRUE);
}


Voilà, pour les explications :
--- fDir = la direction dans la quelle tu veux faire regarder le joueur, donc en fonction de ta zone DIRECTION_NORTH, DIRECTION_SOUTH, DIRECTION_EAST, DIRECTION_WEST.
--- fDist, fPitch : Deux valeurs sur lesquelles tu peux jouer pour regler le champ de vision que tu veux, (fPitch c'est l'angle de la camera, valeur entre 1 et 89, sachant que 1 c'est horizontal, et 89 c'est vertical, fDist : c'est la distance du point d'horizon va-t-on dire, si la distance est courte tes joueurs vont être bloqués à regarder leurs pieds en gros.)
--- LockCameraDistance : Tu as compris ce que ça faisait je crois. :-)
--- LockCameraPitch : Ca empèche de jouer avec l'angle de la caméra.

Donc ce script dans l'état, règle & verouille un angle vertical de caméra, et un niveau de zoom, les joueurs pourront néanmoins faire tourner la caméra à 360° autour d'eux horizontalement. Si tu veux leur enlever ça tu ajoutes un LockCameraDirection(oPC, TRUE); Mais je crains que ça les rende épileptiques
Parce que dans les fonctions telles que SetCameraFacing & LockCameraPitch, etc, y a aucun moment ou tu peux définir la cible, donc le script va pas marcher, tandis que si tu executes le script sur le joueur, la cible du script sera par défaut ce joueur, et donc le script marche.

Je sais pas si j'me suis bien expliqué, mais en gros y a pas d'autre choix, à ma connaissance du moins.
Oui ok j'ai compris.



Voilà deux autres trucs que j'aimerais faire et je me heurte à quelques difficultés :

- J'aurais aimé que les taches de sang et autres projections jaunâtres/verdâtres ainsi que les noircissures dues aux explosions restent visibles sur le sol et les mûrs pendant quelques minutes. Mais je ne trouve rien pour faire ça.

- J'aurais aimé que les corps des personnages-joueurs restent au sol et soient détroussables pendant quelques minutes. Y aurait-il un script déja tout fait dans le jeu qui permet ça ? (j'ai l'impression que j'aurais du mal à le faire moi-même)
Pour ce qui est des taches de sang, je pense pas que ce soit possible, à la limite tu peux spawner un plaçable qui est une tache de sang, à l'endroit ou un type est mort par exemple, et le détruire plus tard, mais ça risque de pas faire très propre, s'ils y en a qui s'accumulent, ou s'ils pop pas dans le bon sens, ça c'est faisable, mais je sais pas si je donnerais là dedans :P Peut-être qu'en modifiant le niveau de violence, tu arriverais à un truc plus "réaliste"?

Pour ce qui est des corps, je sais pas trop si c'est possible, déjà faudrait retirer le pop-up du respawn, ou du moins le retarder, sinon le joueur en question peut respawn immédiatement, ça je pense que c'est possible & facile. Ensuite, pour le reste, ça me semble compliqué, mais faisable via un placeable, type objet invisible, qui spawnerait sur le cadavre du joueur, avec le nom du joueur, et un inventaire, qui contiendrait les items du joueur. Un truc comme ça t'intéresserait?
Répondre

Connectés sur ce fil

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