Analyse du game manager

Un article de Wiki-Mapping.

Jump to: navigation, search

[modifier] Analyse du game_manager de Oasis

game_manager
{
 spawn

Toutes les maps ont besoin d'un game_manager et chaque bloc doit avoir un sous-bloc spawn meme s'il ne contient pas d'instructions.

 {
  accum 1 set 0 // Etat du premier objectif
  accum 5 set 0 // Commbien de Canons Pak 75mm sont détruits
  accum 6 set 0 // Combien de water pumps sont construites
  accum 7 set 0 // Vérifie s'il faut ou pas annoncer "Axis have damaged both water pumps!"
  globalaccum 5 set 0
  globalaccum 6 set 0

Parametrer tout les accum à 0 au début de la map est un bon moyen de s'assurer que tout les objectifs sont à leur état voulus au départ. Comme quand vous commencez votre config de joueur par "unbindall".

 // Game rules
  wm_axis_respawntime 30
  wm_allied_respawntime 20
  wm_number_of_objectives 8
  wm_set_round_timelimit 30

Ici on parametre les regles de base d'une partie, les temps de respawn ainsi que le temps de la partie. wm_number_of_objectives doit correspondre au nombre d'objectifs contenu dans votre fichier .objdata.

 // Objectives
  // 1: Primary1 : Destroy the North gun
  // 2: Primary2 : Destroy the South gun
  // 3: Primary3 : Breach Old City wall
  // 4: Secondary1 : Capture forward spawn point
  // 5: Secondary2 : Drain/flood cave system by repairing/damaging the Oasis pump
  // 6: Secondary3 : Drain/flood cave system by repairing/damaging the Old City pump
  // 7: Allied command post
  // 8: Axis command post

Il est pratique de rajouter cette section (en commentaires) pour se rappeler quels sont les objectifs.

 // Combien d'objectifs principaux pour chaque équipe (0=Axis, 1=Allies)
  wm_set_main_objective 3 0
  wm_set_main_objective 3 1

 // Vue générale du statut des différent objectifs 
 //Syntaxe : wm_objective_status <objectif> <équipe (0=Axis, 1=Allies)> <statut (0=neutre 1=completé 2=echoué)>
  wm_objective_status 1 1 0
  wm_objective_status 1 0 0
  wm_objective_status 2 1 0
  wm_objective_status 2 0 0
  wm_objective_status 3 1 0
  wm_objective_status 3 0 0
  wm_objective_status 4 1 0
  wm_objective_status 4 0 0
  wm_objective_status 5 1 0
  wm_objective_status 5 0 0
  wm_objective_status 6 1 0
  wm_objective_status 6 0 0
  wm_objective_status 7 1 0
  wm_objective_status 7 0 0
  wm_objective_status 8 1 0
  wm_objective_status 8 0 0

Vous devez dire explicitement au jeu quelle équipe controle chaque objectifs. Ici, on définit les statuts des différents objectifs en début de partie. Les numéros d'objectifs doivent correspondre au contenu de votre fichier .objdata pour que les statuts des objectifs apparaissent dans le limbo.

 // Quel équipe défend en mode Stopwatch (0=Axis, 1=Allies)
  wm_set_defending_team 0

 // Si le temps de la partie est expiré, quelle équipe gagne ? (0=Axis, 1=Allies)
  wm_setwinner 0

 // Configuration des spawns <équipe (0 = axis, 1 = allies)> <message du keymarker>
 // Spawns on siwa:
 // Axis Garrison
 // Allied Camp
 // Old City
  wait 150
  setautospawn "Old City" 1
  setautospawn "Old City" 0

Le nom du point de spawn vient généralement de l'entrée description de l'entité Team_Wolf_Objective. Les deux équipes ont leur point de spawn automatiquement choisi sur Old City ce qui les fera spawner le plus près possible du drapeau de la Old City. Cela implique que dès qu'une équipe capture le drapeau, leur point de spawn change automatiquement.

  wait 2000
 }

 trigger 75mm_gun_counter //compteur d'objectifs réalisés
 {
  accum 5 inc 1 // Augmente de 1 la valeur précédente de l'accum 5
  accum 5 abort_if_not_equal 2 // Vérifie si les deux Canons sont détruit sinon annule la suite du script
  wm_announce "Allies have destroyed both Anti-Tank Guns!"
  wait 8000
  accum 1 set 1 // Les deux canons sont détruit
  trigger game_manager checkgame // Appelle la fonction qui détermine si la partie est gagnée
 }

C'est un compteur d'objectifs qui compte combien d'objectifs (Canons) ont été détruits. Lorsque le North ou le South Gun est détruit, ça appelle le bloc 75mm_gun_counter qui détermine si il doit appeler le bloc checkgame:

 trigger checkgame
 {
  accum 1 abort_if_not_equal 1 //Annule la suite si les deux canon ne sont pas détruits
 // Qui gagne: 0 = AXIS, 1 = ALLIED
  wm_setwinner 1
 // Fin de la partie
  wm_endround
 }
}

Chaque fois qu'un canon est détruit, on vérifie si la partie est gagnée en vérifiant si laccum 1 égal à 1. Laccum 1 est parametré à 1 dans la routine 75mm_gun_counter seulement si les deux canons ont été détruit. Si c'est le cas, les Allies gagnent. Si ça ne l'est pas, le script s'arrète et la partie continue.

[modifier] Sources