Script mover

Un article de Wiki-Mapping.

Version du 4 mai 2008 à 12:04 par 82.249.231.111 (Discuter)
(diff) ← Version précédente | view current revision (diff) | Version suivante → (diff)
Jump to: navigation, search

Sommaire

[modifier] Description

Les scriptmover servent à faire bouger un objet dans le jeu.

Comme exemple, nous réaliserons une plateforme franchissant un obstacle infranchissable pour un joueur qui effectura une rotation à 180° lors du deplacement. Elle sera activé par un bouton situé sur un bord du gouffre et elle effectuera un aller-retour.

Voila l'image du résultat :

Image:Scriptmover_vue_generale.jpg


Tout d'abord il nous faut dessiner le contexte, c'est à dire la pièce qui contiendra la plateforme. Reportez vous au tuto sur la première pièce, et n'oubliez pas le script_multiplayer.

Image:Scriptmover_contexte.jpg


Il faut ensuite dessiner la plateforme ainsi que le bouton.

Image:Scriptmover_plateforme.jpg


Maintenant que les brushs sont en place, nous allons attaquer les entités.


[modifier] Entités

[modifier] script_mover

Dessinons un petit cube de 16 * 16 * 16 et appliquons lui la texture origin (qui se trouve dans les textures common).

C'est lui (son centre) qui indique le point de référence pour le mouvement, il vaut donc mieux le placer au centre de la plateforme.

Image:Scriptmover_origin.jpg


Pour créer le script_mover, sélectionnons tout les éléments de la plateforme et cliquons avec le bouton droit dans une vue 2d -> script -> scrip_mover.

Image:Scriptmover_scriptmover.jpg


Une fois le script_mover séléctionné, parametrons le de cette façon :

  • cocher la case solid (sinon on passerait à travers)
  • scriptname : mover_plateforme (c'est le nom de la routine que nous utiliserons dans le script)
  • targetname : mover_plateforme (c'est le nom sous lequel nous identifirons les brushs du script_mover dans le script, non utilisé ici)

[modifier] path_corner

Cette entité désigne les points de référence pour les translations (déplacements) à effectuer. Nous devrons en placer deux, une pour le point de destination et une pour le point de retour.

Pour la créer, cliquons avec le bouton droit dans une vue 2D -> path -> path_corner.

Plaçons les de telle manière que leurs centres correspondent avec celui du brush origin de la plateforme lors de ses différentes étapes du deplacements (ici au départ et à la destination).

Image:Scriptmover_pathcorner.jpg


Il faut maintenant les identifier, sélectionnons celui du départ et entrons le paramètre suivant :

  • targetname : point_00

Celui de destination aura donc :

  • targetname : point_01


[modifier] func_invisible_user

Nous allons maintenant créer l'entité correspondant au bouton.

Pour cela, créons un brush en face de celui qui matérialise le bouton. Appliquons lui la texture trigger (dans les textures common).

Une fois séléctionné, cliquons avec le bouton droit dans une vue 2d -> func -> func_invisible_user.

Image:Scriptmover_funcinvisibleuser.jpg


Il faut maintenant le parametrer comme ceci :

  • targetname : mover_button (c'est le nom sous lequel nous identifirons le bouton dans le script, notamment pour le faire disparaitre lors du deplacement)
  • target : mover_activate (nous verrons par la suite pourquoi)
  • cursorhint : hint_activate (définit le symbole qui sera affiché sur l'ecran du joueur, ici une main indiquant l'action a effectuer)


[modifier] target_script_trigger

Cette entité est lié au func_invisible_user pour appeller le script lors de l'activation du bouton.

Pour la créer, cliquons avec le bouton droit dans une vue 2d -> target -> target_script_trigger

Parametrons là comme ceci :

  • targetname : mover_activate (pour lier cette entité au func_invisible_user)
  • scriptname : mover_activate (nom de la routine dans le script appellée lors de l'activation)
  • target : activate (nom de la sous-routine appellée lors de l'activation)

Image:Scriptmover_targetscripttrigger.jpg


Une flèche relie désormais le func_invisible_user au target_script_trigger prouvant ainsi qu'ils sont correctement lié.

Nous avons fini la partie concernant les entités dont voici le résultat :

Image:Scriptmover_entites.jpg


Passons maintenant à la partie scripting :


[modifier] Script

Rappel: le script est contenu dans un fichier nommé nom_de_la_map.script et placé dans le dossier /etmain/maps.

game_manager
{
	spawn
	{
	}
}

Toutes les maps doivent avoir un game_manager et toutes les routines doivent avoir un bloc spawn. Nous y indiquons ici aucune information, nous pourrions y ajouter les temps de spawns ou autre qui sont détaillé dans l'article Analyse du game_manager.

mover_activate //scriptname du scriptmover
{
	spawn
	{
	}

	trigger activate
	{
		trigger mover_plateforme move
	}
}

C'est la routine appellé lors de l'activation du bouton.

Grâce à la commande trigger, nous éxecutons la sous-routine move de la routine mover_platform.

mover_plateforme
{
	spawn
	{
	}

	trigger move
	{
		setstate mover_button invisible
//on fait disparaitre le bouton pendant le mouvement

		gotomarker point_01 50
//va au point_01 avec une vitesse (?) de 50 (?)

		wait 500 
//on attends que le mouvement soit enclenche avant de lancer la rotation

		faceangles 0 180 0 1000 
//rotation de 180 degre sur l'axe des Z (pas de rotation sur les autres axes) sur une duree de 1000ms (=1 seconde)

		wait 3500 
//on attends que la plateforme soit arrivee a destination avant de lancer le mouvement de retour

		gotomarker point_00 50 
//retour au point de départ

		wait 500 
//on attends que le mouvement soit enclenche avant de lancer la rotation

		faceangles 0 0 0 1000 
//rotation pour revenir a l'état initial

		wait 3500 
//on attend le retour de la plateforme avant de ...

		setstate mover_button default 
//... refaire apparaitre le bouton

	}
}

Les valeurs des wait sont à adapter suivant la longueur du trajet et les vitesses de deplacement. Il ne faut pas hésiter à tester plusieurs valeurs jusqu'à trouver le subtil dosage qui fait que tout concorde.

[modifier] Commandes et syntaxe

Vous avez désormais les bases pour faire un script_mover basique mais vous connaisez toutes les commandes pour compliquer les choses :

  • gotomarker    targetname_du_path_corner    vitesse
  • faceangles    Y    Z    X    durée
  • trigger    routine    sous-routine

[modifier] Téléchargement

Scriptmover.map (clic droit -> "enregistrer la cible du lien sous ...")

EDIT par eric1906 : Bon, j'ai testé et il se trouve qu'il y ait une erreur dans le fichier exemple. En effet, pour que celui fonctionne correctement, vous devrez, une fois le fichier .map ouvert dans radiant, modifier les propriétés des objets qui bougeront. Vous devez donc sélectionner le brush origine, dans les champs : targetname & scriptname, remplacer mover_platform par mover_plateforme. Voilà, merci de me corriger si je me trompe mais ça m'étonnerait ;).

Bonne chance à tous dans vos maps!