Missie scripten (GTA2)
Hoofdpagina > GTA2 > Modding > Missie scripten
Missies staan in aparte scripts (multiscripts), in een map met dezelfde naam als het hoofdscript (mainscript). Missies krijgen ook de naam van het mainscript, maar met een toevoeging erachter. Deze toevoeging bestaat uit de eerste letter van de gang (die wel verschillend moet zijn), een letter die aangeeft of het een groene, gele of rode missie is en een cijfer dat aangeeft welke missie het is. Als we dezelfde benamingsmethode als de originele scripts aanhouden, dan heeft de voorbeeldmap dus de volgende bestanden:
- tst.gmp voor het level zelf
- tst.mis voor het mainscript
- tst voor de map waarin de missies staan
- tst_te1 voor de eerste groene missie van de Testgang
- tst_vm3 voor de derde gele missie van de Voorbeeldgang
- tst_ph2 voor de tweede rode missie van de Proefgang
In plaats van LEVELSTART en LEVELEND gebruikt een multiscript MISSIONSTART en MISSIONEND. De werking blijft hetzelfde, al staan de missies van GTA2 geheel in subroutines. Hierdoor staat vrijwel alle code voor LEVELSTART.
Wanneer je een missiescript door de compiler wilt halen, kun je gewoon het mainscript selecteren. De compiler zoekt dan automatisch de externe missiescripts op, mits ze in het mainscript opgeroepen worden en de missiescripts in een map staan die op dezelfde locatie als het mainscript te vinden is.
Voorbeeld
Het script hieronder bevat een complete, eenvoudige missie. Er wordt meerdere keren een COUNTER uit het hoofdscript opgeroepen. Deze counters houden onder andere bij hoeveel missies er gehaald en gefaald zijn, of de speler momenteel een missie doet en zo ja, voor welke gang hij een missie doet. Dit is een onderdeel van een uitgebreid systeem dat de missiestructuur van GTA2 laat functioneren. Extra counters die in de missie gecreëerd worden, moeten een unieke naam hebben die ook in het mainscript niet voorkomt.
Het gaat om de eerste groene missie ("green_1") van de Zaibatsu Corporation ("zaibgang"). Bij het aannemen van de missie worden er een Eddy en een Panto gecreëerd. Om te slagen voor de missie moet je in de Eddy stappen. Stap je in de Panto, word je gearresteerd, of verlies je al je health, dan faal je de missie.
COUNTER main_zaibgang_green_1 = 1
COUNTER zaibgang_green_1_in_eddy = 0
COUNTER zaibgang_green_1_in_panto = 0
CAR_DATA zaibgang_green_1_eddy
CAR_DATA zaibgang_green_1_panto
FORWARD clean_up_zaibgang_green_1:
zaibgang_green_1:
SET flag_failed_zaibgang_green_1 = 0 //Nodig als de speler de missie eerder gefaald heeft.
SET flag_on_mission = 1 //De speler is nu bezig met een missie, en kan geen andere starten
SET flag_on_zaibgang_mission = 1 //De speler is nu bezig met een Zaibatsu-missie
zaibgang_green_1_eddy = CREATE_CAR ( 130.5 , 114.5 , 2.0 ) 5 270 EDSEL END //Eddy wordt gecreëerd
zaibgang_green_1_panto = CREATE_CAR ( 130.5 , 116.5 , 2.0 ) 7 270 FIAT END //Panto wordt gecreëerd
DISPLAY_MESSAGE ( 3847 ) // Missietitel
DISPLAY_BRIEF_NOW ( 3800 ) // Opdrachtgever legt de missie uit.
WHILE_EXEC ( main_zaibgang_green_1 = 1 ) //Volgende commando's gelden zolang je nog niet in één van de wagens zit
IF ( IS_CHARACTER_IN_CAR ( player1 , zaibgang_green_1_eddy ) ) //Wanneer de speler in de Eddy stapt...
SET zaibgang_green_1_in_eddy = 1
SET main_zaibgang_green_1 = 0
ENDIF
IF ( IS_CHARACTER_IN_CAR ( player1 , zaibgang_green_1_panto ) ) //Wanneer de speler in de Panto stapt...
SET zaibgang_green_1_in_panto = 1
SET main_zaibgang_green_1 = 0
ENDIF
IF ( zaibgang_green_1_in_eddy = 1 )
CLEAR_ALL_BRIEFS ( ) //Verwijderd alle teksten.
DISPLAY_BRIEF ( 7022 ) // "Well done! You passed!"
SET flag_passed_zaibgang_green_1 = 1 //Je hebt deze missie gehaald
DISPLAY_MESSAGE ( 3100 ) // "JOB COMPLETE!"
ADD_SCORE ( player1 , 3000 )//Je krijgt de beloning
ADD_MULTIPLIER ( player1 , 1 ) //Je krijgt een multiplier
CHANGE_GANG_CHAR_RESPECT_AND_UPDATE ( zaibgang , player1 , 1 ) //Je krijgt meer respect
CLEAR_WANTED_LEVEL ( player1 ) //Wanted level wordt verwijderd
SET_PHONE_DEAD ( zaibgang_green_phone_1 ) //De telefoon wordt uitgeschakeld
DISABLE_THREAD_TRIGGER ( thr_zaibgang_green_1 ) //De missie-thread wordt uitgeschakeld
RETURN
ENDIF
IF ( zaibgang_green_1_in_panto = 1 )
CLEAR_ALL_BRIEFS ( )
DISPLAY_BRIEF ( 3683 ) // "You blew it, baby! The job's over for you."
CHANGE_GANG_CHAR_RESPECT_AND_UPDATE ( zaibgang , player1 , -1 )
SET flag_failed_zaibgang_green_1 = 1 //Je hebt deze missie gefaald
// SET flag_failed_zaibgang_green_phone_1a = 1 //Je hebt deze missie gefaald en mag hem niet overdoen
DISPLAY_MESSAGE ( 3730 ) // "JOB FAILED!"
RETURN
ENDIF
ENDWHILE
RETURN
//---------------------------------------------------------------------------------------------
clean_up_zaibgang_green_1:
IF ( flag_passed_zaibgang_green_1 = 1 )
++ flag_all_missions_passed //De speler heeft een missie gehaald
++ flag_zaibgang_missions_passed //De speler heeft een Zaibatsu-missie gehaald
IF ( flag_zaibgang_missions_passed = 7 ) // Als de speler 7 (alle) Zaibatsu missies haalt...
DISPLAY_MESSAGE ( 3674 ) // "ALL ZAIBATSU JOBS DONE!"
DISPLAY_BRIEF ( 3675 ) //"Congratulations, Gecko! You have succeeded in completing ALL the Zaibatsu jobs!"
ENDIF
ENDIF
IF ( flag_failed_zaibgang_green_1 = 1 )
++ flag_all_missions_failed //De speler heeft een missie gefaald
++ flag_zaibgang_missions_failed //De speler heeft een Zaibatsu-missie gefaald
ENDIF
IF ( CHECK_DEATHARREST_EXECUTED ( ) ) //Als de speler tijdens de missie wordt gearresteerd of gedood...
++ flag_all_missions_failed //De speler heeft een missie gefaald
++ flag_zaibgang_missions_failed //De speler heeft een Zaibatsu-missie gefaald
CHANGE_GANG_CHAR_RESPECT_AND_UPDATE ( zaibgang , player1 , -1 )
ENDIF
MISSION_HAS_FINISHED ( )
SET flag_on_mission = 0 //Speler is niet meer bezig met een missie
SET flag_on_zaibgang_mission = 0 //Speler is niet meer bezig met een Zaibatsu-missie
RETURN
MISSIONSTART
GOSUB zaibgang_green_1:
GOSUB clean_up_zaibgang_green_1:
MISSIONEND
| Mapping | Editor (Epic) · Gebouwen · Wegen · Water & animaties · Slopes · Flat tiles · Collision info · Rand van een level · Zones · Level ingame zetten | ||
|---|---|---|---|
| Scripting | Declareren: | Basisscript · Script Compiler (MIS Pad) · Codelijsten · Commando's · Voertuigen · Objecten · Geluiden · Personages · Groepen · Deuren | |
| Programmeren: | IF · WHILE · COUNTERs · Subroutines · THREAD TRIGGERs · EXEC · PARK · Kill Frenzies · PHONEs · Singleplayerscript · Missies · Jesus saves | ||
| Beide | Belichting · Car shops · Cranes & crushers · Gangs · Metro · Multiplayerlevels | ||
| Bestandstypes | .gci · .gmp · .gxt · .mis · .mmp · .pal · .scr · .seq · .sty · .tmp | ||
| Overig | Texting · Physics (Lijst) · Texturing · Voertuigen maken · Plattegrond · Terminologie · Levels installeren | ||