Aller au contenu

[tuto]le Langage Scm


Vicolaships

Messages recommandés

Le Langage SCM

 

1. Matériel et connaissances nécessaires

1.1 Matériel: Vous aurez besoin de SannyBuilder et de San Andreas

 

1.2 Connaissances: Vous pouvez très bien partir de rien, moi même n'ayant absolument aucune autre notion de code que le SCM

 

2. Création d'un SCM basic

2.1 Démarrage: Démarrer SannyBuilder, charger le fichier main.scm contenu dans le dossier */San Andreas/data/script

 

Un chargement va s'effectuer le main.scm sera chargé, vous pouvez constater la longueur considérable du code (Environ 535.000 lignes). Mais nous n'allons pas travailler sur ce main là, nous allons supprimer l'intégralité du contenu du fichier (Ctrl + A > Supprimer).

 

Nous allons maintenant insérez ce que j'appelle un Main Basic, c'est un code très court qui ne contient aucune missions aucun paquet cachés etc... On à seulement gardé le strict minimum.

DEFINE OBJECTS 0
DEFINE MISSIONS 0

DEFINE EXTERNAL_SCRIPTS 0
DEFINE UNKNOWN_EMPTY_SEGMENT 0
DEFINE UNKNOWN_THREADS_MEMORY 0

//-------------MAIN---------------
03A4: name_thread 'MAIN'
042C: set_total_missions_to 0
030D: set_total_mission_points_to 187
0997: (unknown) 1339
01F0: set_max_wanted_level_to 6
0111: set_wasted_busted_check_to 0
00C0: set_current_time 8 0
016A: fade 0 10 ms
01B6: set_weather 0
04BB: select_interior 0 // select render area  
04E4: unknown_refresh_game_renderer_at 2488.5623 -1666.8645
03CB: set_camera 2488.5623 -1666.8645 13.3757  
0053: $PLAYER_CHAR = create_player #NULL at 2488.5623 -1668.8645 12.8757

:MAIN
07AF: $PLAYER_GROUP = player $PLAYER_CHAR group
01F5: $PLAYER_ACTOR = create_emulated_actor_from_player $PLAYER_CHAR
0373: set_camera_directly_behind_player
0173: set_actor $PLAYER_ACTOR z_angle_to 262.0
0001: wait 100
087B: set_player $PLAYER_CHAR clothes "VEST" "VEST" body_part 0
087B: set_player $PLAYER_CHAR clothes "JEANSDENIM" "JEANS" body_part 2
087B: set_player $PLAYER_CHAR clothes "SNEAKERBINCBLK" "SNEAKER" body_part 3
087B: set_player $PLAYER_CHAR clothes "PLAYER_FACE" "HEAD" body_part 1
070D: build_player $PLAYER_CHAR
016C: restart_if_wasted at 2027.77 -1420.52 15.99 angle 137.0 unknown 0
016D: restart_if_busted at 1550.6801 -1675.49 14.51 angle 90.0 unknown 0
016A: fade 1 1000 ms
004E: end_thread

Insérez ce code dans le main et compilez (F7), cela permet d'enregistrer votre fichier en quelque sorte.

Démarrez une partie (F8 dans Sanny) ou par un raccourci (SannyBuilder et le main peuvent rester ouvert).

 

Comme vous pouvez le voir vous commencez près de la maison de CJ et tout est normal sauf qu'il n'y à pas de vidéo d'intro, de missions etc...

 

2.2 Premiers abords:

Nous allons maintenant de tenter de comprendre ce langage, tout d'abord on remarque qu'il est en Anglais (logique) donc si vous avez du mal avec l'anglais utilisez un outil de traduction.

 

Prenons les choses dans l'ordre :

DEFINE OBJECTS 0  
DEFINE MISSIONS 0

DEFINE EXTERNAL_SCRIPTS 0 // Use -1 in order not to compile AAA script
DEFINE UNKNOWN_EMPTY_SEGMENT 0
DEFINE UNKNOWN_THREADS_MEMORY 0

> Sans grand interet

DÉFINIR LES OBJETS 0

DÉFINIR LES MISSIONS 0

DÉFINIR l'utilisation -1 de scripts externes 0 // pour ne pas compiler le script AAA

DÉFINISSENT UNKNOWN_EMPTY_SEGMENT 0

DÉFINIR UNKNOWN_THREADS_MEMORY 0

On passe à la suite qui va être plus intéressante, maintenant je ne fais plus une traduction Google (qui reste limité) mais je la fais moi même. Je ne garde que les lignes que j'ai compris / qui sont importantes

042C: set_total_missions_to 0
01F0: set_max_wanted_level_to 6
00C0: set_current_time 8 0
set_weather 0
fade 0 10
select_interior 0
$PLAYER_CHAR = Player.Create(#NULL, 2488.56, -1668.86, 12.87)
$PLAYER_ACTOR = Actor.EmulateFromPlayer($PLAYER_CHAR)
Camera.SetBehindPlayer
Actor.Angle($PLAYER_ACTOR) = 262.0
wait 1
Player.SetClothes($PLAYER_CHAR, "VEST", "VEST", Torso)
Player.SetClothes($PLAYER_CHAR, "JEANSDENIM", "JEANS", Legs)
Player.SetClothes($PLAYER_CHAR, "SNEAKERBINCBLK", "SNEAKER", Shoes)
Player.SetClothes($PLAYER_CHAR, "PLAYER_FACE", "HEAD", Head)
Player.Build($PLAYER_CHAR)
wait 1
016C: restart_if_wasted at 2027.77 -1420.52 15.99 angle 137.0 unknown 0
016D: restart_if_busted at 1550.6801 -1675.49 14.51 angle 90.0 unknown 0
07FB: set_interior 'MADDOGS' accessible 0  // Madd Dogg's Crib
fade 1 1000

042C: set_total_missions_to 0

042C: C'est le préfixe du code, parfois il n'y est pas car SannyBuilder raccourci l'Opcode

set_total_mission_to 0: Il n'y a aucune mission

01F0: set_max_wanted_level_to 6: Le niveau maximal de recherche est de 6 (si la valeur est à zéro on ne peut plus avoir de police au trousses)

 

[...]

 

fade 0 10: Fade = fondu, un fondu c'est quand on passe du transparent vers une couleur, d'une couleur vers du transparent ou d'une couleur vers du transparent. C'est une sorte de calque qu'on rajoute par dessus l'écran. Un fade 0 sera un fondu qui ira du transparent vers le noir. Un fade 1 sera un fondu qui ira du noir vers le transparent (par défaut). La deuxième valeur est exprimé en milisecondes (1000 ms = 1s)

 

fade 0 10: Fondu du transparent vers le noir en 10 milisecondes

fade 1 1000: Fondu du noir vers le transparent en 1 seconde

 

[...]

 

$PLAYER_CHAR = Player.Create(#NULL, 2488.56, -1668.86, 12.87)

$PLAYER_CHAR = Joueur (nous) Cet opcode détermine l'endroit ou vous apparaitrez dans le jeu, les coordonées se font suivants les axe X Y et Z. (Dans l'exemple on apparaissera devant la maison de CJ)

 

[...]

 

016C: restart_if_wasted at 2027.77 -1420.52 15.99 angle 137.0 unknown 0

016D: restart_if_busted at 1550.6801 -1675.49 14.51 angle 90.0 unknown 0

 

Wasted = Mort

Busted = "Choppé"

----------

De cette façon, la plupart des Opcodes sont compréhensibles, même si certains sont plus compliqués et il faut essayer de trouver comment ils marchent

----------

Les valeurs de temps sont exprimées en milisecondes.

Opcode = Syntaxe d'une ligne, action ou constations, ensembles de toutes les choses possibles dans San Andreas.

 

Par Vicolaships
Lien vers le commentaire
Partager sur d’autres sites

Bonjours, je trouve ce sujet super, quand on maitrise ce langage, on doit pouvoir faire de superbes machinima !

 

Je me suis lancé dans l'aventure, j'ai copié le "Main Basic", j'ai compilé, et j'ai lancé le jeu, en chargant une partie ou en en lancant une nouvelle, même resultat:

 

la barre de chargement va jusqu'au bout, mais aprés, plantage, retour sous windows avec une boite "voulez vous envoyer un rapport d'erreur..."

 

Comment je fait?

 

Merci

Lien vers le commentaire
Partager sur d’autres sites

Apparement le main est erroné, je ne sais pas comment j'ai fait mon compte mais je suis désolé :(

Voilà un main qui marche (et testé) :

DEFINE OBJECTS 0
DEFINE MISSIONS 0

DEFINE EXTERNAL_SCRIPTS 0
DEFINE UNKNOWN_EMPTY_SEGMENT 0
DEFINE UNKNOWN_THREADS_MEMORY 0

//-------------MAIN---------------
03A4: name_thread 'MAIN'
042C: set_total_missions_to 0 
030D: set_total_mission_points_to 187 
0997: (unknown) 1339 
01F0: set_max_wanted_level_to 6 
0111: set_wasted_busted_check_to 0 
00C0: set_current_time 8 0
016A: fade 0 10 ms
01B6: set_weather 0
04BB: select_interior 0 // select render area   
04E4: unknown_refresh_game_renderer_at 2488.5623 -1666.8645 
03CB: set_camera 2488.5623 -1666.8645 13.3757  
0053: $PLAYER_CHAR = create_player #NULL at 2488.5623 -1668.8645 12.8757 

:MAIN
07AF: $PLAYER_GROUP = player $PLAYER_CHAR group 
01F5: $PLAYER_ACTOR = create_emulated_actor_from_player $PLAYER_CHAR 
0373: set_camera_directly_behind_player 
0173: set_actor $PLAYER_ACTOR z_angle_to 262.0
0001: wait 100
087B: set_player $PLAYER_CHAR clothes "VEST" "VEST" body_part 0 
087B: set_player $PLAYER_CHAR clothes "JEANSDENIM" "JEANS" body_part 2 
087B: set_player $PLAYER_CHAR clothes "SNEAKERBINCBLK" "SNEAKER" body_part 3 
087B: set_player $PLAYER_CHAR clothes "PLAYER_FACE" "HEAD" body_part 1
070D: build_player $PLAYER_CHAR
016C: restart_if_wasted at 2027.77 -1420.52 15.99 angle 137.0 unknown 0
016D: restart_if_busted at 1550.6801 -1675.49 14.51 angle 90.0 unknown 0
016A: fade 1 1000 ms
004E: end_thread

 

Encore désolé, j'ai prévenu les modérateurs pour qu'ils fassent la modification dans le tutoriel, merci d'avoir posé ta question et bonne chance pour la suite !

Lien vers le commentaire
Partager sur d’autres sites

  • 5 mois après...
Salut,

Quand je vais dans script, le main.scm n'est pas dedans :s <_<

Où est-il ?

Bonsoir, euh ca ne se peut pas. (ca voudrais dire que ton jeu marche ni quand tu démarres une partie ni quand tu charges une partie). Regarde dans le dossier GTA San Andreas/data/script il doit y avoir main.scm et script.img; si tu trouves pas fait une recherche dans le dossier de GTA Sa.

 

A+

 

PS: Si c'est pour Vice City (c'est pas le même main basic) le fichier main.scm est directement dans le dossier data

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

Chargement
×
×
  • Créer...