Jump to content

[SA|SCM] Een missie maken


JGuntherS

Recommended Posts

Mijn 2e tutorial: Het maken van een missie in SA.

Inhoudsopgave:

-- Introductie

-- Een missie definiëren

-- Een missie starten

-- Het "frame" van een missie

-- De plek in het script voor de missie

-- Handige stukjes code

Introductie:

Ik raad je aan eerst een beetje ervaring op te doen. Je kunt deze tutorial volgen. IF's en threads zijn heel belangrijk voor het schrijven van een missie. Deze tekst, geschreven door PatrickW, geeft je ook een boel informatie. Het is dan wel voor VC, maar er zijn vele overeenkomsten met het SA-script-formaat.

Een missie definieren:

Een missie moet je aan het begin van het script definiëren. Je moet je missie bij dit stuk zetten:

:JGS1
0001: wait 100 ms
03A4: name_thread 'PANC_1'
0005: $2000 = 40.30668
0005: $2001 = 20.28515
0005: $2002 = 14.26602

:JGS1_0
02A7: $2003 = create_icon_marker_and_sphere  34 at  $2000 $2001 $2002
0004: $eiland_m1_on = 1

:JGS1_2
0001: wait 100 ms
00D6: if 0
0038:    $ON_MISSION == 0
004D: jump_if_false ££JGS1_5
00D6: if 1
0038:    $ON_MISSION == 0
0038:    $eiland_m1_on == 0
004D: jump_if_false ££JGS1_3
02A7: $2003 = create_icon_marker_and_sphere  34 at  $2000 $2001 $2002
0004: $eiland_m1_on = 1

:JGS1_3
00D6: if 0
0256:    player $PLAYER_CHAR defined
004D: jump_if_false ££JGS1_2   
00D6: if 0
00FF:    actor $PLAYER_ACTOR 0 ()near_point_on_foot $2000 $2001 $2002 radius 3.0 3.0 2.0
004D: jump_if_false ££JGS1_2
00D6: if 0
03EE:   player $PLAYER_CHAR controllable
004D: jump_if_false ££JGS1_2
0164: disable_marker $2003
0004: $eiland_m1_on = 0
00BA: text_styled 'JGS_M1'  1500 ms  2
0050: gosub ££PANCCAM
0417: start_mission (missienummer)

:JGS1_4
0001: wait 0 ms
00D6: if 0
0038:    $m_135_tried == 1
004D: jump_if_false ££JGS1_4
0004: $m_135_tried = 0
00D6: if 0
0038:    $m_135_done == 1
004D: jump_if_false ££JGS1_2
00BE: text_clear_all 
03E6: remove_text_box
01E3: text_1number_styled 'M_PASS'  1000  5000 ms  1
0318: set_latest_mission_passed 'PANCA_1'
030C: set_mission_points +=  1
0394: play_music  1
01BD: $184 = current_time_in_ms 
0109: player $PLAYER_CHAR money +=  1000
0110: clear_player $PLAYER_CHAR wanted_level
004E: end_thread

:JGS1_5
00D6: if 0
0038:    $eiland_m1_on == 1
004D: jump_if_false ££JGS1_2
0164: disable_marker $2003
0004: $eiland_m1_on = 0
0002: jump ££JGS1_2   

:PANCCAM
0002: jump ££PANCCAM5

:PANCCAM1
0169: set_fade_color  0  0  0
016A: fade  0 ()  500 ms

:PANCCAM2
00D6: if  0
016B:   fading
004D: jump_if_false ££PANCCAM3
0001: wait  0 ms
00BE: text_clear_all
03E6: remove_text_box
0002: jump ££PANCCAM2

:PANCCAM3
00D6: if  0
0256:   player $PLAYER_CHAR defined
004D: jump_if_false ££PANCCAM4
016A: fade  0 ()  0 ms
02EB: restore_camera_with_jumpcut
0687: $PLAYER_ACTOR 
016A: fade  0 ()  0 ms

:PANCCAM4
0051: return

:PANCCAM5
00D6: if  0
0256:   player $PLAYER_CHAR defined
004D: jump_if_false ££PANCCAM6
03E6: remove_text_box
01B4: set_player $PLAYER_CHAR frozen_state  0 (frozen)
0050: gosub ££PANCCAM1

:PANCCAM6
0051: return

Kijkt en leert. Een goede oefening is trouwens om deze thread te begrijpen.

Het "frame" van een missie:

Het frame van een missie ziet er ongeveer zo uit:

:M_BEGIN
0050: gosub £M_CODE
00D6: if 0
0112:	wasted_or_busted
004D: jump_if_false £M_KLAAR
0050: gosub £M_FAIL

:M_KLAAR
0050: gosub £M_OPSCHONEN
004E: end_thread

:M_CODE
;; de echte code van de missie
;; als de missie faalt, moet je deze code gebruiken: 0002: jump £M_FAIL

:M_PASS
;; als je mijn thread gebruikt moet je deze code hier neerzetten: 0004: $m_135_done = 1 
0002: jump £M_OPSCHONEN

:M_FAIL
00BA: text_styled 'M_FAIL'  5000 ms  1; MISSION FAILED!

:M_OPSCHONEN
;; opschoondingen hier
;; als je mijn thread gebruikt moet je deze code hier neerzetten: 0004: $m_135_tried = 1
0051: return

De plek in het script voor de missie:

Een nieuwe missie zet je altijd onder laatse missie en boven het eerste externe script (in de normale SA is dat externe script AAA)

In de normale SA:

01B4: set_player $PLAYER_CHAR frozen_state 1 (unfrozen)

03BF: set_player $PLAYER_CHAR ignored_by_everyone_to 0 (false)

02A3: toggle_widescreen 0 (off)

0004: $ON_MISSION = 0 ;; integer values

01BD: $184 = current_time_in_ms

00D8: mission_cleanup

004E: end_thread

0051: return

Hier komt je missie

;-----------------------------------------------------

DEFINE EXTERNAL_SCRIPT_START AAA

; Originally: player using parachute

; The AAA script is created internally

;-----------------------------------------------------

DEFINE EXTERNAL_SCRIPT_START AMMU

; Originally: npc actors with parachutes

0005: $9585 = 0.0 ;; floating-point values

Handige stukjes code:

Racecheckpoints:

Racecheckpoints maak je met opcode 06D5 op deze manier:

06D5: $cpID = create_racing_checkpoint_at X  Y  Z  X2  Y2  Z2  type 0 radius 3.0

X Y Z zijn de coordinaten van dit checkpoint, X2 Y2 Z2 zijn de coordinaten van het volgende checkpoint. Het type kan 0 t/m 4 zijn. Als het 0 is, dan wordt het een rood CP met een pijl naar het volgende CP. Bij 1 wordt het een rood finish-CP. 2 weet ik niet, en 3/4 zouden corona's moeten zijn, dat heb ik zelf niet gecontroleerd.

Vervolgens moet er een stuk code komen dat controleert of de speler door het CP heen is gegaan. Meestal is dat zoiets als dit:

:MissC2a
0001: wait 0
00D6: if 0
00EE:   actor $PLAYER_ACTOR  0 ()near_point_in_car  X  Y radius  7.0  7.0
004D: jf ££MissC2a
-- meer code --

Een raceCP vernietig je weer met 06D6 op deze manier:

06D6: destroy_racing_checkpoint $cpID

OPROEP: heeft iemand nog stukjes code die in dit rubriekje passen?

Voor troubleshooting kun je onderaan in de tutorial die helemaal bovenaan in deze post genoemd wordt kijken.

Deze tutorial is nog onder constructie, ik ga hem nog uitbreiden. Als je nog suggesties/andere dingen hebt, kun je die hier posten. Veel plezier :)

Link to comment
Delen op andere websites

$60 is de variabele (om precies te zijn, een handle-variabele) van de auto waarboven een marker/pijl moet worden geplaatst. Dat moet een auto zijn die gemaakt is met de opcode 00A5. Het mag GEEN geparkeerde auto zijn die gemaakt wordt met 014B/014C!

Link to comment
Delen op andere websites

het gaat al goed met mijn missie :)

:)

ik ben toch nog even een vraagje:

hoe zet je tekst/uitleg van je missie bij je missie?

:)

v.b.--> rechtsonderin beeld zie je bij het begin van een missie eerst Gele letters en daarna uitleg in witte letters onderin beeld.

:)

mijn vraag: hoe krijg je die gele en witte letters?

8)

Link to comment
Delen op andere websites

Er zijn bepaalde opcodes voor tekst, en ik moet eerlijk bekennen, ik ken ze ook niet allemaal :puh: . Een goede plek om te zoeken is op deze website.

De gele letters kan ik je al geven: 00BA: text_styled 'GXTENTRY' 1500 ms 2. Op de plaats van GXTENTRY moet je de naam van het stukje tekst uit een GXT-bestand zetten.

Bewerkt: door JGuntherS
Link to comment
Delen op andere websites

  • 2 weken later...
* BUMP *

Heeft iemand nog ideeen/dingen die ik in deze tut moet zetten? Ik kan zelf niet zoveel meer bedenken.

Misschien kan je wat codes voor CP's etc laten zien, ikzelf vind deze tutorial er al erg aardig uitzien en wat al wat meer van SCM dan voorheen :puh: .

Link to comment
Delen op andere websites

Goed idee, ik denk dat ik gewoon een heel stuk met handige stukjes code maak :).

Heeft iemand daar nog ideeën voor?

EDIT: Het racecheckpoint deel is toegevoegd :).

Bewerkt: door JGuntherS
Link to comment
Delen op andere websites

  • 4 weken later...

Een reactie plaatsen

Je kan nu een reactie plaatsen en pas achteraf registreren. Als je al lid bent, log eerst in om met je eigen account een reactie te plaatsen.

Gast
Op dit onderwerp reageren...

×   Je hebt text geplaatst met opmaak.   Opmaak verwijderen

  Only 75 emoji are allowed.

×   Je link is automatisch ingevoegd.   In plaats daarvan weergeven als link

×   Je vorige bewerkingen zijn hersteld.   Alles verwijderen

×   You cannot paste images directly. Upload or insert images from URL.

  • Recent actief   0 leden

    • Er zijn hier geen geregistreerde gebruikers aanwezig.
×
×
  • Create New...