Documentation for

Warning: This documentation was generated from the comments in the source code (using progrutils.documentPyFile()), with a few tweaks, under the principle that poor documentation is better than no documentation. In case of ambiguity, please refer to the code itself.


Skirmish X Camera 2

By Kuertee


pros and cons:

ffvsttr camera:

pro 1: you can pan and rotate by moving the mouse to the edge of the screen pro 2: in cinematic mode (by pressing z), the camera switches between heroes con 1: (a biggie) you can't look upwards


pro 1: you can look at anything from your character's point-of-view (e.g. look up from your character's shoulder at a blitzkrieg poster) pro 2: in skXCinematic mode (by choosing cinematic mode in the custom actions menu), the camera automatically rotates to the closest enemy that he/she is facing

con 1: (a biggie) you cannot pan and rotate the camera by moving the mouse to the edge of the screen

con 2: (another biggie) in skXCinematic mode, the camera doesn't switch between heroes. you need to specifically use the custom action on the heroes to switch the camera to him/her. tried to get this working, but i don't think there is a solution:

con 3: (a biggie as well) skXCamera doesn't like working in underground maps. i think there is a bug in the actual ffvsttr camera. it dies when its z-location goes too far below 0.


skXCamera cinematic mode is not really playable. it does give good visuals, but it is a definate killer in big fire-fights - especially when its on a melee-type character (because the camera may move down to ground level during a brawl).

however, skXCamera will let you enjoy the visuals of the map better. cinematic mode on flying characters is a treat. and the "look at" function paints a prettier picture than the default camera.


1. auto-follow and auto-track: keep both targets on screen.

2. 5 skXCamera modes: battle, melee, shoulder, dialogue, cinematic

a. battle and melee: both targets are viewed from the side. battle-mode is very much like ff's default camera which is viewed from above. melee-mode puts skXCamera right at the duelist's level.

b. shoulder: the track-target is viewed from the follow-target's right shoulder.

c. dialogue: when no lookAt commands are issued during a cut-scene step, this mode views the speaker from the previous speaker's right shoulder.

d. cinematic: this is similar to ff's cinematic camera. however, skXCamera tracks the closest enemy and changes the viewing angle (modes) to keep the player and the enemy in view.

however, the camera is locked on the character. cinematic view will not switch to newly selected heroes without specifically turning it on from their portrait.

this feature is "as playable" as the default cinematic view - which is not very much. some may find enjoyment in this "toy", though. (good for screen-shots.) battle, melee, shoulder, and dialogue modes are automatically used. cinematic mode is set by choosing "cinematic" from the custom actions.

3. custom actions: to enable the menu, issue an "Add look commands" from a player's portrait. i.e.: right click on the currently selected hero, and click on "Add look commands".

a. Add look commands: all objects except the ground get a "Look at" action. i.e. the cursor changes into a hand when it is over an object

b. Look at: look at anything in the game from the hero's point-of-view

c. Cinematic: enable cinematic mode.

d. Stop looking/Stop cinematic: release the SkXCamera.

e. Remove look commands: removes all "Look at" actions these two below are available in watch-mode:

f. T.V.: randomly select follow and track targets

g. Follow: manually select a follow target for the camera.

4. SkXCamera-enabled AFF Superhero TV skirmish file is included.

5. SkXCamera-enabled M25AI Watch-mode skirmish file is included.


1. extract into a folder called skXCamera2 in the ffvsttr\ folder. ensure that the files are in this folder and not in another skXCamera2\ folder.

2. use startSkXCamera2.bat to start the game. in the rumble room, select the skXCamera-enabled versions of either AFF's hero t.v. or m25ai's watch mode. note that you need ffx3 for m25ai's watch-mode.

3. to see skXCamera working in cut-scenes, play the campaign. you can also load a previously saved game. however, you need to restart that mission. (i think that the save game file may not initialise new modules that were not incorporated in it when it was saved.)

4. if you have ffx3 installed, read-on:

a. ffx3 installs four modules:,,, and in both the main ffvsttr\ and ffvsttr\data\missions\scripts folders.

b. customised version of these modules in the mod folder will never load if they exists in ffvsttr's system folders (i.e. system\, data\missions\scripts, etc.)

c. without ffx3, skXCamera is imported from a modified cshelper located in its mod folder - skXCamera2\missions\scripts\. skXCamera is loaded from cshelper so that it is enabled in all missions (campaign or skirmish) - saves from having to edit all mission files.

d. with ffx3 installed, skXCamera's modified cshelper will never be used. so you need to import skXCamera at the end of the cshelper in the main ffvsttr\ folder. (because that's the cshelper that is used.) if you don't have cshelper in the main ffvsttr\, edit the one in ffvsttr\data\missions\scripts\ folder. add these lines to the very bottom of cshelper.

def fSkXCamera2 (tevent = None):
    try: test = skXCamera2
        import skXCamera2
        skXCamera2.fSkXCameraInitialise (0)
        regTimer ("fSkXCamera2", 1)
        regTimer ("fSkXCamera2", 1)

how to use in a different mod:

1. copy these files from Missions\Scripts\ to the mod's Missions\Scripts\ folder:




d. (if the mod doesn't already have this)

e. (if the mod doesn't already have this)

f. (if the mod doesn't already have this)

g. (if the mod doesn't already have this)

2. import the module with "import skXCamera2" or "from skXCamera2 import *"

3. initialise with "fSkXCameraInitialise (1)" to enable the look-at and cinematic custom actions or "fSkXCameraInitialise (0)" to not.

4. see below for cut-scene use.

cut-scene developement (scripting commands):

normal speak and lookAt commands still work. however, cut-scene steps with a speak command but no lookAt command will enable skXCamera dialogue mode. this mode will continoually focus the camera on the speaker from the previous speaker's right shoulder. its best to limit the use of lookAt commands to objects spoken about and let skXCamera focus on the speakers.

fSkXCameraStart (follow target, track target, loop):

starts skXCamera. follow target = object name or tuple position track target = object name or tuple position loop = 1 or 0. defaults to 0. if the follow and track targets are not specified, then skXCamera will randomly choose a follow target and will use enemies as track targets. if loop is set to 1, the camera will change targets at every interval. e.g. spawn a hero on top of a building and set the camera to follow him and track a moving car below: fSkXCameraStart ("hero_0", "car_0") e.g. spawn two heroes. one flies toward the other and lands. set the camera to follow the waiting hero and track the flying hero:

fSkXCameraStart ("hero_1", "hero_2")

fSkXCameraStop ():

stop skXCamera. apart from this, the camera will automatically be released when:

a. these commands are issued: lookAtObject, lookAtMarker, lookAtPos

b. at the end of the cut-scene.


heightcheck and create building data tool

1. launch this in the rumble room when a new building is added to the dat-files. i believe that map-conversions adds objects to the dat-files.

2. open to read more information on this.

3. these files are not required after the data file is created. they can be deleted safely prior to mod-delivery.

Art\level layout\blank_city\*.* Missions\empty_city\*.*

4. skXCamera relies on character height data to position and point the camera properly. however, by default, characters with no height information is assumed to be 40 units high. you may want to create this data. has more information.




speakInternal and lookAt* replacements

fSkXCameraspeakInternal(object, tag, fn = '', user = 0, isTemplate = 0, pan = 0.5, position = -1, telepathy = 2, forceNonMission = 0, interrupt = 0)

fSkXCameralookAtObject (object, zoom = 0, heading = 0, time = 0, fn = '')

fSkXCameralookAtMarker (marker, zoom = 0, heading = 0, time = 0, fn = '')

fSkXCameralookAtPos (pos, zoom = 0, pitch = 0, heading = 0, time = 0, fn = '')


fSkXCameraSpeak (object, tag, fn = '', user = 0, isTemplate = 0, pan = 0.5, position = -1, telepathy = 2, forceNonMission = 0, interrupt = 0)

fSkXCameraIsLookAtInCSStep (tiStep)

fSkXCameraLookAt (object, fn = "")

fSkXCameraSpeakTimeOn (tevent = "")



fSkXCameraInitialise (tbEnableCustomActions = 0, tiMode = None)

isSkXCameraInitialised ()


custom actions

fSkXWatchMode (tevent = None)

fSkXPlayerMode (tevent = None)

fSkXCameraTvAvailable (tb = None)

fSkXCameraAddLookCustomActions (tsTarget = "", tsSource = "")

fSkXCameraCustomActions (tsTarget = "", tsSource = "")

fSkXCameraClearCustomActions (ts = "", tbLeaveLooks = 0, tbLeaveFollowings = 0)

fSkXCameraTV (tsTarget = "", tsSource = "")

fSkXCameraTVOff (tsTarget = "", tsSource = "", tbRestoreCommands = 1)

fSkXCameraCinematic (tsTarget = "", tsSource = "")

fSkXCameraStopCinematic (tsTarget = "", tsSource = "", tbRestoreCommands = 1)

fSkXCameraLook (tsTarget = "", tsSource = "")

fSkXCameraStopLooking (tsTarget = "", tsSource = "", tbRestoreCommands = 1)

fSkXCameraFollow (tsTarget = "", tsSource = "")

fSkXCameraStopFollowing (tsTarget = "", tsSource = "", tbRestoreCommands = 1)



fSkXCameraStart (tsFollow = None, tsTrack = None, tbLoop = 0, tsCallBack = "")

fSkXCameraStop (tsTarget = "", tsSource = "", tbRelease = 1)

fSkXCameraSetUp (tevent = "", tsFollow = None, tsTarget = None, tbLoop = 1, tsCallBack = "")

fSkXCameraTick (tevent = "")

fSkXCameraPause (tevent = "")

fSkXCameraUnpause (tevent = "")

fSkXCameraCallBack (tevent = "")

fSkXCameraGetCameraPos (tsC, tsPos = "face", tsCFacing = "")

fSkXCameraGetBipedInfo (tsC)


utility functions

isNumber (ti)

isTuplePosition (tt)


fSkXgetAllBaddies(checkLiving = 1, template = 'none')

fGetClosestEnemyDeleteThis (ts, tiDistance = 1000000)

fGetClosestEnemy (ts, tiDistance = 1000000)

fGetClosest (ttPosition, taObjects = [], tiDistance = None)

fGetValidCs (taCs = [])

isPhysical (ts)

isVisible (ts)

isInvisible (ts)

isBuilding (ts)

fSkXDebugCamera (ts)