Kill Frenzies scripten (GTA2)
Hoofdpagina > GTA2 > Modding > Kill Frenzies
Een Kill Frenzy is in principe een kleine missie die gestart wordt met een trigger wanneer je op een Kill Frenzy-icoon stapt of in een bepaald voertuig gaat zitten. Gelukkig hebben Kill Frenzies een eigen template-code, wat betekent dat je niet alles zelf hoeft te scripten.
In GTA2 zijn er twee soorten Kill Frenzies: Kill Frenzies te voet en Kill Frenzies in een voertuig. Kill Frenzies te voet zijn te herkennen aan de bekende groene pick-up met een doodshoofd. Kill Frenzies in een voertuig kun je daarentegen pas ontdekken wanneer je instapt. Voertuig-Kill Frenzies vereisen iets meer scriptwerk, aangezien je dan ook een wagen en vaak ook een wapen moet scripten.
Inhoud
Algeneme Kill Frenzy commando's
Om te beginnen moet je een aantal dingen scripten die je voor iedere Kill Frenzy opnieuw kunt gebruiken, namelijk een TIMER, die bijhoudt hoeveel tijd je nog hebt om de Kill Frenzy te voltooien, een ONSCREEN_COUNTER, die de tijd je nog hebt laat zien en een SAVED_COUNTER, die bijhoudt hoeveel Kill Frenzies er gepasseerd zijn. Verder moet je het spel vertellen hoeveel Kill Frenzies er zijn, hoeveel je er gehaald hebt en hoeveel je er niet gehaald hebt. Deze informatie zie je wanneer je GTA2 pauzeert.
TIMER_DATA kf_timer_name ONSCREEN_COUNTER kf_onscreen_counter_name SAVED_COUNTER kf_saved_counter_name DECLARE_TOTAL_SECRETS ( 2 ) //Dit is het aantal Kill Frenzies. In deze tutorial maken we er twee. SAVED_COUNTER kill_frenzies_passed = 0 SAVED_COUNTER kill_frenzies_failed = 0 DECLARE_SECRETS_PASSED_FLAG ( kill_frenzies_passed ) DECLARE_SECRETS_FAILED_FLAG ( kill_frenzies_failed )
De TIMER, ONSCREEN_COUNTER en de "kf_saved_counter" zijn nodig om de tijd en score van de Kill Frenzy bij te houden. "kill_frenzies_passed" en "kill_frenzies_failed" zijn twee COUNTERs die als FLAG aangewezen worden om het aantal geslaagde en mislukte Kill Frenzies bij te houden. Deze informatie wordt weergegeven in het pauzemenu. Als "kill_frenzies_passed" het aantal dat opgegeven wordt bij DECLARE_TOTAL_SECRETS
bereikt, wordt er een bonuslevel vrijgegeven.
Kill Frenzy toevoegen
Het belangrijkste gedeelte van een Kill Frenzy is de BONUS. Dit is een commando dat bijhoudt hoeveel doelwitten van een bepaald type de speler binnen een bepaalde tijd vernield of doodt. Iedere Kill Frenzy krijgt zo'n BONUS, die allen apart gedeclareerd moeten worden met de volgende code:
BONUS kf_naam
kf_naam | De naam van deze Kill Frenzy. Je hebt deze naam later nodig. |
BONUSsen kunnen ook voor andere doelen gebruikt worden. Zo bepalen twee BONUSsen in de missie "Gang War!" of je al vijftig gangleden hebt vermoord terwijl je in een gangvoertuig zit.
Objecten
Vervolgens heeft de Kill Frenzy een Kill Frenzy-icoon of een voertuig nodig. Je kunt deze scripten met de gewone OBJ_DATA- en CAR_DATA-commando's:
OBJ_DATA kf_icoon_naam = ( X.x , Y.y , Z.z ) rotatie KILL_FRENZY CAR_DATA kf_voertuig_naam = ( X.x , Y.y , Z.z ) kleur rotatie voertuig
Subroutine
Onder deze codes voeg je een subroutine toe:
FORWARD kf_subroutine_naam: //Hier komt de THREAD_TRIGGER kf_subroutine_naam: //Hier komen de KF_TEMPLATEs RETURN
THREAD_TRIGGER
Om de Kill Frenzy te kunnen starten wanneer de speler het icoon oppakt of in de auto stapt voeg je een THREAD_TRIGGER toe. In GTA2 zijn dit triggers die wachten tot de speler in een bepaald gebied komt (waarop een Kill Frenzy-icoon geplaatst wordt) of tot de speler in een voertuig stapt. Je kunt echter ook de andere triggers gebruiken om je eigen systeem te creëren. Zo kun je met THREAD_WAIT_FOR_ANSWER_PHONE
de Kill Frenzy starten via een rinkelende telefoon. Een nadeel hierbij is dat de telefoon verdwijnt zodra de Kill Frenzy start.
THREAD_TRIGGER kf_thread_trigger_naam = THREAD_WAIT_FOR_CHAR_IN_AREA ( speler , X.x , Y.y , Z.z , breedte , diepte , kf_subroutine_naam: ) THREAD_TRIGGER kf_thread_trigger_naam = THREAD_WAIT_FOR_CHAR_IN_CAR ( speler , kf_voertuig_naam , kf_subroutine_naam: )
kf_thread_trigger_naam | Een unieke naam. |
speler | De naam van de player_ped. |
X.x , Y.y , Z.z | De coördinaten van het Kill Frenzy icoon. |
breedte , diepte | De afmetingen van het gebied waarin het icoon zich bevindt. Gebruik 0.2 , 0.2 als standaard afmetingen van het icoon. |
kf_voertuig_naam | De naam van het voertuig van de Kill Frenzy |
kf_subroutine_naam: | De naam van de subroutine die je eerdere gemaakt hebt. Vergeet de : niet. |
START_BASIC_KF_TEMPLATE
In de subroutine komen de specificaties van de Kill Frenzy. Deze staan in drie commando's: twee KF_TEMPLATEs en een BONUS_CHECK. De eerste KF_TEMPLATE ziet er zo uit:
START_BASIC_KF_TEMPLATE ( kf_thread_trigger_naam , tekst_ID , kf_icoon_naam/kf_voertuig_naam , speler , wapentype )
kf_thread_trigger_naam | Naam van de THREAD_TRIGGER die je eerder gemaakt hebt. |
tekst_ID | Het ID van de tekst die de opdracht geeft. |
kf_icoon_naam/kf_voertuig_naam | De naam van het icoon of voertuig waarmee de Kill Frenzy start |
speler | De naam van de player_ped |
wapentype | Het wapen dat de speler met onbeperkte munitie krijgt. Voer hier NO_WEAPON in als er geen wapen nodig is. Na afloop van de Kill Frenzy verdwijnt dit wapen en krijgt de speler zijn eigen wapens weer terug. Dit geldt ook voor voertuigwapens: wil je dat het voertuig na de Kill Frenzy de wapens behoudt kun je deze geven met het standaard GIVE_WEAPON -commando. Dit is niet nodig bij Tanks, Armed Land Roamers en Fire Trucks: deze voertuigen krijgen automatisch hun standaard wapen.
|
START_BONUS_CHECK
De BONUS verzorgt de score en tijd die wordt weergegeven op de ONSCREEN_COUNTER, zodat de speler weet hoe lang hij nog heeft en hoeveel doelwitten hij nog moet. Hiervoor gebruik je een van de volgende START_BONUS_CHECKs:
Bonusnaam = START_BONUS_CHECK ( zone , tijd , hoeveelheid , score , type , exclusive_modus , beschadigingstype , aanvalsvoertuig , gangnaam ) Bonusnaam = START_BONUS_CHECK ( zone , tijd , hoeveelheid , score , type , exclusive_modus , beschadigingstype , aanvalsvoertuig , gangnaam , uiterlijk ) Bonusnaam = START_BONUS_CHECK ( zone , tijd , hoeveelheid , score , type , exclusive_modus , beschadigingstype , aanvalsvoertuig , voetgangersbestemming ) Bonusnaam = START_BONUS_CHECK ( zone , tijd , hoeveelheid , score , type , exclusive_modus , beschadigingstype , aanvalsvoertuig , voetgangersbestemming , uiterlijk ) Bonusnaam = START_BONUS_CHECK ( zone , tijd , hoeveelheid , score , type , exclusive_modus , beschadigingstype , aanvalsvoertuig , doelwitvoertuig ) Bonusnaam = START_BONUS_CHECK ( zone , tijd , hoeveelheid , score , type , exclusive_modus , beschadigingstype , aanvalsvoertuig , doelwitvoertuig , uiterlijk )
Bonusnaam | De naam die je eerder aan de Kill Frenzy hebt gegeven. |
Zone | In welke zone de speler de Kill Frenzy moet spelen. Geef NO_ZONE wanneer de zone niet uitmaakt.
|
Tijd | Hoeveel tijd de speler heeft om de Kill Frenzy te voltooien. 30 is één seconde, 1800 is één minuut. |
Hoeveelheid | Hoeveel voertuigen of voetgangers de speler overhoop moet schieten om de Kill Frenzy te halen. |
Score | De extra beloning die de speler krijgt voor het voltooien van de Kill Frenzy. Bij Kill Frenzies wordt de beloning geregeld via de KF_TEMPLATE en staat deze waarde op '0', al is het wel mogelijk om deze extra beloning toe te voegen. |
type | Wat het doelwit is: voetgangers (CHAR ) of wagens (CAR ).
|
exclusive_modus | EXCLUSIVE betekent dat de Kill Frenzy faalt als de speler een doelwit op een 'verkeerde' manier doodt of vernietigt. NOT_EXCLUSIVE betekent dat de Kill Frenzy dan niet faalt. EXCLUSIVE wordt in GTA2 in Kill Frenzies niet gebruikt, al is dit wel mogelijk.
|
beschadigingstype | Hoe de speler zijn doelwitten moet uitschakelen. Zie de beschadigingstypes in de lijst onderaan de pagina. |
aanvalsvoertuig | In welk voertuigmodel de speler moet zitten tijdens de Kill Frenzy. Neem NONE wanneer het voertuig niet uitmaakt.
|
doelwitvoertuig | Het model van het voertuig dat de speler moet vernielen. Neem NONE wanneer het model niet uitmaakt. Merk op dat COPCAR alle politie-, FBI- en legervoertuigen goedkeurt.
|
Gangnaam | De naam van de gang die het doelwit is. Gebruik de naam die je aan de gang gegeven hebt in het SET_GANG_INFO-commando. |
Voetgangersbestemming | De bestemming van het voetgangers-doelwit. Zie de lijst onderaan de pagina. |
uiterlijk | Het uiterlijk van de voetganger of de kleur van de wagen. |
DO_BASIC_KF_TEMPLATE
De laatste instellingen voeg je toe met de DO_BASIC_KF_TEMPLATE. Dit houdt bij wanneer de Kill Frenzy gehaald of mislukt is. Dit gebeurt los van de BONUS, waardoor enkele waardes in zowel de START_BONUS_CHECK als de DO_BASIC_KF_TEMPLATE worden opgegeven. Verzeker jezelf ervan dat deze instellingen gelijk zijn!
DO_BASIC_KF_TEMPLATE ( bonusnaam , timernaam , tijd , on_screen_counternaam , saved_counternaam, hoeveelheid, tekst , player , beloning , beloninghoeveelheid )
kf_naam | De naam die je eerder aan de Kill Frenzy hebt gegeven |
timernaam | De naam die je eerder aan de TIMER hebt gegeven |
Tijd | Hoeveel tijd de speler heeft om de Kill Frenzy te voltooien. Let op: 1 is één seconde, dus deze waarde verschilt van die in de BONUS. |
on_screen_counternaam | De naam die je eerder aan de ON_SCREEN_COUNTER hebt gegeven |
Hoeveelheid | Hoeveel voertuigen of voetgangers de speler overhoop moet schieten om de Kill Frenzy te halen. |
Tekst_ID | Het ID van de tekst die de opdracht geeft. |
speler | De naam van de player_ped |
Beloning | Welke beloning de speler krijgt bij het voltooien van de Kill Frenzy. Kies uit NOTHING (niets), SCORE (geld), LIVES (levens) of MULT (multiplier)
|
beloninghoeveelheid | De kwantiteit van de beloning. Bij NOTHING zet je dit op '0'.
|
Voorbeeld
Hieronder staat een voorbeeldscript van twee complete Kill Frenzies. In de eerste Kill Frenzy is het doel om tien voertuigen binnen 30 seconden op te blazen met een rocket launcher, en in de tweede is het doel om 30 voetgangers binnen een minuut te vermoorden met een Fire Truck met vehicle flame thrower.
ONSCREEN_COUNTER onscreen_counter_kill_frenzy SAVED_COUNTER saved_counter_kill_frenzy TIMER_DATA timer_kill_frenzy DECLARE_TOTAL_SECRETS ( 2 ) SAVED_COUNTER kill_frenzies_passed = 0 SAVED_COUNTER kill_frenzies_failed = 0 DECLARE_SECRETS_PASSED_FLAG ( kill_frenzies_passed ) DECLARE_SECRETS_FAILED_FLAG ( kill_frenzies_failed ) OBJ_DATA icon_kill_frenzy_1 = ( 102.0 , 92.0 , 2.0 ) 0 KILL_FRENZY CAR_DATA kf_firetruck = ( 114.5 , 92.5 , 2.0 ) 1 270 FIRETRUK GIVE_WEAPON ( kf_firetruck , CAR_FLAMETHROWER ) BONUS kill_frenzy_1 BONUS kill_frenzy_2 FORWARD do_kill_frenzy_1: FORWARD do_kill_frenzy_2: //vernietig 10 voeruigen met een rocket launcher in 30 sec THREAD_TRIGGER thr_kill_frenzy_1 = THREAD_WAIT_FOR_CHAR_IN_AREA ( grnplayer , 102.0 , 92.0 , 2.0 , 0.2 , 0.2 , do_kill_frenzy_1: ) do_kill_frenzy_1: START_BASIC_KF_TEMPLATE ( thr_kill_frenzy_1 , 1804 , icon_kill_frenzy_1 , grnplayer , ROCKET_LAUNCHER ) kill_frenzy_1 = START_BONUS_CHECK ( no_zone , 900 , 10 , 0 , CAR , not_exclusive , BY_ROCKET_LAUNCHER , NONE , NONE ) DO_BASIC_KF_TEMPLATE ( kill_frenzy_1 , timer_kill_frenzy , 30 , onscreen_counter_kill_frenzy , saved_counter_kill_frenzy , 10 , 1804 , grnplayer , SCORE , 50000 ) RETURN //vermoord 30 peds met een fire truck with flame thrower in 60 sec THREAD_TRIGGER thr_kill_frenzy_2 = THREAD_WAIT_FOR_CHAR_IN_CAR ( grnplayer , kf_firetruck , do_kill_frenzy_2: ) do_kill_frenzy_2: START_BASIC_KF_TEMPLATE ( thr_kill_frenzy_2 , 1804 , kf_firetruck , grnplayer , CAR_FLAMETHROWER ) kill_frenzy_2 = START_BONUS_CHECK ( no_zone , 1800 , 30 , 0 , CHAR , not_exclusive , BY_FLAMETHROWER , NONE , NO_OCCUPATION ) DO_BASIC_KF_TEMPLATE ( kill_frenzy_2 , timer_kill_frenzy , 60 , onscreen_counter_kill_frenzy , saved_counter_kill_frenzy , 30 , 1804 , grnplayer , SCORE , 50000 ) RETURN
Handmatige Kill Frenzies
De twee commando's van de BASIC_KF_TEMPLATE
zijn niets meer dan 'shortcuts' voor een verzameling andere commando's. Tijdens de ontwikkeling werden de Kill Frenzies aanvankelijk gescript op een andere wijze, die meer op de methode van Grand Theft Auto leek. De commando's voor deze methode zijn nog steeds beschikbaar, wat het mogelijk maakt om extra code toe te voegen en zo afwijkende Kill Frenzies te creëren. Doordat de gesproken teksten "Kill Frenzy!", "Frenzy passed!" en "Frenzy failed!" ook geregeld worden door de BASIC_KF_TEMPLATE
, kunnen deze bij handmatige Kill Frenzies echter niet gebruikt worden.
Voorbeeld
Een handmatig script dat op allerlei manieren uit te breiden is kan er als volgt uitzien:
THREAD_TRIGGER thr_kill_frenzy_1 = THREAD_WAIT_FOR_CHAR_IN_AREA ( speler , 102.0 , 92.0 , 2.0 , 0.2 , 0.2 , do_kill_frenzy_1: ) do_kill_frenzy_1: DISPLAY_MESSAGE ( 7100 ) //KILL FRENZY! SET_KF_WEAPON ( speler , ROCKET_LAUNCHER ) //Geeft speler de speler een rocket launcher met oneindig munitie kill_frenzy_1 = START_BONUS_CHECK ( NO_ZONE , 1800 , 10 , 0 , CAR , NOT_EXCLUSIVE , BY_ROCKET_LAUNCHER , NONE , NONE ) //Vernietig 10 voertuigen met een rocket launcher binnen een minuut. DISPLAY_TIMER ( kf_timer , 60 ) WHILE_EXEC ( NOT ( HAS_BONUS_FINISHED ( kill_frenzy_1 ) ) ) //Plaats hier codes die uitgevoerd moeten worden zolang de Kill Frenzy duurt. ENDWHILE CLEAR_TIMER ( kf_timer ) IF ( HAS_BONUS_PASSED ( kill_frenzy_1 ) ) ++ flag_secrets_passed DISPLAY_MESSAGE ( 7103 ) //FRENZY PASSED! CLEAR_KF_WEAPON ( speler ) CLEAR_WANTED_LEVEL ( speler ) ADD_LIVES ( speler , 1 ) //Plaats hier codes die uitgevoerd moeten als de Kill Frenzy slaagt. ENDIF IF ( HAS_BONUS_FAILED ( kill_frenzy_1 ) ) ++ flag_secrets_failed DISPLAY_MESSAGE ( 7105 ) //FRENZY FAILED! CLEAR_KF_WEAPON ( speler ) //Plaats hier codes die uitgevoerd moeten als de Kill Frenzy mislukt. ENDIF RETURN
Codelijsten
|
|
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 |