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.

Kill-Frenzy-icoon

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.

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

Wapen Code Damage type
Vuist NO_WEAPON BY_PUNCH
Pistol PISTOL BY_GUN
S-Uzi machine gun MACHINE_GUN BY_GUN
Rocket launcher ROCKET_LAUNCHER BY_ROCKET_LAUNCHER
Electrogun ELECTRO_GUN BY_ELECTRO_WEAPON
Molotov cocktails MOLOTOV BY_MOLOTOV
Grenades GRENADE BY_GRENADE
Shotgun SHOTGUN BY_SHOTGUN
Electro baton ELECTRO_BATON BY_ELECTRO_WEAPON
Flame thrower FLAME_THROWER BY_FLAMETHROWER
Silenced S-Uzi machine gun SILENCED_MACHINE_GUN BY_GUN
Dual pistol DUAL_PISTOL BY_GUN
Vehicle bomb CAR_BOMB BY_CAR_BOMB
Vehicle oil slick CAR_OIL ZZn.v.t.
Vehicle mines CAR_MINE BY_EXPLOSION
Vehicle machine guns CAR_MACHINE_GUN BY_GUN
Vehicle rocket launcher TANK_ROCKET_LAUNCHER BY_ROCKET_LAUNCHER
Vehicle water canon WATER_CANNON BY_WATER_CANNON
Vehicle flame thrower CAR_FLAMETHROWER BY_FLAMETHROWER
Armed Land Roamer machine gun JEEP_GUN BY_GUN
Instant vehicle bomb CAR_BOMB_INSTANT BY_CAR_BOMB
Explosies ZZn.v.t. BY_EXPLOSION
Verdrinking ZZn.v.t. BY_DROWNING
Vuur ZZn.v.t. BY_FIRE
Ieder wapen ZZn.v.t. BY_ANY_WEAPON
Ieder geweer ZZn.v.t. BY_GUN
Ieder wapen te voet ZZn.v.t. BY_ANY_FOOT_WEAPON
Met een voertuig ZZn.v.t. BY_VEHICLE
Doelwit Code
politie ANY_LAW_ENFORCEMENT
Ziekenbroeders ANY_EMERGENCY_SERVICE_MAN
Gangleden ANY_GANG_MEMBER
Elvis ANY_ELVIS
Modding tutorials van Grand Theft Auto 2
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

In een andere taal lezen

Deze pagina is beschikbaar in één taal