Basically, there are a couple of steps to do:
1) Pre-planning
Perhaps the most vital part. Plan what you want your map to look like. Hover around it in Sapien and look for likely spots that will form into great battles. Plan where you want the player to start, and the areas he/she will move through, and the enemies the player will face, and what weapons can be used to deal with them. A good tip is always to add ammo at points where big battles take place. And health packs too.
2) Adding stuff
Now comes the hard part. You have to add stuff, basically what you planned before. Script. Add triggers. Scripts some more. Add AI. Add objectives. Add cutscenes.
A simple script would look like this:
(script startup teh_script
(sleep_until (volume_test_objects (players))15)
(ai_place )
(game_save_no_timeout)
)
There is a difference between game_save, gam_save_no_timeout and game_save_totally_unsafe.
The classic game_save will check for enemies within a certain radius. If it finds none, it will save. If there are enemies, it will not save. It stops checking after 8 secs. However, the game_save_no_timeout will never stop checking. game_save_totally_unsafe will save the game NO MATTER WHAT, even if the player is losing health in a huge battle.
You have been warned.
Cutscene scripts would look like this:
(cinematic_start)
(cinematic_show_letterbox 1)
(camera_set 200)
(sleep 200)
(cinematic_show_letterbox 0)
(cinematic_stop)
(player_enable_input 1)
(camera_control 0)
You can script up to as many cams as you want.
Objectives are more complicated, ask me if you want an explanation.
3) Test out your map
Compile your level, and test it out! Look for loopholes! Or face the consequences! In my level,
http://hce.halomaps.org/index.cfm?fid=4287, I neglected the fact that the player could jump down from the bridge and into the icy area down below, RUNINING the level.