TFE Level Script: Difference between revisions

From DF21 Wiki
No edit summary
 
(One intermediate revision by the same user not shown)
Line 61: Line 61:
}
}
</pre>
</pre>
== API ==
* [[Math Script API]]
* [[System Script API]]
* [[Game Script API]]
* [[Level Script API]]

Latest revision as of 16:24, 14 December 2024

Purpose

TFE Level scripts have two major functions:

  • Enable script based level interactivity.
  • Extend INF functionality with new script-based functions using ScriptCall directly from INF.

Setup

To include a Level Script with your mod, simply create a LevelScript.fs file and include it in the same ZIP or folder as your GOB file. This is a simple text file that can be edited in Notepad-like applications, such as Notepad++.

Minimal Script Example

//////////////////////////////////
// Level Script.
//////////////////////////////////

// Level Start!
void levelStart(string levelName)
{
	// Prints out the levelName and sector count.
	// This is just an example and should be replaced by your own code.
	// **Important** Script state is persistant across levels, use this function
	// to reset any necessary state on level load.
	system.print("Start Level {}, Sector Count {}", levelName, level.sectorCount);
}

// This is called once per game update.
void levelUpdate(float dt)
{
	// This is called once per **game** update, dt is the delta time in
	// seconds since the last game update.
}

// You can write internal helper functions as well.

// Finally, you can write functions called by `ScriptCall` from INF.
// ScriptCall functions can have up to 4 parameters in addition to the final
// parameter which will always be the elevator or trigger ID that called it.
void InfScriptCallExample(int elevID)
{
	// Given the elevator ID, get the elevator from `level`. IDs don't change
	// during level execution, so elev will remain valid while in the same level.
	Elevator elev = level.getElevator(elevID);
	// It is possible for a scriptCall function to keep running using 'yield'
	// Keep running while the elevator is active, for example.
	float prevTime = game.getGameTime();
	while (elev.master)
	{
		// Do stuff while the elevator is active (master is on).
		// Use game.getGameTime() to get the current game time to stay synced.
		// This is an example of computing a delta time.
		float curTime = game.getGameTime();
		float dt = curTime - prevTime;
		prevTime = curTime;
	
		// Return control to the system. A delay in seconds can be passed in
		// to handle timing.
		// The script will resume after the yield with the call stack and local
		// variables preserved.
		yield();
	}
}

API