Jump to content
  • Sign Up
GTAGames.nl
Sign in to follow this  
JGuntherS

[SA|SCM] Een missie maken

Recommended Posts

JGuntherS

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 :)

Share this post


Link to post
Share on other sites
D@V!D

:tu: Goede tutorial, nog niet helemaal compleet maar dat had je al gezegd :)

ik had toch even een vraag...

0186: $61 = create_marker_above_car $60

wat betekend de $60? En hoe stel je deze code in? :D

Share this post


Link to post
Share on other sites
JGuntherS

$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!

Share this post


Link to post
Share on other sites
pimh

Vraagje: hoe maak ik een auto voor die marker met de 00A5 opcode?

Share this post


Link to post
Share on other sites
JGuntherS

Antwoordje :puh: : 00A5: $AUTO = create_car #MODELID at X Y Z. Die coördinaten zijn drijvende-komma (floating-point) getallen, bijvoorbeeld 3.0 of 678.9.

Share this post


Link to post
Share on other sites
pimh

Bedankt :bier:

Het werkt zeker alleen als het midden in een missie script staat, maar dat is erg logisch :bonk:

Share this post


Link to post
Share on other sites
D@V!D

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)

Share this post


Link to post
Share on other sites
JGuntherS

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.

Edited by JGuntherS

Share this post


Link to post
Share on other sites
JGuntherS

* BUMP *

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

Share this post


Link to post
Share on other sites
Flame^
* 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: .

Share this post


Link to post
Share on other sites
JGuntherS

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 :).

Edited by JGuntherS

Share this post


Link to post
Share on other sites
Blastov

Waarom post je dan ? Daar hebben wij toch niks aan ? Zeg dan wat je niet snapt.

Share this post


Link to post
Share on other sites
JGuntherS
Ik snap er geen zak van :bonk:

Wat snap je precies niet? Dan kunnen we je verder helpen :).

Blaster was me voor :ch:.

Edited by JGuntherS

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...