It would be pretty cool to have a mission where you did go through the vortex first-person style, and then it immediately shifted to a jump corridor ala the last mission of Freespace 1. Actually, using that and enough control over the background, you could make a really long, continuous mission.
This will get a bit easier to do in the code when the warp camera code gets committed. However, it won't actually be possible with more work. The warp camera is now its own separate object, but it's fundamentally different from the multi-camera code in that it's updated every frame with a predetermined algorithm based on the object, rather than being updated only when it's needed with gradual position and rotation change data like the cutscene camera code.
I did think of one alternate idea of how to do this. The cutscene camera will override the warpout camera. So if you have use any of the set-camera-* SEXPs prior to the player warping out, it won't do the warpout view. So if you know where the eyepoints are, you can lock the cutscene camera to Alpha 1 (Or Red 1, etc) using set-camera-host. Then you could use set-camera-position to set the eyepoints. You'd also need to turn the HUD back on as the cutscene camera automatically turns it off. Haven't actually tried it, but the SEXP would look something like this:
when
-- player-starts-warpout (not an actual SEXP)
-- set-camera-host
---- "Alpha 1"
-- hud-disable
---- 0
-- set-camera-position
---- (eyepoint x)
---- (eyepoint y)
---- (eyepoint z)
If you had some scripting function to get the eyepoint you could use:
when
-- player-starts-warpout (not an actual SEXP)
-- set-camera-host
---- "Alpha 1"
-- hud-disable
---- 0
-- set-camera-position
---- script-eval-num
------ getEye("Alpha 1",1)
---- script-eval-num
------ getEye("Alpha 1",2)
---- script-eval-num
------ getEye("Alpha 1",3)
Where getEye is something like:
#Conditional Hooks
$Appliation: Freespace 2
$On Game Init: [
g_getEyeArray = {}
--These coordinates aren't right, just here for demo purposes
--Format: g_getEyeArray["Class name"] = {eyepoint x, eyepoint y, eyepoint z}
g_getEyeArray['GTF Ulysses'] = {0.0, 1.0, 2.0}
g_getEyeArray['GTF Hercules'] = {0.0, 3.0, 4.0}
--Add additional ships here
function getEye(shipName, axis)
--Get a handle to the ship we want
local ship = mn.Ships[shipName]
--If the ship is dead, return empty coordinate
if not ship:isValid() then
return 0.0
end
--Get what ship class the ship is
local className = ship.Class.Name
--If we don't have eyepoints for the class or a bad axis is given, return empty coordinate
if (g_getEyeArray[className] == nil) or (axis < 1) or (axis > 3) then
return 0.0
end
--Success! Return the eyepoint
return g_getEyeArray[className][axis]
end
]
Obviously you'd have to enter the eyepoints for your ship manually, which is a drag. At some point in the future, there should be an eyepoint function for models.