Main Page > GTA2 > Modding Tutorial > Kill Frenzies
Kill Frenzies are basicly small missions triggered by entering a car or an area with a Kill Frenzy icon. Luckily, Kill Frenzies have their own template code, so we don't have to script all conditions.
Generic Kill Frenzy commands
Let's start with scripting some things you can recycle for every Kill Frenzy, meaning you have to script them only once. These things are the TIMER, which keeps track of the time the player has left, the ONSCREEN_COUNTER, which shows the remaing time onscreen and a SAVED_COUNTER, which keeps track of the passed frenzies. You'll also need to declare the total number of Kill Frenzies and two COUNTERs to keep track of the number of failed and passed Kill Frenzies. These COUNTERs have to be declared as FLAGs with two additional commands. The code to do this all should look something like this:
TIMER_DATA kf_timer_name ONSCREEN_COUNTER kf_onscreen_counter_name SAVED_COUNTER kf_saved_counter_name DECLARE_TOTAL_SECRETS ( 2 ) //This is the number of kill frenzies. We're making two of them in this tutorial 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 )
Adding a Kill Frenzy
First, we need to tell the script we're adding a Kill Frenzy. Kill Frenzies are called "BONUSes" in the script. Add the following command to your script:
BONUS kf_name
kf_name | An unique name. You're going to need this name later. |
---|
Objects
Next, we need a pick-up or car to start the Kill Frenzy. You can script these with the normal OBJ_DATA and CAR_DATA commands:
OBJ_DATA kf_icon_name = ( X.x , Y.y , Z.z ) rotation KILL_FRENZY CAR_DATA kf_car_name = ( X.x , Y.y , Z.z ) color rotation vehicle
Use the GIVE_WEAPON command to add a weapon to the car if you want to.
GIVE_WEAPON ( kf_car_name , car_weapon )
Subroutine
Beneath these codes, add the subroutine of the Kill Frenzy:
FORWARD kf_subroutine_name: //This is where the THREAD_TRIGGER and KF_TEMPLATEs will be RETURN
THREAD_TRIGGER
Inside this subroutine, we create a THREAD_TRIGGER to start the Kill Frenzy when the player walks on the pick-up or gets in the car.
THREAD_TRIGGER kf_thread_trigger_name = THREAD_WAIT_FOR_CHAR_IN_AREA ( player , X.x , Y.y , Z.z , width , height , kf_subroutine_name: ) THREAD_TRIGGER kf_thread_trigger_name = THREAD_WAIT_FOR_CHAR_IN_CAR ( player , kf_car_name , kf_subroutine_name: )
kf_thread_trigger_name | An unique name for this THREAD_TRIGGER. |
---|---|
player | The name of the player ped. |
X.x , Y.y , Z.z | The coordinates of the center of the kill frenzy icon. |
width , height | The height and width of the trigger area. Use 0.2 , 0.2 for an area with the size of the icon. |
kf_car_name | The name of the car you've created for the kill frenzy. |
kf_subroutine_name: | The name of the subroutine you created earlier. Don't forget the : at the end. |
START_BASIC_KF_TEMPLATE
With the THREAD_TRIGGER in place, we can finally add the actual kill frenzy inside the subroutine. This is done with three commands: two KF_TEMPLATEs and a BONUS_CHECK. The first KF_TEMPLATE looks like this:
START_BASIC_KF_TEMPLATE ( kf_thread_trigger_name , text_ID , kf_pick_up_name/kf_car_name , player , weapon_type )
kf_thread_trigger_name | The name of the THREAD_TRIGGER you've created earlier. |
---|---|
text_ID | The ID of the text explaining the objective of the kill frenzy. These texts can be found and changed with a GXT Editor. |
kf_pick_up_name/kf_car_name | The name of the icon or car to start the kill frenzy |
player | The name of the player ped |
weapon_type | The weapon to use with this kill frenzy. Set this to NO_WEAPON if the player shouldn't get a weapon. |
START_BONUS_CHECK
To declare the target, time and some other variables, you may choose from six START_BONUS_CHECKs:
kf_name = START_BONUS_CHECK ( zone , time , target_number , reward , CHAR/CAR , exclusive_mode , damage_type , car_model , gang_name ) kf_name = START_BONUS_CHECK ( zone , time , target_number , reward , CHAR/CAR , exclusive_mode , damage_type , car_model , gang_name , target_remap ) kf_name = START_BONUS_CHECK ( zone , time , target_number , reward , CHAR/CAR , exclusive_mode , damage_type , car_model , char_occupation ) kf_name = START_BONUS_CHECK ( zone , time , target_number , reward , CHAR/CAR , exclusive_mode , damage_type , car_model , char_occupation , target_remap ) kf_name = START_BONUS_CHECK ( zone , time , target_number , reward , CHAR/CAR , exclusive_mode , damage_type , car_model , target_car_model ) kf_name = START_BONUS_CHECK ( zone , time , target_number , reward , CHAR/CAR , exclusive_mode , damage_type , car_model , target_car_model , target_remap )
kf_name | The name of the kill frenzy you used in BONUS |
---|---|
zone | The zone the player should stay in during the kill frenzy. Set to "NONE" if the player isn't limited to a single zone. |
time | The time the player has to fulfil the kill frenzy. 30 is one second, 1800 is one minute. |
target_number | The ammount of peds or cars the player has to kill or destroy to pass the kill frenzy. |
reward | An extra reward the player receives after passing the kill frenzy. This doesn't seem to be used in GTA2 and is always set to '0'. |
CHAR/CAR | Whether the player should kill pedestrians (CHAR) or destroy vehicles (CAR) |
exclusive_mode | Whether the player should be able to commit other score types or not: either EXCLUSIVE or NOT_EXCLUSIVE |
damage_type | How the player should kill or destroy the targets. See the damage types listed below. |
car_model | In which car model the player should be during the kill frenzy. Set to NONE if the player isn't required to stay in a certain car model. |
gang_name | The gang name you used in the SET_GANG_INFO command. |
char_occupation | Which occupation the target pedestrians should have. See the character occupations below. |
target_car_model | Which car model the player should destroy. Set to NONE if the model isn't important. |
target_remap | The remap or color the target has to have. |
DO_BASIC_KF_TEMPLATE
Lastly, you need to add the DO_BASIC_KF_TEMPLATE command to configure the remaining settings. For some unknown reason, several settings are set in both START_BONUS_CHECK and DO_BASIC_KF_TEMPLATE.
DO_BASIC_KF_TEMPLATE ( kf_name , kf_timer_name , time , kf_onscreen_counter_name , kf_saved_counter_name, target_number , text_ID , player , reward_type , reward_ammount )
kf_name | The name of the kill frenzy you used in BONUS |
---|---|
kf_timer_name | The name of the TIMER you've created before |
kf_onscreen_counter_name | The name of the ONSCREEN_COUNTER you've created before |
kf_onscreen_counter_name | The name of the SAVED_COUNTER you've created before |
target_number | The ammount of peds or cars the player has to kill or destroy to pass the kill frenzy. |
text_ID | The ID of the text explaining the objective of the kill frenzy. These texts can be found and changed with a GXT Editor. |
player | The name of the player ped |
reward_type | What sort of reward the player should get upon passing the kill frenzy. Choose from NOTHING, SCORE (money), LIVES and MULT (multiplier) |
reward_ammount | How high the reward must be. |
Code lists
Weapons and damage types
|
Character occupations
|
Examples
Below is an example script with two fully functional Kill Frenzies. In the first kill frenzy, you have to destroy ten vehicles in 30 seconds with a rocket launcher, and in the second you have to kill 30 pedestrians in one minute using the vehicle flame thrower mounted on a Fire Truck.
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: 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: ) THREAD_TRIGGER thr_kill_frenzy_2 = THREAD_WAIT_FOR_CHAR_IN_CAR ( grnplayer , kf_firetruck , do_kill_frenzy_2: ) //destroy 10 vehicles in 30 seconds with a rocket launcher 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 //kill 30 peds in 60 seconds with the fire truck with flame thrower 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
Mapping | Map Editor · Buildings · Roads · Water & animations · Slopes · Flat tiles · Collision info · Level edge · Zones · Putting a level ingame | |
---|---|---|
Scripting | Declarering: | Main script · Script Compiler · Code lists · Commands · Vehicles · Objects · Sounds · Characters |
Programming: | IF · WHILE · COUNTERs · Subroutines · THREAD TRIGGERs · Kill Frenzies | |
Both | Manual · Lighting · Car shops · Cranes & crushers · Gangs · Subway · Multiplayer levels | |
File types | .gci · .gmp · .gxt · .mis · .mmp · .scr · .seq · .tmp · .sty | |
Other | Texting · Physics · Creating vehicles · Terminology · Installing levels |