Single Player Modding/Scripting and Implementation
[PDF] Multix - Basic Scripting Tutorial
[TEXT/PDF] Many Authors - Big Book of Scripts
[PDF] Gamma927 - Scripting Variables Tutorial
[VIDEO] DHalo - Cutscene Camera Movement
[VIDEO] BioCroc - Vehicle Teleporting (with Application)
[VIDEO] PlasmaGhost - AI Tutorial
[TEXT]p0lar_bear - Rules of Thumb for Making Solo Maps (Local Only)
Here's a list of some tips, tricks, and other stuff with scripts to make a solo map good.
Friendly AI
Whenever you make an AI encounter you want to be friendly with the player, add in the (ai_allegiance) command to make an AI team friends
with the player. For example, if you make a solo map in which you are a
Covenant Elite, and would like Covenant encounters to buddy up with
you, use this command in a startup script:
(ai_allegiance 'player' 'covenant'). Valid teams
are 'player', 'human', 'covenant', 'flood', and 'sentinel'.
Checkpoints
To make a map less frustrating to play, you have to know when to make
the game do a checkpoint. Usually, I'd put checkpoints before and after
BIG battles, long sequences, or when you have to traverse a large
distance and would like to not have to drive/walk a long ways again, like
in the Silent Cartographer. The checkpoint script command is
(game_save).
Objective Parameters
Let's say there's a vehicle, person, or position you have to protect, or
else the mission fails, like protecting Capt. Keyes in the end segment of
Truth and Reconciliation. How they did that was, they placed a Keyes
biped down with a name, and attached it to the AI encounter of the
marine squad that follows you around. There was a script that continually
checked for Keyes's health, and if it hit 0, the game would revert to your
last checkpoint.
To make a came continually check a unit's health, make a continuous
script with the command (unit_get_health <unit>) in an (if) statement, so
when the unit dies, the game is lost. Here's a sample, which assumes
your biped's name was 'protectme':
(if (= (unit_get_health protectme) 0) (game_lost))
You can also make it wake a dormant script that uses (camera_control 1)
and (camera_set_dead <unit>) with (game_lost) to show how badly you
phailed and rub it in your face. >
Friendly to all
Make sure your map can be played by all. Do not force the player to use
a 'skill' weapon in an area that may cause a newbie to get killed 50 times
before they finally get it. You should usually provide alternative routes
and strategies. For example, before an enemy-infested area, stick some
dead marines with dropped pistols, ARs, shotguns, maybe rockets, and
ammo. And maybe there's a cliff next to you with a sniper rifle on it' You
don't have to set all of that down, but don't just lay down a plasma pistol
and expect everyone to be able to get through the area. Also, do not
make enemy AI overpowered or overwhelming in number without a
powerful weapon or vehicle to help the player get by. Keep in mind that it
takes at least 8 headshots to an fully sheilded elite with a pistol to kill,
and not 3 like the cyborg biped.
[TEXT] p0lar_bear - Navpoints/Waypoints Tutorial (Local only)
Meh. Same difference. Via scripts, there are four ways to set a navpoint (the engine refers to them as waypoints), and those are by attaching the waypoint to either a cutscene flag or an object, and have it visible to either one unit, or a team. To set a waypoint, use
(activate_nav_point_flag) or (activate_team_nav_point_flag) to attach the
waypoint to a cutscene flag, and use (activate_nav_point_object)
(activate_team_nav_point_object) to attach a waypoint to a named
object. When done with a waypoint, use a (deactivate_nav_point') or
(deactivate_team_nav_point') to turn it off. Since I don't know how to
refer to the players as units, I usually set a team waypoint. The full
syntax of a team waypoint command is
(activate_team_nav_point_flag/object <waypoint type> <team>
<flag/object> <vertical offset>).
<waypoint type> can be, by default, 'default', 'default_red', 'flag_blue', 'flag_red', 'target_blue', 'target_red', 'skull_blue', 'skull_red', 'crown_blue', and 'crown_red'. Singleplayer maps should use only the default, and maybe, if you have to kill a certain enemy, the target nav points. the 'default' type and red types of waypoints should be used on urgent things, like the exit on an area that would ahve a timed escape, or an enemy that is about to own you.
<team> should always be set to 'player', if you want the player to see the waypoint!
<flag/object> is what you are attatching the waypoint to, which depends on the type of command you're using. Simply put in the name of the desired object or flag you wish to attach the waypoint to.
<vertical offset> is how much higher on the z-axis the waypoint is placed from the object or flag's marker in sapien. If you attach it to something on the ground, like a door, biped, or weapon, make sure to set it to about .6 or higher, but if its something like a picture on a wall, or if the flag/object is otherwise not on the ground, set it to 0.
(deactivate_team_nav_point_flag/object) is a bit different. The syntax for it is (deactivate_team_nav_point_flag/object <team> <object/flag>), where <team> is what team you wish to not see the navpoint anymore, and <object/flag> is the object or flag the navpoint is attached to.
So, let's say we wanted to set a normal waypoint at a position we want the player to go to. Lay down a cutscene flag, name it nav_1, then add a script in your map that has this command: (activate_team_nav_point_flag default 'player' nav_1 .6)
Now for something a little more useful. Let's make it so we put a waypoint on a warthog, and it turns off whenever the player is in the driver seat,
and turns on if the player is ejected. Place a warthog and name it
drive_me. Now, make and compile this script:
(script continuous hog_checker (if (vehicle_test_seat_list drive_me 'w-
driver' (players)) (deactivate_team_nav_point_object 'player' drive_me)
(activate_team_nav_point_object 'default_red' 'player' drive_me 1)) )
In theory, that will constantly deactivate the waypoint while a player is in
the driver seat, and then constantly activate it when there is no player in
the driver seat. I don't know if more than one waypoint can be put on the
same object or flag, but if it doesn't, then this should work fine.
Anyway, read up hs_doc, or the HS Bible, and find out more ways on how
to make and use waypoints effectively.
[TEXT] adumass - AI Follow Tutorial
[PDF] Unknown - AI Driving Warthogs
[PDF] P0lar Bear - Trigger Volumes for Dummies
[TEXT] L0d3x - Firefight Map Tutorial
Bookmarks