Index: parse/sexp.cpp
===================================================================
--- parse/sexp.cpp	(revision 7154)
+++ parse/sexp.cpp	(working copy)
@@ -17983,8 +17983,41 @@
 	}
 
 	cam->set_position(&camera_vec, camera_time, camera_acc_time, camera_dec_time);
+
+	multi_start_packet();
+	multi_send_float(camera_vec.xyz.x);
+	multi_send_float(camera_vec.xyz.y);
+	multi_send_float(camera_vec.xyz.z);
+	multi_send_float(camera_time);
+	multi_send_float(camera_acc_time);
+	multi_send_float(camera_dec_time);
+	multi_end_packet();
 }
 
+//CommanderDJ
+void multi_sexp_set_camera_position(int n)
+{
+	camera *cam = sexp_get_set_camera();
+	
+	if(cam == NULL)
+		return;
+
+	vec3d camera_vec;
+	float camera_time = 0.0f;
+	float camera_acc_time = 0.0f;
+	float camera_dec_time = 0.0f;
+
+	multi_get_float(camera_vec.xyz.x);
+	multi_get_float(camera_vec.xyz.y);
+	multi_get_float(camera_vec.xyz.z);
+	multi_get_float(camera_time);
+	multi_get_float(camera_acc_time);
+	multi_get_float(camera_dec_time);
+
+	cam->set_position(&camera_vec, camera_time, camera_acc_time, camera_dec_time);
+}
+
+
 void sexp_set_camera_rotation(int n)
 {
 	camera *cam = sexp_get_set_camera();
@@ -18056,6 +18089,35 @@
 	cam->set_rotation_facing(&location, rot_time, rot_acc_time, rot_dec_time);
 }
 
+//CommanderDJ
+//helper function for set_camera_facing_object
+void actually_set_camera_facing_object(char *object_name, float rot_time, float rot_acc_time, float rot_dec_time)
+{
+	object_ship_wing_point_team oswpt;
+	sexp_get_object_ship_wing_point_team(&oswpt, object_name);
+
+	switch (oswpt.type)
+	{
+		case OSWPT_TYPE_EXITED:
+		{
+			Warning(LOCATION, "Camera tried to face destroyed/departed object %s", object_name);
+			return;
+		}
+
+		case OSWPT_TYPE_TEAM:
+		case OSWPT_TYPE_SHIP:
+		case OSWPT_TYPE_WING:
+		case OSWPT_TYPE_WAYPOINT:
+		{
+			camera *cam = sexp_get_set_camera();
+			if(cam == NULL)
+				return;
+			cam->set_rotation_facing(&oswpt.objp->pos, rot_time, rot_acc_time, rot_dec_time);
+			return;
+		}
+	}
+}
+
 void sexp_set_camera_facing_object(int n)
 {
 	char *object_name = CTEXT(n);
@@ -18080,29 +18142,31 @@
 		}
 	}
 
-	object_ship_wing_point_team oswpt;
-	sexp_get_object_ship_wing_point_team(&oswpt, object_name);
+	actually_set_camera_facing_object(object_name, rot_time, rot_acc_time, rot_dec_time);
+		
+	//multiplayer callback
+	multi_start_packet();
+	multi_send_string(object_name);
+	multi_send_float(rot_time);
+	multi_send_float(rot_acc_time);
+	multi_send_float(rot_dec_time);
+	multi_end_packet();
+}
 
-	switch (oswpt.type)
-	{
-		case OSWPT_TYPE_EXITED:
-		{
-			Warning(LOCATION, "Camera tried to face destroyed/departed object %s", object_name);
-			return;
-		}
-
-		case OSWPT_TYPE_TEAM:
-		case OSWPT_TYPE_SHIP:
-		case OSWPT_TYPE_WING:
-		case OSWPT_TYPE_WAYPOINT:
-		{
-			camera *cam = sexp_get_set_camera();
-			if(cam == NULL)
-				return;
-			cam->set_rotation_facing(&oswpt.objp->pos, rot_time, rot_acc_time, rot_dec_time);
-			return;
-		}
-	}
+//CommanderDJ
+void multi_sexp_set_camera_facing_object(int n)
+{
+	char *object_name;
+	float rot_time = 0.0f;
+	float rot_acc_time = 0.0f;
+	float rot_dec_time = 0.0f;
+	
+	multi_get_string(object_name);
+	multi_get_float(rot_time);
+	multi_get_float(rot_acc_time);
+	multi_get_float(rot_dec_time);
+	
+	actually_set_camera_facing_object(object_name, rot_time, rot_acc_time, rot_dec_time);
 }
 
 extern float VIEWER_ZOOM_DEFAULT;
@@ -21040,6 +21104,13 @@
 				muli_sexp_toggle_cutscene_bars(op_num == OP_CUTSCENES_SET_CUTSCENE_BARS );
 				break;
 
+			case OP_CUTSCENES_SET_CAMERA_FACING_OBJECT:
+				multi_sexp_set_camera_facing_object(op_num == OP_CUTSCENES_SET_CAMERA_FACING_OBJECT);
+				break;
+
+			case OP_CUTSCENES_SET_CAMERA_POSITION:
+				multi_sexp_set_camera_position(op_num == OP_CUTSCENES_SET_CAMERA_POSITION);
+
 			case OP_SET_CAMERA_SHUDDER:
 				multi_sexp_set_camera_shudder();
 				break;
