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 |