 Sonic Robo Blast 2: Project Astral Alpha 0.0.1 README file

 How to install:
 Extract srb2pa-win.exe and srb2pa.pk3 from the ZIP file that this README.txt was included in into where you got SRB2 2.2.15 installed.
 Make sure to back up your configs just in case.

 !*! Please make sure you read the rest of this file if you want to know how each new feature works. !*!
 Seperate saves:
 SRB2PA has seperate gamedata and save files from vanilla SRB2.

 Lua IO .json support:
 You can now use .json files with Lua IO for SRB2PA as json files are a very popular format
 and will be used for the Astral Plane area loading/saving system in alpha 0.1.

 Increased flat limits:
 You can now have as many unique flats as you want in a single map until everything stops rendering
 due to engine-related limitations, or the game crashes depending on the device you use to play
 SRB2PA.

 SRB2PA Lua Menu
 The SRB2PA Lua Menu appears as a menu option in the special ESC menu that opens up when you are in-
 game, and it can be enabled by going in a map with a level header that has its luamenunum set to
 a value greater than 0. Please note that the luamenunum for all levels are set to 0 by default to
 disable the SRB2PA Lua Menu option with the exception of the Neo Testlands map after loading srb2pa.pk3,
 which has its luamenunum set to 1 to enable the SRB2PA Lua Menu option which currently just prints
 a message that the SRB2PA Lua Menu is unimplemented for the Neo Testlands as a way to test out the new
 menu option. (Ex. luamenunum = 1)
 The SRB2PA Lua Menu menu option calls the SRB2PALuaMenu hook after closing the special ESC menu
 to allow for creating custom menus that can be entered through the special ESC menu. The hook
 function takes 1 integer argument, which is the currently active luamenunum, for the SRB2PALuaMenu hook.
 WARNING: The SRB2PALuaMenu hook is not net-safe! Be careful!
 (Ex. addHook("SRB2PALuaMenu", function(luamenunum) print(tostring(luamenunum)) end))

 Neo Testlands (This will be replaced by the upcoming Astral Plane in alpha 0.1)
 This map is used for testing out the new flat limits and SRB2PA Lua Menu.

 Timelines:
 Timelines are a new struct that are separate from the map data structures themselves, while
 only objects in the same timeline can interact with each other.
 However, for each player, objects that are not in their same timeline are invisible to that player.
 In fact, each player's timeline number must be consistant on all clients and servers to avoid desynchs,
 hence why they are used to consistancy checking as well as the player's state instead of the
 player's position for improved consistancy. Also, players can only viewpoint other players that
 are in the same timeline as them. Timelines are reset automatically when the map is loaded, except
 when a title map is in action. There are some new functions, test commands, a new hook related
 to timelines, a new timeline_t userdata structure that have been added in SRB2PA Alpha 0.0.1.
 
 Timeline Lua functions:
 P_ResetTimelines() ## overwrites the timelines dynamic array
 # to where it only has one default timeline with starting variables, by default ##
 P_AddTimeline(str realtitle, str subtitle, int weather, int skynum) ## adds a new timeline
 # to the timelines dynamic array by making it grow and setting the new timeline's required variables
 # Note: Currently, timeline variables are only used for Lua scripting purposes ##
 P_SwitchTimeline(mobj_t thing, int timelinenum) ## switches to a different timeline by id
 # if it exists in the timeline dynamic array ##
 timelines.iterate ## used for iterating through timelines (Ex. for timeline in timelines.iterate print(timeline.realtitle) end)
 # You can even use #timeline using the timelines iterator to get the timeline id (Ex. for timeline in timelines.iterate print(#timeline) end) ##
 #timelines ## Yes it is really #timelines and it is used for getting the number of existing timelines.
 # (Ex. if timelines > 1 print("There are multiple timelines that exist right now.") end) ##
 ## The timeline dynamic array has also been exposed to Lua (Note: timelines[0] through timelines[numtimelines-1] are valid timelines) ##

 Timeline test commands:
 printtimelines - prints a list of timelines in the timelines dynamic array in a json-like format
 resettimelines - calls the P_ResetTimelines function (resets the timelines)
 addtimeline <realtitle> <subtitle> <weather> <skynum> - calls the P_AddTimeline function (adds a new timeline)
 switchtimeline <timelinenum> - calls the P_SwitchTimeline on the player object of the player that executed this
 command (switches to a different timeline if that timeline id is valid)

 Timeline Lua hook:
 The ResetTimelines hook is a new hook that gets called after the timelines have been resetted in
 the P_ResetTimelines function. The hook function takes no arguments for the ResetTimelines hook.
 It is useful to allow for different default timelines per map depending on what addons you got loaded.
 (Ex. addHook("ResetTimelines", function() P_AddTimeline("Example", "SRB2PA", 0, 1) end))

 Timeline userdata structure:
 timeline_t
 R/W - Yes/Yes
 Allows for custom variables - Yes
 realtitle - str[33]
 subtitle - str[33]
 weather - UINT8
 skynum - INT16

Note: the timeline userdata structures are currently used for modding purposes.