Tastenbelegung

    00D6: if  0
    00E1:   key_pressed  0  10  
    004D: jump_if_false ££weiter
  1. Beim Anwenden von Tastenabfragen kommts zu dem Problem, daß wenn der code nach der Aktion wieder in die selbe Abfrage springt, die Aktion andauernd wiederholt wird, weil der Lesevorgang viel schneller ist als ein Tastendruck
  2. Eine einfache Lösung ist ein wait 1000 ms nach der key_pressed-Abfrage
  3. siehe Jump-Rampe-Script
  4. Zu Fuß CONTROLS 
    
    #   CONTROL				
    
    0   left/right  			          links / rechts
    1   forward/backward  		      vorwärts / rückwärts  
    2   special ctrl left/right  		-unbekannt-  
    3   special ctrl up/down   		  -unbekannt-
    4   action/secondary fire  		  Telefonanruf annehmen/action/secondary fire  
    5   previous weapon/zoom in  	  Waffenwechsel rückwärts / SNIPER_ZOOM_IN  
    6   aim weapon  			          mit Waffe zielen  
    7   next weapon/zoom out  		  Waffenwechsel vorwärts / SNIPER_ZOOM_OUT  
    8   group CTRL forward  		    Homie recrutieren/rufen  
    9   group CTRL back  		        Homie entlassen/wegschicken  
    10  conversation - no  		      KONVERSATION_NO  
    11  conversation - yes  		    KONVERSATION_YES  
    12  (does not exist) 		        -- -- --
    13  change camera  		          Blickwinkel ändern  
    14  jump  			                springen  
    15  enter vehicle  			        Ein/Aussteigen  
    16  sprint  			              sprinten  
    17  fire  			                Feuer  
    18  crouch  			              ducken  
    19  look behind  			          nach hinten schauen
      
    LALT  schleichen  			              schleichen  
    
    
    Fahrzeug CONTROLS 
    
    #   CONTROL				
    
    0   left/right  			          links / rechts  
    1   steer back/up  			        auf / ab  
    2   special ctrl left/right  	  -unbekannt- 
    3   special control up/down  		-unbekannt-  
    4   secondary fire  			      Sekundärfeuer  
    5   look left  			            links schauen  
    6   brake/reserve  			        Bremse/rückwärts  
    7   look right  			          rechts schauen  
    8   next radio station  		    Radiosender vor  
    9   previous radio station  		Radiosender zurück  
    10  no  				                KONVERSATION_NO/Song überspringen  
    11  yes / trip skip  			      KONVERSATION_YES/Fahrt überspringen  
    12  (does not exist)  		      -- -- --
    13  camera  			              Blickwinkel ändern  
    14  hand brake  			          Handbremse  
    15  enter/exit  			          Ein/Aussteigen  
    16  accelerate  			          Beschleunigen  
    17  fire  			        	      Feuer  
    18  horn  			                Hupe  
    19  submission  			          Spezialmission
      
    RMB  vehicle mouse look  	      VEHICLE_MOUSELOOK

  5. key_pressed 0 0 ist links / rechts gleichermaßen und
  6. key_pressed 0 1 ist vorwärts / rückwärts gleichermaßen
  7. zur Aufsplittung in links , rechts und vorwärts , rückwärts
  8. gibts eine etwas komplizierte Variante
  9. 0494: get_joystick_data  0 @26 @27 @28 @29
  10. @26 entspricht vorwärts / rückwärts und gibt in eine Richtung einen Minuswert aus
  11. @27 entspricht links / rechts und gibt in eine Richtung einen Minuswert aus
  12. Im Script für die freibewegliche Kamera wird das veranschaulicht
  13. freibewegliche Kamera
  14. Kamera einschalten: mit Duckentaste
  15. Kamera-Kontrolle:
  16. mit Vorwärtstaste hoch / Rückwärtstaste runter
  17. mit Linkstaste links drehen / mit Rechtstaste rechts drehen
  18. mit Waffenwechsel rückwärts/vorwärts - hoch/runter-schwenken
  19. mit Feuertaste vorwärts / mit Sprintentaste rückwärts
  20. zusaeztlich Springentaste um Bewegung zu beschleunigen
  21. Aktiontaste-screenshot
  22. Enter/exit-beenden
  23. :FlyCam_001;;;--------------------------MB0.33/sascm.ini vom 1.Sep.2005
    03A4: name_thread 'FCAM'
    
    :FlyCam_002
    0001: wait  0 ms
    00D6: if  0
    0256:   player $PLAYER_CHAR defined
    004D: jump_if_false ££FlyCam_002
    00D6: if  0
    00E1:   key_pressed  0  18  
    004D: jump_if_false ££FlyCam_002
    0619: $PLAYER_ACTOR  0;collision_detection
    01B4: set_player $PLAYER_CHAR frozen_state  0 (frozen)
    
    016A: fade  0 ()  250 ms
    0001: wait  250 ms
    04C4: create_coordinate $camx2 $camy2 $camz2 from_actor $PLAYER_ACTOR offset 0.0 2.0 1.0 
    0172: $cama2 = actor $PLAYER_ACTOR z_angle
    0247: request_model #NULL
    
    :FlyCam_04
    0001: wait  0 ms
    00D6: if  0
    0248:   model #NULL available
    004D: jump_if_false ££FlyCam_04
    009A: @9 = create_actor  24 #NULL at  $camx2 $camy2 $camz2
    0223: set_actor @9 health_to  2000
    02AB: set_actor @9 immunities  1  1  1  1  1
    0173: set_actor @9 z_angle_to  $cama2
    0337: set_actor @9 visibility 0
    0619: @9  0;collision_detection
    0249: release_model #NULL
    
    :FlyCam_FC00
    0001: wait 250 ms 
    016A: fade  1 ()  250 ms
    0007: @24 = -1.0  ;; floating-point values
    0007: @25 =  0.4  ;; floating-point values 
    067C: @9  0.0  0.3 0.5  0.0  0.5 @25 0.0  2;;put_camera_on_actor
    
    :FlyCam_FC01
    0001: wait 0 ms 
    00D6: if  0
    80E1:   NOT   key_pressed  0  15
    004D: jump_if_false ££FlyCam_FC25
    00D6: if 23
    00E1:   key_pressed 0 0
    00E1:   key_pressed 0 1
    00E1:   key_pressed 0 17
    00E1:   key_pressed 0 16
    004D: jump_if_false ££FlyCam_FC20
    00A0: store actor @9 position to @21 @22 @23 
    00D6: if 25 
    0021:   @21 > 3500.0  ;; floating-point values 
    0023:   -3500.0 > @21  ;; floating-point values 
    0021:   @22 > 3500.0  ;; floating-point values 
    0023:   -3500.0 > @22  ;; floating-point values 
    0023:   -100.8 > @23  ;; floating-point values 
    0021:   @23 > 1100.7  ;; floating-point values
    004D: jump_if_false ££FlyCam_FC02
    00A1: put_actor @9 at -1660.5  1208.4  13.7 
    0173: set_actor @9 z_angle_to  320.8
    0002: jump ££FlyCam_FC02
    
    :FlyCam_FC02
    0001: wait 0 ms 
    0494: get_joystick_data  0 @26 @27 @28 @29
    00D6: if 0
    0039:   @26 ==  0  ;; integer values
    004D: jump_if_false ££FlyCam_FC03
    0172: $cama1 = actor @9 z_angle
    0002: jump ££FlyCam_FC07
    
    :FlyCam_FC03
    00D6: if 0 
    0019:   @26 >  0  ;; integer values
    004D: jump_if_false ££FlyCam_FC04
    0172: $cama1 = actor @9 z_angle
    000F: $cama1 -=  7.5  ;; floating-point values
    0173: set_actor @9 z_angle_to  $cama1
    0002: jump ££FlyCam_FC07
    
    :FlyCam_FC04
    00D6: if 0 
    001B:    0 > @26  ;; integer values
    004D: jump_if_false ££FlyCam_FC07
    0172: $cama1 = actor @9 z_angle
    000B: $cama1 +=  7.5  ;; floating-point values
    0173: set_actor @9 z_angle_to  $cama1
    0002: jump ££FlyCam_FC07
    
    :FlyCam_FC07 
    00D6: if 0
    0039:   @27 ==  0  ;; integer values
    004D: jump_if_false ££FlyCam_FC08
    0007: @24 =  -1.0  ;; floating-point values 
    0002: jump ££FlyCam_FC10
    
    :FlyCam_FC08
    00D6: if 0 
    0019:   @27 >  0  ;; integer values
    004D: jump_if_false ££FlyCam_FC09
    0007: @24 =  -1.1  ;; floating-point values 
    0002: jump ££FlyCam_FC11
    
    :FlyCam_FC09
    00D6: if 0 
    001B:    0 > @27  ;; integer values
    004D: jump_if_false ££FlyCam_FC10
    0007: @24 =  -0.9  ;; floating-point values 
    0002: jump ££FlyCam_FC12
    
    :FlyCam_FC10
    0007: @24 =  -1.0  ;; floating-point values 
    0002: jump ££FlyCam_FC15
    
    :FlyCam_FC11
    00D6: if  0
    00E1:   key_pressed 0 14
    004D: jump_if_false ££FlyCam_FC15
    000F: @24 -=  2.5  ;; floating-point values
    0002: jump ££FlyCam_FC15
    
    :FlyCam_FC12
    00D6: if  0
    00E1:   key_pressed 0 14
    004D: jump_if_false ££FlyCam_FC15
    000B: @24 +=  2.5  ;; floating-point values
    0002: jump ££FlyCam_FC15
    
    :FlyCam_FC15
    00D6: if  0
    00E1:   key_pressed 0 17
    004D: jump_if_false ££FlyCam_FC16
    0007: @20 =  0.1  ;; floating-point values 
    0002: jump ££FlyCam_FC17
    
    :FlyCam_FC16
    00D6: if  0
    00E1:   key_pressed 0 16
    004D: jump_if_false ££FlyCam_FC18
    0007: @20 =  -0.1  ;; floating-point values 
    0002: jump ££FlyCam_FC17
    
    :FlyCam_FC17
    00D6: if  0
    00E1:   key_pressed 0 14
    004D: jump_if_false ££FlyCam_FC19
    0013: @20 *=  50.5  ;; floating-point values
    0002: jump ££FlyCam_FC19
    
    :FlyCam_FC18
    0007: @20 =  0.0  ;; floating-point values 
    04C4: create_coordinate $camx1 $camy1 $camz1 from_actor @9 offset 0.0 @20 @24 
    00A1: put_actor @9 at $camx1 $camy1 $camz1 
    0002: jump ££FlyCam_FC20 
    
    :FlyCam_FC19
    04C4: create_coordinate $camx1 $camy1 $camz1 from_actor @9 offset 0.0 @20 @24 
    00A1: put_actor @9 at $camx1 $camy1 $camz1
    0002: jump ££FlyCam_FC20
    
    :FlyCam_FC20
    00D6: if 0
    00E1:   key_pressed 0 5
    004D: jump_if_false ££FlyCam_FC21
    000F: @25 -=  0.01  ;; floating-point values
    067C: @9  0.0  0.3 0.5  0.0  0.5 @25 0.0  2;;put_camera_on_actor
    0002: jump ££FlyCam_FC23 
    
    :FlyCam_FC21
    00D6: if 0
    00E1:   key_pressed 0 7
    004D: jump_if_false ££FlyCam_FC23
    000B: @25 +=  0.01  ;; floating-point values
    067C: @9  0.0  0.3 0.5  0.0  0.5 @25 0.0  2;;put_camera_on_actor
    0002: jump ££FlyCam_FC23 
    
    :FlyCam_FC23
    00D6: if  0
    00E1:   key_pressed  0  4  
    004D: jump_if_false ££FlyCam_FC01
    0A1E: 1
    0001: wait  1000 ms
    0002: jump ££FlyCam_FC01
    
    :FlyCam_FC25
    016A: fade  0 ()  250 ms
    0001: wait  250 ms
    04E4: unknown_refresh_game_renderer_at  $camx2 $camy2
    03CB: set_camera  $camx2 $camy2 $camz2
    0001: wait  250 ms
    016A: fade  1 ()  250 ms
    0373: set_camera_directly_behind_player
    02EB: restore_camera_with_jumpcut
    009B: destroy_actor_instantly @9
    0619: $PLAYER_ACTOR  1;collision_detection
    01B4: set_player $PLAYER_CHAR frozen_state  1 (unfrozen)
    0002: jump ££FlyCam_002

gosub

  1. Das sub script befindet sich nicht in der Scriptfolge des Threads.
    Es ist ausgelagert, existiert für sich und durchläuft seinen eigenen Level.
    Es kann zu einem Thread gehören wie ein Seitenast, einen Ordner tiefer oder ein Verstärker.
    Es kann von vielen anderen Scripten genutzt werden, wenn es sich im Main part der Main.scm befindet.
    Es ist nicht als Thread definiert und endet immer mit 0051: return.
    der Leseprozess wird in das subscript geleitet, um dann mit der eigentlichen Scriptfolge des Threads fortzufahren, sobald der "return"-code erfolgt.
  2. Ein einfaches Bespiel ist das save-script
  3. 0050: gosub ££SAVE_14
  4. verweist ins sub-script :SAVE_14
  5. wenn das Speichern erledigt ist, gehts im thread mit 0002: jump ££SAVE_2 weiter
  6. :SAVE_1;;;--------------------------MB0.33/sascm.ini vom 1.Sep.2005
    03A4: name_thread 'SAVE'
    0570: $sv02 = create_asset_radar_marker_with_icon 35 at 384.44 2544.108 16.66
    018B: show_on_radar $sv02 2
    
    :SAVE_2
    0001: wait 0 ms
    0213: $sv01 = create_pickup #PICKUPSAVE type 3 at 417.44 2538.108 10.1
    
    :SAVE_5
    0001: wait 0 ms
    00D6: if 0
    0256: player $PLAYER_CHAR defined
    004D: jump_if_false ££SAVE_5
    00D6: if 0
    0214: pickup $sv01 picked_up
    004D: jump_if_false ££SAVE_5
    0050: gosub ££SAVE_14
    0002: jump ££SAVE_2 
    
    :SAVE_14
    00D6: if  0
    0038:   $ON_MISSION ==  0  ;; integer values
    004D: jump_if_false ££SAVE_17
    0004: $ON_MISSION =  1  ;; integer values
    01B4: set_player $PLAYER_CHAR frozen_state  0 (frozen)
    0001: wait  350 ms
    03D8: show_SAVE_screen
    
    :SAVE_15
    00D6: if  0
    83D9:   NOT   save_done
    004D: jump_if_false ££SAVE_16
    0001: wait  0 ms
    0002: jump ££SAVE_15
    
    :SAVE_16
    00A1: put_actor $PLAYER_ACTOR at 420.44 2538.108 10.0
    01B4: set_player $PLAYER_CHAR frozen_state  1 (unfrozen)
    0004: $ON_MISSION =  1  ;; integer values
    0001: wait  350 ms
    0004: $ON_MISSION =  0  ;; integer values
    
    :SAVE_17
    0051: return


  7. Im sub-script einen Loop zu integrieren, wie beim save-script, ist ansonsten nicht ratsam.
  8. Natürlich kommt es auf den Inhalt den sub-scripts an.
  9. Aber fürs Gameplay absichernde Abfragen, wie "if_playerchar_defined" oder "if actor $X is dead", oder "if car wrecked"
  10. und der Auflösungsabschnitt befinden sich ja in der Regel im Thread
  11. Im Falle von Tod oder Verhaftung könnte der code dann im sub-script endlos weiter-loopen
  12. Das Risiko, daß es zu Fehlern kommt, wäre größer.
  13. Ausnahme sind die Missionen, die nur aus sub-scripten bestehen
  14. Diese laufen aber in einem speziellen Modus
  15. Meistens werden die sub-scripte zur Unterstützung des Hauptscripts genutzt, z.B um Informationen einzuholen, mit denen dann im Hauptscript Aktionen ausgeführt werden.
  16. Oft wird der gosub-Befehl sogar in einen Loop gesetzt um das sub-script ständig auszulesen
  17. Das sub-script selbst wird dann ohne Verzögerung durch wait-codes oder Loops gehalten, damit es in 0 Sekunde durchlaufen werden kann
  18. Im folgenden Beispiel-Thread dient das sub-script dazu, das Fahrverhalten des car@7 zu regeln
  19. Der gosub-Befehl ist im Loop des Thread-Abschnitts :Drive_7 , Der Loop ist jetzt fast leer. Da ist Platz für andere Abfragen und Aktionen
  20. 0050: gosub ££Drive_sub_3
  21. Actor @9 wird auch im sub-script geregel, daß er wieder aufsteigt.
    Und wenn er die 2.Runde geschafft hat wird eine Textmessage eingeblendet
    Damit er nicht vom Bike fällt, kann man den Code ;08C6: set_actor @9 stay_on_bike 1 aktivieren
  22. Cardrive-Script/zum aktivieren "Ja/Yes"-Taste drücken
  23. :Drive_1;;;--------------------------MB0.33/sascm.ini vom 1.Sep.2005
    03A4: name_thread 'DRIV'
    
    :Drive_3
    0001: wait 0 ms
    00D6: if 0
    0256: player $PLAYER_CHAR defined
    004D: jump_if_false ££Drive_3
    077E: $ACTIVE_INTERIOR = active_interior
    00D6: if  2
    0038:   $ACTIVE_INTERIOR ==  0  ;; integer values
    00E1:   key_pressed  0  11  
    004D: jump_if_false ££Drive_3
    016A: fade  0 ()  250 ms
    0001: wait 250 ms
    01B4: set_player $PLAYER_CHAR frozen_state  0 (frozen)
    0362: remove_actor $PLAYER_ACTOR from_car_and_place_at -1338.5  -408.1  14.1
    0173: set_actor $PLAYER_ACTOR z_angle_to  90.8
    0001: wait  500 ms
    0247: request_model #NRG500
    0247: request_model #MAFFA
    
    :Drive_5
    0001: wait  0 ms
    00D6: if  1
    0248:   model #NRG500 available
    0248:   model #MAFFA available
    004D: jump_if_false ££Drive_5
    00A5: @1 = create_car #NRG500 at -1333.5  -408.1  14.1
    0175: set_car @1 z_angle_to  280.0
    0224: set_car @1 health_to  2000
    00A5: @7 = create_car #NRG500 at -1354.5  -419.1  14.1
    0175: set_car @7 z_angle_to  280.0
    0224: set_car @7 health_to  2000
    020A: set_car  @7 door_status_to 4
    02AC: set_car @7 immunities  1  1  1  1  1
    01EC: make_car @7 very_heavy  1
    0129: @9 = create_actor  24 #MAFFA in_car @7 driverseat
    0223: set_actor @9 health_to  3000
    04E4: unknown_refresh_game_renderer_at  -1333.5  -408.1
    03CB: set_camera  -1333.5  -408.1  14.1
    029B: @23 = init_object #AD_JUMP at -1576.02  -202.34  13.76
    0177: set_object @23 z_angle_to  270.0
    01C7: remove_object_from_mission_cleanup_list @23
    0382: set_object @23 collision_detection  1
    029B: @24 = init_object #AD_JUMP at -1597.9  -506.5  21.7
    0177: set_object @24 z_angle_to  270.0
    01C7: remove_object_from_mission_cleanup_list @24
    0382: set_object @24 collision_detection  1
    029B: @25 = init_object #AD_JUMP at -1375.9  -581.5  13.69
    0177: set_object @25 z_angle_to  270.0
    01C7: remove_object_from_mission_cleanup_list @25
    0382: set_object @25 collision_detection  1
    029B: @26 = init_object #AD_JUMP at -1374.9  -585.5  13.69
    0177: set_object @26 z_angle_to  270.0
    01C7: remove_object_from_mission_cleanup_list @26
    
    0382: set_object @26 collision_detection  1
    0177: set_object @23 z_angle_to  135.0
    0177: set_object @24 z_angle_to  225.0
    0177: set_object @25 z_angle_to  280.0
    0177: set_object @26 z_angle_to  280.0
    0249: release_model #NRG500
    0249: release_model #MAFFA
    04e0: car @7 abandon_path_radius 200
    00AD: set_car @7 max_speed_to  100.0
    04BA: set_car @7 speed_instantly  30.0
    00AF: set_car @7 driver_behaviour_to  1
    00AE: unknown_set_car @7 to_ignore_traffic_lights  2
    0001: wait  250 ms
    036A: put_actor $PLAYER_ACTOR in_car @1
    0001: wait  250 ms
    016A: fade  1 ()  1000 ms
    0001: wait  1000 ms
    0373: set_camera_directly_behind_player
    02EB: restore_camera_with_jumpcut
    01B4: set_player $PLAYER_CHAR frozen_state  1 (unfrozen)
    0004: $checkpoint1 =  0  ;; integer values
    0004: $check2 =  0  ;; integer values
    0005: $sperce5 =  20000  ;; floating-point values
    0004: $mark03 =  0  ;; integer values
    0005: @11 =  -1320.48  ;; floating-point values
    0005: @12 =  -407.1  ;; floating-point values
    0005: @13 =  13.76  ;; floating-point values
    00A7: car @7 drive_to  @11 @12 @13
    00AD: set_car @7 max_speed_to  1.0
    04e0: car @7 abandon_path_radius 250
    ;08C6: set_actor @9  stay_on_bike 1
    
    :Drive_7
    0001: wait 0 ms
    00D6: if 0
    0256: player $PLAYER_CHAR defined
    004D: jump_if_false ££Drive_7
    
    0050: gosub ££Drive_sub_3
    
    00D6: if  2
    8119:   NOT   car @1 wrecked
    8119:   NOT   car @7 wrecked
    8118:   NOT   actor @9 dead
    004D: jump_if_false ££Drive_7
    00D6: if  0
    00FE:   actor $PLAYER_ACTOR  0 ()near_point -1333.5  -408.1  14.1 radius  650.5  650.5  50.5
    004D: jump_if_false ££Drive_12
    0002: jump ££Drive_7
    
    :Drive_12
    01C3: remove_references_to_car @1  ;; Like turning a car into any random car
    01C3: remove_references_to_car @7  ;; Like turning a car into any random car
    01C2: remove_references_to_actor @9  ;; Like turning an actor into a random pedestrian
    0108: destroy_object @23
    0108: destroy_object @24
    0108: destroy_object @25
    0108: destroy_object @26
    0002: jump ££Drive_3
    
    
    :Drive_sub_3
    00D6: if  0
    8119:   NOT   car @7 wrecked
    004D: jump_if_false ££Drive_sub_109
    00D6: if  0
    00DB:   actor @9 in_car @7
    004D: jump_if_false ££Drive_sub_99
    00D6: if  0
    0038:   $mark03 ==  1  ;; integer values
    004D: jump_if_false ££Drive_sub_10
    0004: $mark03 =  0  ;; integer values
    0002: jump ££Drive_sub_100
    
    :Drive_sub_10
    00D6: if  0
    0038:   $checkpoint1 ==  0  ;; integer values
    004D: jump_if_false ££Drive_sub_11
    00D6: if  0
    01AF:   car @7  0 ()near_point @11 @12 @13 radius  5.2  5.2  5.0
    004D: jump_if_false ££Drive_sub_11
    0004: $checkpoint1 =  1  ;; integer values
    0005: @11 =  -1181.78  ;; floating-point values
    0005: @12 =  -331.30  ;; floating-point values
    0005: @13 =  13.76  ;; floating-point values
    0008: $check2 +=  0  ;; integer values
    0005: $speed1 =  100.0  ;; floating-point values
    0005: $speed2 =  20.0  ;; floating-point values
    04e0: car @7 abandon_path_radius 250
    0002: jump ££Drive_sub_100
    
    :Drive_sub_11
    00D6: if  0
    0038:   $checkpoint1 ==  1  ;; integer values
    004D: jump_if_false ££Drive_sub_12
    00D6: if  0
    01AF:   car @7  0 ()near_point @11 @12 @13 radius  15.2  15.2  5.0
    004D: jump_if_false ££Drive_sub_12
    00AD: set_car @7 max_speed_to  10.0
    0004: $checkpoint1 =  2  ;; integer values
    0007: @11 =  -1282.1  ;; floating-point values
    0007: @12 =  -159.3  ;; floating-point values
    0007: @13 =  13.76  ;; floating-point values
    0175: set_car @7 z_angle_to 340.0
    0008: $check2 +=  0  ;; integer values
    0005: $speed1 =  100.0  ;; floating-point values
    0005: $speed2 =  20.0  ;; floating-point values
    04e0: car @7 abandon_path_radius 250
    0002: jump ££Drive_sub_100
    
    
    :Drive_sub_12
    00D6: if  0
    0038:   $checkpoint1 ==  2  ;; integer values
    004D: jump_if_false ££Drive_sub_13
    00D6: if  0
    01AF:   car @7  0 ()near_point @11 @12 @13 radius  15.2  15.2  5.0
    004D: jump_if_false ££Drive_sub_13
    00AD: set_car @7 max_speed_to  25.0
    0004: $checkpoint1 =  3  ;; integer values
    0005: @11 =  -1498.78  ;; floating-point values
    0005: @12 =  -138.30  ;; floating-point values
    0005: @13 =  13.76  ;; floating-point values
    0175: set_car @7 z_angle_to 65.0
    0008: $check2 +=  0  ;; integer values
    0005: $speed1 =  100.0  ;; floating-point values
    0005: $speed2 =  20.0  ;; floating-point values
    04e0: car @7 abandon_path_radius 250
    0002: jump ££Drive_sub_100
    
    :Drive_sub_13
    00D6: if  0
    0038:   $checkpoint1 ==  3  ;; integer values
    004D: jump_if_false ££Drive_sub_14
    00D6: if  0
    01AF:   car @7  0 ()near_point @11 @12 @13 radius  8.2  8.2  5.0
    004D: jump_if_false ££Drive_sub_14
    00AD: set_car @7 max_speed_to  25.0
    0004: $checkpoint1 =  4  ;; integer values
    0005: @11 =  -1576.78  ;; floating-point values
    0005: @12 =  -202.30  ;; floating-point values
    0005: @13 =  13.76  ;; floating-point values
    0175: set_car @7 z_angle_to 135.0
    0008: $check2 +=  0  ;; integer values
    0005: $speed1 =  100.0  ;; floating-point values
    0005: $speed2 =  20.0  ;; floating-point values
    04e0: car @7 abandon_path_radius 250
    0002: jump ££Drive_sub_100
    
    
    
    :Drive_sub_14
    00D6: if  0
    0038:   $checkpoint1 ==  4  ;; integer values
    004D: jump_if_false ££Drive_sub_15
    00D6: if  0
    01AF:   car @7  0 ()near_point @11 @12 @13 radius  5.2  5.2  5.0
    004D: jump_if_false ££Drive_sub_15
    0004: $checkpoint1 =  5  ;; integer values
    0005: @11 =  -1694.78  ;; floating-point values
    0005: @12 =  -352.30  ;; floating-point values
    0005: @13 =  13.9  ;; floating-point values
    0175: set_car @7 z_angle_to 135.0
    0008: $check2 +=  0  ;; integer values
    0005: $speed1 =  100.0  ;; floating-point values
    0005: $speed2 =  20.0  ;; floating-point values
    04e0: car @7 abandon_path_radius 250
    0002: jump ££Drive_sub_100
    
    :Drive_sub_15
    00D6: if  0
    0038:   $checkpoint1 ==  5  ;; integer values
    004D: jump_if_false ££Drive_sub_16
    00D6: if  0
    01AF:   car @7  0 ()near_point @11 @12 @13 radius  15.2  15.2  5.0
    004D: jump_if_false ££Drive_sub_16
    00AD: set_car @7 max_speed_to  10.0
    0004: $checkpoint1 =  6  ;; integer values
    0005: @11 =  -1691.78  ;; floating-point values
    0005: @12 =  -409.30  ;; floating-point values
    0005: @13 =  13.9  ;; floating-point values
    0175: set_car @7 z_angle_to 180.0
    0008: $check2 +=  0  ;; integer values
    0005: $speed1 =  40.0  ;; floating-point values
    0005: $speed2 =  10.0  ;; floating-point values
    04e0: car @7 abandon_path_radius 250
    00AE: unknown_set_car @7 to_ignore_traffic_lights  2
    0002: jump ££Drive_sub_100
    
    :Drive_sub_16
    00D6: if  0
    0038:   $checkpoint1 ==  6  ;; integer values
    004D: jump_if_false ££Drive_sub_17
    00D6: if  0
    01AF:   car @7  0 ()near_point @11 @12 @13 radius  8.2  8.2  5.0
    004D: jump_if_false ££Drive_sub_17
    00AD: set_car @7 max_speed_to  0.0
    0004: $checkpoint1 =  7  ;; integer values
    0005: @11 =  -1519.78  ;; floating-point values
    0005: @12 =  -580.30  ;; floating-point values
    0005: @13 =  13.76  ;; floating-point values
    0175: set_car @7 z_angle_to 250.0
    0008: $check2 +=  0  ;; integer values
    0005: $speed1 =  100.0  ;; floating-point values
    0005: $speed2 =  0.0  ;; floating-point values
    04e0: car @7 abandon_path_radius 250
    00AE: unknown_set_car @7 to_ignore_traffic_lights  2
    0002: jump ££Drive_sub_100
    
    :Drive_sub_17
    00D6: if  0
    0038:   $checkpoint1 ==  7  ;; integer values
    004D: jump_if_false ££Drive_sub_18
    00D6: if  0
    01AF:   car @7  0 ()near_point @11 @12 @13 radius  15.2  15.2  5.0
    004D: jump_if_false ££Drive_sub_18
    00AD: set_car @7 max_speed_to  5.0
    01EB: set_car_density_to  0.0
    0004: $checkpoint1 =  8  ;; integer values
    0005: @11 =  -1299.78  ;; floating-point values
    0005: @12 =  -565.30  ;; floating-point values
    0005: @13 =  13.76  ;; floating-point values
    0175: set_car @7 z_angle_to 0.0
    0008: $check2 +=  0  ;; integer values
    0005: $speed1 =  100.0  ;; floating-point values
    0005: $speed2 =  20.0  ;; floating-point values
    04e0: car @7 abandon_path_radius 250
    0002: jump ££Drive_sub_100
    
    
    :Drive_sub_18
    00D6: if  0
    0038:   $checkpoint1 ==  8  ;; integer values
    004D: jump_if_false ££Drive_sub_109
    00D6: if  0
    01AF:   car @7  0 ()near_point @11 @12 @13 radius  25.2  25.2  5.0
    004D: jump_if_false ££Drive_sub_109
    00AD: set_car @7 max_speed_to  0.0
    0004: $checkpoint1 =  1  ;; integer values
    0008: $check2 +=  1  ;; integer values
    0005: @11 =  -1181.78  ;; floating-point values
    0005: @12 =  -331.30  ;; floating-point values
    0005: @13 =  13.76  ;; floating-point values
    0175: set_car @7 z_angle_to 1.0
    0005: $speed1 =  100.0  ;; floating-point values
    0005: $speed2 =  20.0  ;; floating-point values
    04e0: car @7 abandon_path_radius 250
    00AE: unknown_set_car @7 to_ignore_traffic_lights  2
    
    00D6: if  0
    0038:   $check2 ==  2  ;; integer values
    004D: jump_if_false ££Drive_sub_100
    00BC: text_highpriority 'BJ_LOSE'  5000 ms  1
    0002: jump ££Drive_sub_100
    
    
    :Drive_sub_99
    00D6: if  0
    0038:   $mark03 ==  0  ;; integer values
    004D: jump_if_false ££Drive_sub_109
    00AD: set_car @7 max_speed_to  0.0
    05CB: actor_goto_and_enter_car @9 @7  5000 
    0004: $mark03 =  1  ;; integer values
    0002: jump ££Drive_sub_109
    
    :Drive_sub_100
    00A7: car @7 drive_to  @11 @12 @13
    00AD: set_car @7 max_speed_to  $speed1
    03F0: text_draw_toggle  0
    0006: @33 =  0  ;; integer values
    0002: jump ££Drive_sub_109
    
    
    
    :Drive_sub_102
    00D6: if  0
    01F3:   car @7 airborne
    004D: jump_if_false ££Drive_sub_103
    0005: $speed2 =  0.0  ;; floating-point values
    00A7: car @7 drive_to  @11 @12 @13
    04BA: set_car @7 speed_instantly  $speed2
    00AD: set_car @7 max_speed_to  $speed1
    0002: jump ££Drive_sub_103
    
    :Drive_sub_103
    00D6: if  0
    01AF:   car @7  0 ()near_point @11 @12 @13 radius  30.2  30.2  5.0
    004D: jump_if_false ££Drive_sub_104
    0002: jump ££Drive_sub_105
    
    :Drive_sub_104
    02E3: $sperce5 = car @7 speed
    00D6: if  0
    81F3:   NOT   car @7 airborne
    004D: jump_if_false ££Drive_sub_106
    00D6: if  1
    0020:   $sperce5 >  30.0  ;; floating-point values
    0019:   @33 >  700  ;; integer values
    004D: jump_if_false ££Drive_sub_105
    04BA: set_car @7 speed_instantly  50.0
    008C: $sperce6 = float_to_integer $sperce5
    
    :Drive_sub_105
    00D6: if  0
    0019:   @33 >  2000  ;; integer values
    004D: jump_if_false ££Drive_sub_109
    
    :Drive_sub_106
    0006: @33 =  0  ;; integer values
    
    
    :Drive_sub_109
    0051: return

Animationen

  1. Die Animationen an sich sind als *.ifp-Dateien erstellt,
    und können durch Script-Kommandos ausgeführt werden

    Ein Großteil der Animationen befindet sich in der SA\anim\ped.ifp
    Sie werden beim Spielstart automatisch geladen und lassen die Exe-gesteuerte
    Spiel-Bevölkerung verschiedene Handlungen ausführen
    Animationen der SA\anim\ped.ifp lassen sich direkt, ohne vorheriges Laden,
    mit der Animations-code-Zeile ausführen
  2. 0605: actor @1 perform_animation_sequence "CLIMB_Pull" from_file "PED"  4.0  0  0  0  1 -1 ms


  3. Der andere Teil der Animationen befindet sich in vielen kleinen einzelnen *.ifp-Dateien,
    in der gta3.img. Auch die Animationen, die einer Waffe zugeordnet sind.
    Diese Animationen müssen vorher geladen und bei Script-Ende released werden:
    Geladen und released wird der Name der *.ifp-Datei.
    Im Ausführungs-code wird die Einzel-Animation und der Name der *.ifp-Datei eingetragen
  4. :Animation1;;;--------------------------MB0.33/sascm.ini vom 1.Sep.2005
    04ED: load_animation "PARK"
    
    :Animations_load_check
    0001: wait  0 ms
    00D6: if  0
    04EE:   animation "PARK" loaded
    004D: jump_if_false ££Animations_load_again
    0002: jump ££Animation_run
    
    :Animations_load_again
    04ED: load_animation "PARK"
    0002: jump ££Animations_load_check
    
    :Animation_run
    0605: actor @1 perform_animation_sequence "TAI_CHI_LOOP" from_file "PARK"  4.0  0  0  0  1 -1 ms
    0001: wait  5000 ms
    
    :Animation_end
    04EF: release_animation "PARK"
  5. Die Animationen, die einer Waffe zugeordnet sind, werden vom Player automatisch ausführt.
    Sie werden von der Exe gesteuert und nicht in der main.scm
    Lassen sich aber auch auf diese Weise ausführen.
  6. Animations-Ausführungs-codes lassen sich auch in Pakete zusammenfassen
  7. 0615: define_action_sequences @8
    0605: actor -1 perform_animation_sequence "STR_B2C" from_file "STRIP"  4.0  0  0  0  1 -1 ms  
    0605: actor -1 perform_animation_sequence "DNCE_M_A" from_file "DANCING"  4.0  0  0  0  1 -1 ms
    0605: actor -1 perform_animation_sequence "STR_B2C" from_file "STRIP"  4.0  0  0  0  1 -1 ms
    0605: actor -1 perform_animation_sequence "DNCE_M_A" from_file "DANCING"  4.0  0  0  0  1 -1 ms
    0605: actor -1 perform_animation_sequence "STR_B2C" from_file "STRIP"  4.0  0  0  0  1 -1 ms
    0605: actor -1 perform_animation_sequence "DAN_LOOP_A" from_file "DANCING"  4.0  0  0  0  1 -1 ms
    0605: actor -1 perform_animation_sequence "DNCE_M_D" from_file "DANCING"  4.0  0  0  0  1 -1 ms 
    0616: define_action_sequences_end @8
    0618: assign_actor @1 to_action_sequences @8

  8. Das Paket wird in der Regel entlassen, indem anschließend folgender code gesetzt wird:
  9. 061B: @8
  10. Die actors unterbrechen die Animation, wenn man sie anrempelt.
  11. Das lässt sich verhindern, wenn folgender code ins Paket hinzugefügt wird:
  12. 0643: @8  1
  13. Der Enlassungs-code hebt dies wieder auf und kann deshalb auch an einer späteren stelle gesetzt werden
  14. 0615: define_action_sequences @8
    0605: actor -1 perform_animation_sequence "STR_B2C" from_file "STRIP"  4.0  0  0  0  1 -1 ms  
    0605: actor -1 perform_animation_sequence "DNCE_M_A" from_file "DANCING"  4.0  0  0  0  1 -1 ms
    0605: actor -1 perform_animation_sequence "STR_B2C" from_file "STRIP"  4.0  0  0  0  1 -1 ms
    0605: actor -1 perform_animation_sequence "DNCE_M_A" from_file "DANCING"  4.0  0  0  0  1 -1 ms
    0605: actor -1 perform_animation_sequence "STR_B2C" from_file "STRIP"  4.0  0  0  0  1 -1 ms
    0605: actor -1 perform_animation_sequence "DAN_LOOP_A" from_file "DANCING"  4.0  0  0  0  1 -1 ms
    0605: actor -1 perform_animation_sequence "DNCE_M_D" from_file "DANCING"  4.0  0  0  0  1 -1 ms 
    0643: @8  1
    0616: define_action_sequences_end @8
    0618: assign_actor @1 to_action_sequences @8

  15. Man kann abfragen, ob eine bestimmte Animation ausgeführt wird und auch den Zeitpunkt der Animations-Phase
  16. 00D6: if  0
    0611:   actor @1 animation == "DNCE_M_A" 
    004D: jump_if_false ££weiter
    
    0613: @25 = actor @1 animation "DNCE_M_A" time
    
    00D6: if  0
    0023:    .6 > @25  ;; floating-point values
    004D: jump_if_false ££weiter

  17. Die Bedeutung der Parameter beschreibt Plynton so:
  18. 0605=9,set_actor %1d% perform_animation %2h% file %3h% %4d% loop %5h% lockX %6h% lockY %7h% lockF %8h% limT %9h% 
    
    0605: actor @1 perform_animation_sequence "TAI_CHI_LOOP" from_file "PARK"  loop 4.0  lockX 0  lockY 0  lockF 0  limT 1 -1 ms
  19. lockX 0 lockY 0 heißt, er bleibt auf der Stelle
  20. Um herrauszufinden, welche Animationen die *.ifp-Dateien enthalten kann man sie
    mit Hilfe von Kam´s script in 3dMax laden.
    Eine unvollständige Liste gibts von Ceej auf GTAforums.com

  21. Zusätlich gibts noch die Möglichkeit bestimmte Animationen als Aktions-codes zu verwenden.
    Oder eine Gangart einem actor zuweisen, oder den actor irgendwohin gehen lassen
  22. 05D3: AS_actor @1 go_to -1629.6  1411.7  6.2 speed  4 timeout -1 
    0245: set_actor @1 walk_style_to "DRUNKMAN"
    0639: AS_actor @1 rotate_to_actor $PLAYER_ACTOR
    05BC: AS_actor_jump @1  1
    05D9: @1 go_to $PLAYER_ACTOR time 12000 radius 5.0 
    05C7: use_atm @1 
    05C8: look_around @1
    05C2: show_the_finger @1
    05C4: hands_up @1 time  15000 
    0729: AS_actor @1 hold_cellphone  1
    0729: AS_actor @1 hold_cellphone  0
    0823: AS_actor @1 greet_actor $PLAYER_ACTOR  .5  5
    06B0: AS_actor $PLAYER_ACTOR sit_down 999999 ms
    0967: actor @1 move_mouth_for  10000 ms
    05E2: AS_actor @1 kill_actor $PLAYER_ACTOR
nothing

Sounds

  1. Die Radiosender kann man nur hören, wenn man in oder auf einem Fahrzeug sitzt.
    Es ist machbar auch Musik zu Fuss zu hören
    Dazu müssen aber andere Sounddateien benutzt werden und per main oder sonst wie initiiert werden.
  2. Mit der S_Acid mod werden diese Sounddateien modifiziert und Dateien vorbereitet,
    daß man seine eigene Musik installieren kann. Mit der S_Acid main kann man dann diese Musik zu Fuß hören.
  3. Für die Radiosender gibts nur die Möglichkeiten
  4. 1.Einen bestimmten Radiosender einstellen
  5. 2.Den momentanen Radiosender auslesen und in einer Variable definieren
  6. 3.Einen Radiosender als Lieblingssender einstellen
  7. 041E: set_radio_station  11
    
    051E: get_radio_station @5
    041E: set_radio_station  @5          
    
    0A26: set_radio_to_favorite_station

  8. Die Radiosender-Musik ist im *.ogg -Format in SA\audio\streams in spezielle Dateien gepackt
  9. Die Dateien Ambience und Beats in SA\audio\streams können per main-script initiiert werden
  10. Mit folgenden codes werden sie gehandhabt:
  11. 0953: get_soundtrack_status_to @17
    0952:  load_soundtrack 12
    0954: start_playing_loaded_soundtrack          
    0955: end_playing_loaded_soundtrack

  12. Die Sounds der Datei Ambience wird vorwiegend in Innenräumen benutzt, wie z.B. im Nachtclub oder Casino
    Die Initiialisierung und Zuordnung wird dabei aber über die SA\data\maps\Audiozon.ipl geregelt.
    Diese Initiialisierung kann aber auch per main-script vorgenommen werden:
  13. 0917: audio_zone 'BEACH' enable  1

  14. Zwei der Sounds der Datei Beats lassen sich mit folgenden codes abspielen:
  15. 0394: play_music  1
    0394: play_music  2

  16. verschiedene sounds lassen sich so als sound auslösen
  17. 018C: play_sound  1058 at  0.0 0.0 0.0


    Dialog-Sounds
  18. Dialog-Sounds sind im *.wav -Format in SA\audio\SFX in spezielle Dateien gepackt
  19. Die waves der Datei SCRIPT werden folgendermaßen gehandhabt
  20. 040D: unload_wav  1
    03CF: load_wav  18401 as  1
              
    :wave_load_check
    00D6: if  0
    83D0:   NOT   wav  1 loaded
    004D: jump_if_false ££play_wave
    0001: wait  0 ms
    0002: jump ££wave_load_check          
              
    :play_wave          
    03D1: play_wav  1          
    
    
    :loop_wave
    0001: wait  0 ms
    00D6: if  0
    0256:   player $PLAYER_CHAR defined
    004D: jump_if_false ££loop_wave                    
    00D6: if  0
    03D2:   wav 1 ended
    004D: jump_if_false ££loop_wave
    
    :end_wave                    
    040D: unload_wav  1
  21. Man kann den wave-sound auch einem actor zuordnen
  22. 0949: link_wav  1 to_actor @1

  23. In der original SA-main.scm befindet sich ein Thread, der das Wav-laden und Abspielen übernimmt.
    Er lässt den actor auch Mundbewegungen machen und stellt den angegebenen Text dar.
    Es ist der Thread AUDIOL_1. Er wird mit der create_thread-Zeile extra für einen wav-sound ausgeführt.
    Dazu muß man den Variable-Namen eines actors oder des Players mitangeben
    Und natürlich die Sound-Nummer:
  24. 0004: $ACTOR_SPEECH_WAV_FILE =  24800  ;; integer values
    004F: create_thread ££AUDIOL_1 $PLAYER_ACTOR  0  1  1  0

  25. Dann gibts noch ne Reihe anderer codes um actor sprechen zu lassen
    Die funktionieren meistens nur mit den passenden Peds
    Z.B.
  26. 009A: @5 = create_actor  4 #WMYAMMO at  2481.22  -1675.941  13.73 
    0947: @5  333 $10081

  27. In der SA\audio\CONFIG\AudioEventHistory.txt sind wichtigsten Sounds aufgeführt
    Eine Umfangreiche Aufschlüsselung der SFX-Sounds findet man hier
nothing

Text aus der german.gxt

  1. Die Stopuhr
  2. Der Statusbalken
  3. Ändern des darzustellenden Textes
  4. Codes zur Darstellung von Text gibts jede Menge.
  5. Der gebräuchlichste ist wohl:
  6. 00BC: text_highpriority 'LOW_32'  5000 ms  1
  7. text_highpriority wird unten dargestellt, ist bei aktivem widescreen sichtbar und in den Game-Infos nachzulesen
  8. 00BB: text_lowpriority 'LOW_32'  4000 ms  1
  9. text_lowpriority wird unten dargestellt, ist bei aktivem widescreen NICHT sichtbar und NICHT in den Game-Infos nachzulesen
  10. Im letzten Parameter, im Beispiel die 1, kann ein Wert bis 5 eingetragen werden
    Das ändert dann die Darstellungsvariante
  11. Zusätlich kann zum Text ein oder mehrere integere Werte angezeigt werden,in Form von Variablen,
    die im script ausgerechnet werden oder durch einfachen Eintrag einer integeren Zahl
  12. 01E5: text_1number_highpriority 'LOW_38' @271  5000 ms  1
    0303: text_4numbers_highpriority 'QUAR_P6' @208 @209 @210 @211  10000 ms  1
    0308: text_6numbers 'HJSTAT' $1299 $1298 $1292 $1297 $1296 $1300  5000 ms  5

  13. text_styled wird meistens zur Ankündigung oder Abschluss von Missionen benutzt
  14. 00BA: text_styled 'DESERT5'  1000 ms  2
    00BA: text_styled 'M_FAIL'  5000 ms  1
    00BA: text_styled 'M_PASSD'  5000 ms  1
  15. Im letzten Parameter, im Beispiel die 2 bzw. 1, kann ein Wert bis 7 eingetragen werden
    Das ändert dann die Darstellungsvariante
  16. 1: gelbe Schrift, groß, Bildschirm-Mitte
    2: gelbe Schrift, groß, rechts unten
    3: weiße, altdeutsche Schriftart, groß, Bildschirm-Mitte, Text verschwindet nicht, kommt in der original main.scm nicht vor
    4: gelbe Schrift, klein, etwas über Bildschirm-Mitte
    5: weiße Schrift, klein, etwas über Bildschirm-Mitte
    6: weiß-gelbe Schrift, fett, oben
  17. Als Meldung für "Mission erfolgreich bestanden wird meistens text_1number_styled
  18. 01E3: text_1number_styled 'M_PASSR'  5  5000 ms  1
    036D: text_2numbers_styled 'STUNTPT' @125 @123  5000 ms  1
  19. Hier sollte man einen integeren Wert eintragen können, auch in Form einer Variable
    Funktioniert scheinbar nur in Missions-scripte
  20. Die Textbox stellt einen dunklen Kasten dar, in dem der Text eingeschlossen wird.
  21. Die Breite ist begrenzt, die Länge passt sich an.
  22. ;---Die einfache Textbox verschwindet nach ca. 10 Sekunden:
    03E5: text_box 'NEWWEAP'
    
    ;---Die permanente Textbox muss widerrufen werden:
    0512: permanent_text_box 'AMMU_H3'
    03E6: remove_text_box

  23. Für text_draw gibts viel Einstellungs-codes,
    die der text_draw-Zeile mit dem Eintragsnamen vorrangestellt werden
    Größe der Buchstaben, Schrift-Style, Zeilenlänge, usw.
  24. 0340: set_text_draw_color  0  0  0  255
    033F: set_text_draw_letter_width_height 0.8 3.5
    03E4: set_text_draw_align_right  0
    0341: unknown_text_stuff  0
    0342: set_text_draw_centered  0
    0343: set_text_linewidth  200.0
    0348: set_text_draw_proportional  1
    0345: set_text_draw_in_box  0
    0349: text_draw_style =  2
    
    033E: text_draw  50.0  80.0 'BB_12'
  25. Für Zahlendarstellungen ist das Koordinaten-Script als Beispiel geeignet
  26. 03F0: text_draw_toggle  1
    0001: wait  50 ms
    03F0: text_draw_toggle  0
    0001: wait  50 ms
    045A: text_draw_1number  50.0  425.0 'NUMBER' @3    ; value
    045A: text_draw_1number  200.0  425.0 'NUMBER' @4    ; value
    045A: text_draw_1number  350.0  425.0 'NUMBER' @5    ; value
    045A: text_draw_1number  100.0  425.0 'NUMBER' @11    ; value
    045A: text_draw_1number  250.0  425.0 'NUMBER' @12    ; value
    045A: text_draw_1number  400.0  425.0 'NUMBER' @13    ; value

  27. Ein schwarzes oder farbiges Feld auf dem Bildschirm,
  28. dessen Höhe und Breite bestimmt werden kann, wird mit diesem code erzeugt:
  29. 038E:  140.0  220.0  600.0  150.0  0  0  0  255;draw_box position;  BxH;   color ; alpha  255

  30. Text_draw-Darstellungen müssen widerrufen werden:
  31. 03F0: text_draw_toggle  0


    Eintragsnamen der GXT-Kategorie "main" können mit Textdarstellungs-codes jederzeit benutzt werden.
    Eintragsnamen anderer GXT-Kategorien NICHT!
    Die anderen GXT-Kategorien sind Missionen zugeordnet
    Dazu muss man das erst anmelden:
    054C: use_GXT_table 'RACETOR'
  32. In dieser Code-Zeile ist der Name der GXT-Kategorie einzutragen

  33. Die Stopuhr funktioniert nur mit Globalen Variablen und integeren Werten
  34. 014E: set_timer_to $time1 type  1
  35. Zuerst wird der Variable-Wert definiert, dann der Timer gestartet
    type 0 zählt aufwärts
    type 1 zählt abwärts
    Im Script wird die Variable abgefragt und am Ende der Timer abgeschaltet
    Ein Beispiel
  36. :Timer_1;;;--------------------------MB0.33/sascm.ini vom 1.Sep.2005
    03A4: name_thread 'TIM'
    
    :Timer_2
    0001: wait  0 ms
    00D6: if  0
    0256:   player $PLAYER_CHAR defined
    004D: jump_if_false ££Timer_2
    00D6: if  0
    00FF:   actor $PLAYER_ACTOR  1 (in-sphere)near_point_on_foot 2493.5  -1682.5  13.35 radius  1.0  1.0  1.0
    004D: jump_if_false ££Timer_2
    
    0004: $time1 =  8000  ;; integer values
    014E: set_timer_to $time1 type  1
    00A1: put_actor $PLAYER_ACTOR at 2524.5  -1677.5  19.95
    0002: jump ££Timer_3
    
    :Timer_3
    0001: wait  0 ms
    00D6: if  0
    0256:   player $PLAYER_CHAR defined
    004D: jump_if_false ££Timer_3
    00D6: if  21
    00FF:   actor $PLAYER_ACTOR  1 (in-sphere)near_point_on_foot 2493.5  -1682.5  13.35 radius  8.0  8.0  1.0
    001A:    1 > $time1  ;; integer values
    004D: jump_if_false ££Timer_3
    
    014F: stop_timer $time1
    00A1: put_actor $PLAYER_ACTOR at 2497.5  -1681.5  13.4
    0002: jump ££Timer_2


  37. Der Statusbalken funktioniert nur mit Globalen Variablen und integeren Werten
  38. 03C4: set_status_text_to $ActorHealth1  1 (bar) 'SYND_4'
  39. Zuerst wird der Variable-Wert definiert, dann der Statusbalken eingeschaltet
    Ein voller Balken entspricht 100
    Der Variable-Wert ist dementsprechend umzurechnen
    Im Script wird die Variable abgefragt und am Ende der Statusbalken abgeschaltet
    Ein Beispiel
  40. :StatusBar_1;;;--------------------------MB0.33/sascm.ini vom 1.Sep.2005
    03A4: name_thread 'STB'
    
    :ActorHealth_2
    0001: wait  0 ms
    00D6: if  0
    0256:   player $PLAYER_CHAR defined
    004D: jump_if_false ££ActorHealth_2
    00D6: if  0
    00FF:   actor $PLAYER_ACTOR  1 (in-sphere)near_point_on_foot 2493.5  -1678.5  13.35 radius  1.0  1.0  1.0
    004D: jump_if_false ££ActorHealth_2
    0247: request_model #VMAFF4
    0247: request_model #AK47
    
    :ActorHealth_3
    0001: wait  0 ms
    00D6: if  1
    0248:   model #VMAFF4 available
    0248:   model #AK47 available
    004D: jump_if_false ££ActorHealth_3
    009A: $killer1 = create_actor  24 #VMAFF4 at  2486.5  -1664.5  13.45
    0173: set_actor $killer1 z_angle_to  180.0
    01B2: give_actor $killer1 weapon  30 ammo  99999  ;; Load the weapon model before using this
    02E2: set_actor $killer1 weapon_accuracy_to  100
    0223: set_actor $killer1 health_to  3000
    0446: set_actor_immune_to_headshots $killer1  0
    05E2: AS_actor $killer1 kill_actor $PLAYER_ACTOR
    0249: release_model #VMAFF4
    
    :StatusBar_2
    0001: wait  0 ms
    00D6: if  0
    0256:   player $PLAYER_CHAR defined
    004D: jump_if_false ££StatusBar_3
    00D6: if  0
    8118:   NOT   actor $killer1 dead
    004D: jump_if_false ££StatusBar_3
    00D6: if  0
    0104:   actor $PLAYER_ACTOR near_actor $killer1 radius  200.0  200.0  10.0 sphere  0
    004D: jump_if_false ££StatusBar_3
    
    0226: $ActorHealth1 = actor $killer1 health
    0014: $ActorHealth1 /=  30  ;; integer values
    03C4: set_status_text_to $ActorHealth1  1 (bar) 'SYND_4'
    00D6: if  0
    001A:    20 > $ActorHealth1  ;; integer values
    004D: jump_if_false ££StatusBar_2
    0446: set_actor_immune_to_headshots $killer1  1
    0002: jump ££StatusBar_2
    
    :StatusBar_3
    0151: remove_status_text $ActorHealth1
    01C2: remove_references_to_actor $killer1 ;; Like turning an actor into a random pedestrian
    0002: jump ££ActorHealth_2


  41. Text in der german.gxt modifizieren

  42. Dazu bevorzuge ich den sagxtedit von Hammer83
  43. Saug Dir den Editor, packe eine Kopie der german.gxt in den Ordner
    wo sich die sagxtedit.exe befindet.
    Saug Dir dann noch diese INI und packe sie auch dorthin.

    Starte den sagxtedit und öffne jetzt die german.gxt, die sich bei der
    sagxtedit.exe befindet.

    Im linken oberen Fenster sind die GXT-Kategorien aufgelistet
    Im linken unteren Fenster sind die Eintragsnamen und der dazugehörige Text aufgelistet,
    die zur markierten GXT-Kategorie im linken oberen Fenster gehören
    Im rechten Fenster wird nur der Text dargestellt,
    der zum markierten Eintrag im linken unteren Fenster gehört

    Die Eintragsnamen des linken unteren Fensters werden in der main.scm benutzt

    Klick im linken oberen Fenster auf die Kategorie "main"
    Klick auf das suchen-icon (Fernglas)
    Jetzt gibts 2 Möglichkeiten für die Suche

    1."Find Name" / hier ist der Eintragsname als Suchbegriff einzugeben
    2."Find Value" / hier kann ein Suchbegriff eingegeben werden, der im darzustellenden Text enthalten sein soll

    Wähle jetzt 2."Find Value" und suche nach: dirtbike danger
    Der gefundene Eintragsname sollte RACE09 sein.
    Wenn das nicht der Fall ist sondern nur ein wirres Gemisch aus Zahlen und Buchstaben,
    dann must Du die ini-Datei importieren:

    Klick dazu wieder auf das suchen-icon (Fernglas) und wähle "String List Match"
    Ein Fenster erscheint,
    Klick auf Open,
    Ändere im öffnen-Fenster unten bei Dateityp um auf "ALL FILES *.*"
    Öffne dann über dieses Fenster die german.ini
    Bestätige mit OK

    Wähle jetzt 2."Find Value" und suche nach: dirtbike danger
    Der gefundene Eintragsname sollte RACE09 sein.

    Denk daran: sagxtedit.exe, german.gxt und german.ini sollen sich alle in einem Ordner befinden
    Mit der american.gxt funktionierts genauso.
    Dazu einfach german.ini in american.ini umbenennen.



  44. Modifizierten Texteintrag speichern:
    Beim Speichern ist sagxtedit etwas eigenartig.
    Nach dem Ändern eines darzustellenden Textes,
    erst auf einen anderen Eintragsnamen klicken und dann speichern


    Eintragsnamen der GXT-Kategorie "main" können mit Textdarstellungs-codes jederzeit benutzt werden.
    Eintragsnamen anderer GXT-Kategorien NICHT!
    Die anderen GXT-Kategorien sind Missionen zugeordnet
    Dazu muss man das erst anmelden:
    054C: use_GXT_table 'RACETOR'
  45. In dieser Code-Zeile ist der Name der GXT-Kategorie einzutragen
nothing