Respawning Characters in GTA 2 Mission Scripts

First of all, you need to reserve a place for a character with the CHAR_DATA name command before the level start. Once you get to the place you want them, call them up with the usual routine:

name = CREATE_CHAR (X,Y,Z) remap rotation occupation END

Now, you have a character who does nothing, and when shot, will stay dead.

Example Assassin Script

To show you, I have taken a part of my old Battle Zone script and details will be at the bottom. This has four characters in this for this example:

CHAR_DATA p1_killer
CHAR_DATA p2_killer
CHAR_DATA p3_killer
CHAR_DATA p4_killer

COUNTER regenerating_characters = 1


LEVELSTART

// Create the killers:
p1_killer = CREATE_CHAR (6.5,7.5,255.0) 0 315 CRIMINAL_TYPE2 END
p2_killer = CREATE_CHAR (7.5,7.5,255.0) 0 045 CRIMINAL_TYPE2 END
p3_killer = CREATE_CHAR (6.5,6.5,255.0) 0 225 CRIMINAL_TYPE2 END
p4_killer = CREATE_CHAR (7.5,6.5,255.0) 0 135 CRIMINAL_TYPE2 END

// Arm the killers:
GIVE_WEAPON (p1_killer, MACHINE_GUN)
GIVE_WEAPON (p2_killer, MACHINE_GUN)
GIVE_WEAPON (p3_killer, MACHINE_GUN)
GIVE_WEAPON (p4_killer, MACHINE_GUN)

// Make the killers attack any nearby player:
SET_CHAR_THREAT_SEARCH (p1_killer, AREA_PLAYER_ONLY)
SET_CHAR_THREAT_SEARCH (p2_killer, AREA_PLAYER_ONLY)
SET_CHAR_THREAT_SEARCH (p3_killer, AREA_PLAYER_ONLY)
SET_CHAR_THREAT_SEARCH (p4_killer, AREA_PLAYER_ONLY)
SET_CHAR_THREAT_REACTION (p1_killer, REACT_AS_NORMAL)
SET_CHAR_THREAT_REACTION (p2_killer, REACT_AS_NORMAL)
SET_CHAR_THREAT_REACTION (p3_killer, REACT_AS_NORMAL)
SET_CHAR_THREAT_REACTION (p4_killer, REACT_AS_NORMAL)
SET_CHAR_OBJECTIVE (p1_killer, KILL_CHAR_ON_FOOT, p1)
SET_CHAR_OBJECTIVE (p2_killer, KILL_CHAR_ON_FOOT, p2)
SET_CHAR_OBJECTIVE (p3_killer, KILL_CHAR_ON_FOOT, p3)
SET_CHAR_OBJECTIVE (p4_killer, KILL_CHAR_ON_FOOT, p4)

// Respawn each killer if they die:
WHILE_EXEC (regenerating_characters = 1)
 IF (HAS_CHARACTER_DIED(p1_killer))
  p1_killer = CREATE_CHAR (6.5,7.5,6.0) 0 0 CRIMINAL_TYPE2 END
  GIVE_WEAPON (p1_killer, MACHINE_GUN)
  SET_CHAR_THREAT_SEARCH (p1_killer, AREA_PLAYER_ONLY)
  SET_CHAR_THREAT_REACTION (p1_killer, REACT_AS_NORMAL)
  SET_CHAR_OBJECTIVE (p1_killer, KILL_CHAR_ON_FOOT, p1)
 ENDIF

 IF (HAS_CHARACTER_DIED(p2_killer))
  p2_killer = CREATE_CHAR (7.5,7.5,6.0) 0 45 CRIMINAL_TYPE2 END
  GIVE_WEAPON (p2_killer, MACHINE_GUN)
  SET_CHAR_THREAT_SEARCH (p2_killer, AREA_PLAYER_ONLY)
  SET_CHAR_THREAT_REACTION (p2_killer, REACT_AS_NORMAL)
  SET_CHAR_OBJECTIVE (p2_killer, KILL_CHAR_ON_FOOT, p2)
 ENDIF

 IF (HAS_CHARACTER_DIED(p3_killer))
  p3_killer = CREATE_CHAR (6.5,6.5,6.0) 0 225 CRIMINAL_TYPE2 END
  GIVE_WEAPON (p3_killer, MACHINE_GUN)
  SET_CHAR_THREAT_SEARCH (p3_killer, AREA_PLAYER_ONLY)
  SET_CHAR_THREAT_REACTION (p3_killer, REACT_AS_NORMAL)
  SET_CHAR_OBJECTIVE (p3_killer, KILL_CHAR_ON_FOOT, p3)
 ENDIF

 IF (HAS_CHARACTER_DIED(p4_killer))
  p4_killer = CREATE_CHAR (7.5,6.5,6.0) 0 135 CRIMINAL_TYPE2 END
  GIVE_WEAPON (p4_killer, MACHINE_GUN)
  SET_CHAR_THREAT_SEARCH (p4_killer, AREA_PLAYER_ONLY)
  SET_CHAR_THREAT_REACTION (p4_killer, REACT_AS_NORMAL)
  SET_CHAR_OBJECTIVE (p4_killer, KILL_CHAR_ON_FOOT, p4)
 ENDIF
ENDWHILE

LEVELEND

Don’t understand any of it? I’ll try to explain most of it for you.

Explanation

I made a COUNTER before hand (call it whatever you like) and set the value to 1.

Now, we call up a WHILE_EXEC command. It checks to see if the counter is set at 1 (in which case it is) and then proceeds with executing the rest of the script.

The IF function looks for each character, so they respawn individually and independently from each other. As a note, make sure all brackets add up!

Now, we do the CREATE_CHAR again, but with the original names. We can keep using p1_killer as many times as we like, even in different missions or whatever.

Then, we give the characters some guns, objectives and reactions to follow (you should try and keep them the same as when you first made the characters.) etc, and it will keep doing this forever until you switch the value of the counter to another value.

And there are respawning characters for you! Experiment with your own characters, scenarios etc and you can make a better mission too!

(Originally written by Chris “Pyro” Hockley and formatted by Ben “Cerbera” Millard with full permission.)