Nanoforge basics: Difference between revisions
No edit summary |
|||
(76 intermediate revisions by one other user not shown) | |||
Line 1: | Line 1: | ||
{{RFGEditing}} | {{RFGEditing}} | ||
{{Under construction}} | |||
This page goes over how to install Nanoforge and it's basic features. This article only goes over the basics of each feature. See the other guides for more detailed explanations. | This page goes over how to install Nanoforge and it's basic features. This article only goes over the basics of each feature. See the other guides for more detailed explanations. | ||
===IMPORTANT NOTE=== | |||
Nanoforge was rewritten starting with version v1.0.0. At the time of writing that version only has a map editor for multiplayer and wrecking crew maps. The other editors will return in future releases. If you're editing MP/WC maps it recommended that you use the latest version of Nanoforge. It has many improvements to the map editor. If you want to use features that are still missing in the rewrite such as the texture and mesh exporters, you should use v0.21.1 | |||
==Installation== | ==Installation== | ||
Line 86: | Line 90: | ||
===Mod packaging=== | ===Mod packaging=== | ||
Once you're done editing textures you can use Nanoforge to repack the editing files and generate a modinfo.xml for you. To do this, simply click <code>File > Package mod</code> on the main menu bar. Once it's done go to the "Output" folder inside your project folder to see the modinfo.xml and any files that it relies on. These are ready for use with the re-mars-tered mod manager | Once you're done editing textures you can use Nanoforge to repack the editing files and generate a modinfo.xml for you. To do this, simply click <code>File > Package mod</code> on the main menu bar. Once it's done go to the "Output" folder inside your project folder to see the modinfo.xml and any files that it relies on. These are ready for use with the re-mars-tered mod manager. | ||
===Map view=== | ===Map view=== | ||
Line 100: | Line 104: | ||
==Object Flags== | ==Object Flags== | ||
* Flag 0 (Persistent): Unknown, any objects with this flag have a separate copy stored in a second rfgzone_pc file with its name prefixed with p__. So, for example, | * Flag 0 (Persistent): Unknown, any objects with this flag have a separate copy stored in a second <code>rfgzone_pc</code> file with its name prefixed with <code>p__.</code> So, for example, Crescent has two <code>rfgzone_pc</code> files. <code>mp_crescent.rfgzone_pc</code> and <code>p_mp_crescent.rfgzone_pc</code>. The objects with the persistent flag are stored in both zone files, while objects without that flag are only stored in <code>mp_crescent.rfgzone_pc</code>. It's consistently used on player spawns, on most siege objectives and on most <code>rfg_movers</code> on Siege maps. It's recommended you don't enable or disable this flag on maps if you're using the Terraform Patch as it contains fixes for missing objects that incorrectly used this flag or were missing it; doing so will cause objects to vanish. | ||
* Flag 1: Unknown | * Flag 1: Unknown | ||
* Flag 2: Unknown | * Flag 2: Unknown | ||
* Flag 3: Unknown | * Flag 3: Unknown; might be related to how the game saves/loads map data from save files (requires more investigation) | ||
* Flag 4: Unknown; most rfg_movers and general_movers have this flag | * Flag 4: Unknown; seems to always get converted to the runtime flag <code>streaming_fixed</code>, most <code>rfg_movers</code> and <code>general_movers</code> have this flag. If you're using the Terraform Patch it's recommended you don't disable this flag as it applies it to all objects since it was used most of the time and objects missing it were assumed to be an error by Volition. (They also made mistakes with the gamemode and persistent flags) | ||
* Flag 5: Unknown | * Flag 5: Unknown; seems to get converted to the runtime flag <code>force_full_save</code> | ||
* Flag 6: Unknown | * Flag 6: Unknown | ||
* Flag 7: Unknown | * Flag 7: Unknown | ||
Line 116: | Line 120: | ||
* Flag 14: Spawns in Team Bagman | * Flag 14: Spawns in Team Bagman | ||
* Flag 15: Spawns in Demolition | * Flag 15: Spawns in Demolition | ||
==Chunk Flags== | |||
* Applies to <code>rfg_movers</code> & <code>general_movers</code>. | |||
* When editing their properties in the inspector it's possible to change the <code>chunk_flags</code>. | |||
* You can also use <code>gameplay_properties.xtbl</code> to apply these flags and change <code>gameplay_props</code>. If you're using the Terraform Patch a new <code>gameplay_prop</code> named <code>Invulnerable</code> is added which also can be used to make objects indestructible. | |||
* Eg: <code>dynamic_link invulnerable</code> will make the object indestructible. Full list of flags below: | |||
* child_gives_control: Unknown. | |||
* building: Unknown. | |||
* dynamic_link: Unknown. | |||
* world_anchor: Unknown. | |||
* no_cover: Might be where EDF can't take cover behind objects. | |||
* propaganda: EDF propaganda billboards you destroy for the achievement in singleplayer have this flag in <code>gameplay_properties.xtbl</code>. Probably used so the game knows to track the players progress and reduce EDF control of the sector. | |||
* kiosk: <code>tech_kiosk_EDF_A</code> has this flag in <code>gameplay_properties.xtbl</code>. Probably used so the game knows its a special object that plays propaganda videos. | |||
* touch_terrain: Unknown, no <code>gameplay_properties.xtbl</code> entries use this flag and it's missing from the table description. | |||
* supply_crate: EDF crates you destroy for the achievement in singleplayer have this flag in <code>gameplay_properties.xtbl</code>. Probably used so the game knows to track the players progress. | |||
* mining: Ores you mine for salvage and the achievement in singleplayer have this flag in <code>gameplay_properties.xtbl</code>. Probably used so the game knows to track the players progress. | |||
* one_of_many: Unknown, <code>windmill_0708</code>, <code>0102smokestack_86</code> & <code>0102smokestack_86_child</code> have this flag in <code>gameplay_properties.xtbl</code>. Might be related to one of the side activities where you have to destroy multiple targets. | |||
* plume_on_death: Unknown. | |||
* invulnerable: Makes an object indestructible. | |||
* inherit_damaga_pct: Unknown. | |||
* regrow_on_stream: Unknown. | |||
* casts_drop_shadow: Object will cast drop shadows. | |||
* disable_collapse_effect: Unknown. | |||
* force_dynamic: Unknown. | |||
* show_on_map: Most objects in <code>gameplay_properties.xtbl</code>. Most likely means the object will show on the minimap in singleplayer. | |||
* regenerate: Unknown. | |||
* casts_shadow: Object will cast a shadow map. | |||
==Object Info== | ==Object Info== | ||
* <code>obj_zone</code> = Defines the wind speed, terrain file name & spawn_resource_data. If you move its location the terrain will no longer have collision | * <code>obj_zone</code> = Defines the wind speed, terrain file name & <code>spawn_resource_data</code>. If you move its location the terrain will no longer have collision. | ||
* <code>MPST</code> = Multiplayer siege target | * <code>MPST</code> = Multiplayer siege target. | ||
* <code>MPDCT</code> = Multiplayer damage control target | * <code>MPDCT</code> = Multiplayer damage control target. | ||
* <code>shape_cutter</code> = Causes object to start off with initial damage, used on damage control targets or maps like crash site, ruins & remnant where they put a hole in the wall | * <code>shape_cutter</code> = Causes object to start off with initial damage, used on damage control targets or maps like crash site, ruins & remnant where they put a hole in the wall. | ||
* <code>spawn_node</code> = Camera view at start of match and end of game. If a map doesn't have a least one of these it will crash. | * <code>spawn_node</code> = Camera view at start of match and end of game. If a map doesn't have a least one of these it will crash. | ||
* <code>spectator_camera</code> = Camera view | * <code>spectator_camera</code> = Camera view exclusively for players using the spectator mode, recommended to just ignore adding them and use <code>spawn_nodes</code> instead. | ||
* <code>trigger_region</code> = Killbox that can be set to a mine or cliff | * <code>trigger_region</code> = Killbox that can be set to a mine or cliff. | ||
* <code>rfg_mover</code> = Buildings, backpack racks & more | * <code>rfg_mover</code> = Buildings, backpack racks & more. | ||
* <code>general_mover</code> = Explosive barrels and the <code>backpack_effect_attach.cchk_pc</code> objects for example | * <code>general_mover</code> = Explosive barrels and the <code>backpack_effect_attach.cchk_pc</code> objects for example. | ||
* <code>player_start</code> = Spawn point, can be set to Neutral, EDF or Guerilla | * <code>player_start</code> = Spawn point, can be set to Neutral, EDF or Guerilla. | ||
* <code>item</code> = In multiplayer the bag for bagman is set to <code>item_type</code> "multi_object_bagman_flag" and references <code>items_3d.xtbl</code> | * <code>item</code> = In multiplayer the bag for bagman is set to <code>item_type</code> "multi_object_bagman_flag" and references <code>items_3d.xtbl</code>. | ||
* <code>weapon</code> = Weapon spawn, <code>weapon_type</code> determines which weapon will spawn and references <code>weapons.xtbl</code> | * <code>weapon</code> = Weapon spawn, <code>weapon_type</code> determines which weapon will spawn and references <code>weapons.xtbl</code>. | ||
* <code>object_effect</code> = Visual effect, eg the fire on Nordic Bonus | * <code>object_effect</code> = Visual effect, eg the fire on Nordic Bonus. | ||
* <code>multi_object_marker</code> = Multiple uses, in multiplayer the <code>marker_type</code> can be set to <code>Backpack rack</code>, <code>Spawn node</code>, <code>Flag capture zone</code>, <code>King of the Hill target</code>, <code>Siege target</code> & <code>Spectator camera</code> | * <code>multi_object_marker</code> = Multiple uses, in multiplayer the <code>marker_type</code> can be set to <code>Backpack rack</code>, <code>Spawn node</code>, <code>Flag capture zone</code>, <code>King of the Hill target</code>, <code>Siege target</code> & <code>Spectator camera</code>. | ||
* <code>cover_node</code> = | * <code>cover_node</code> = | ||
* <code>navpoint</code> = Probably where NPCs can navigate, similar to navmeshes in other games | * <code>navpoint</code> = Probably where NPCs can navigate, similar to navmeshes in other games. | ||
* <code>object_action_node</code> = | * <code>object_action_node</code> = | ||
* <code>object_squad_spawn_node</code> = Probably where squads spawn and references various <code>squads.xtbl</code> files | * <code>object_squad_spawn_node</code> = Probably where squads spawn and references various <code>squads.xtbl</code> files. | ||
* <code>object_path_road</code> = Probably where NPCs can drive vehicles | * <code>object_path_road</code> = Probably where NPCs can drive vehicles. | ||
* <code>object_guard_node</code> = | * <code>object_guard_node</code> = | ||
* <code>object_vehicle_spawn_node</code> = Probably where vehicles can spawn like walkers found around the SP map | * <code>object_vehicle_spawn_node</code> = Probably where vehicles can spawn like walkers found around the SP map. | ||
* <code>object_bounding_box</code> = Seems to be only be used in singleplayer, unknown why | * <code>object_bounding_box</code> = Seems to be only be used in singleplayer, unknown why. | ||
* <code>object_activity_spawn</code> = Probably where you can start a side activity like demolition master for example | * <code>object_activity_spawn</code> = Probably where you can start a side activity like demolition master for example. | ||
* <code>object_house_arrest_node</code> = Related to the house arrest side activity | * <code>object_house_arrest_node</code> = Related to the house arrest side activity. | ||
* <code>object_patrol</code> = Probably where EDF patrol | * <code>object_patrol</code> = Probably where EDF patrol. | ||
* <code>object_dummy</code> = | * <code>object_dummy</code> = | ||
* <code>object_mission_start_node</code> = Probably where you can start a main mission | * <code>object_mission_start_node</code> = Probably where you can start a main mission. | ||
* <code>object_restricted_area</code> = Probably where the EDF will attack on sight and you will get an alert level in SP | * <code>object_restricted_area</code> = Probably where the EDF will attack on sight and you will get an alert level in SP. | ||
* <code>backpack_effect_attach.cchk_pc</code> = Seems to be for attaching the backpack to the player when they spawn, DO NOT TOUCH IT ALL OR THE MAP WILL CRASH WHEN SPAWNING. | |||
==Object Properties== | |||
* <code>gameplay_props</code> references <code>gameplay_properties.xtbl</code>. | |||
* <code>backpack_type</code> references <code>mp_backpacks.xtbl</code>. | |||
* <code>weapon_type</code> references <code>weapons.xtbl</code>. | |||
* <code>item_type</code> references <code>items_3d.xtbl</code>. | |||
* <code>spawn_resource_data</code> references <code>spawn_resource.xtbl</code>. | |||
* <code>ambient_spawn</code> references <code>ambient_spawn_info.xtbl</code> or <code>dlc01_ambient_spawn_info.xtbl</code>. | |||
* <code>visual</code> references <code>effects.xtbl</code>. | |||
* <code>sound</code> references <code>foley.xtbl</code> (not included in the game for some reason) however there is <code>dlc01_foley.xtbl</code>. | |||
==Spawn Points== | |||
* <code>mp_team</code> can be set to <code>Neutral</code>, <code>EDF</code> or <code>Guerilla</code>. | |||
* When making a CTF map and you don't want players spawning at the opposing base ensure you disable the Flag <code>Spawn in CTF</code> for any Neutral spawn points. | |||
* Unknown if the <code>respawn</code> and <code>initial_spawn</code> booleans do anything in multiplayer. | |||
* <code>indoor</code> boolean is probably left over from Saints Row since all of RF:G is technically outdoors and no spawn points use this boolean. | |||
* <code>checkpoint_respawn</code> & <code>activity_respawn</code> are only used in singleplayer. | |||
* Foward X axis (blue line) determines player spawn direction. | |||
==Spawn Nodes== | |||
* Camera views at the start of match or when a player dies and is spectating. | |||
* Foward X axis (blue line) determines player camera direction & view. | |||
* If a map doesn't have at least one <code>Spawn node</code> it will crash when loading. | |||
==Spectator Cameras== | |||
* Believed to be similar to a <code>Spawn node</code> but used exclusively by players using the spectator option in matchmaking. Recommended to just ignore adding these since the community only plays custom games and adding <code>Spawn nodes</code> to your map will serve the same purpose. | |||
* Foward X axis (blue line) determines player camera direction & view. | |||
==Mover Types== | |||
* Applies to <code>rfg_movers</code> | |||
* When editing their properties it's possible to change the <code>mtype</code> field to the corresponding numbers | |||
* Fixed = 0 (default) | |||
* Normal = 1 (unknown) | |||
* Lite = 2 (unknown) | |||
* Ultra Lite = 3 (unknown) | |||
* World Only = 4 (no collision but you can still destroy it with a hammer for example) | |||
* No Collision = 5 (no collision) | |||
==Damage Control Targets== | ==Damage Control Targets== | ||
# Deep clone <code>MPDCT_MAPNAME_XXX</code> | # Deep clone <code>MPDCT_MAPNAME_XXX</code>. | ||
# Move </code>MPDCT_MAPNAME_XXX</code> to the location of your choosing | # Move </code>MPDCT_MAPNAME_XXX</code> to the location of your choosing. | ||
# In object properties for the parent change <code>display_name</code> to whatever you want your new damage control objective to be called | # In object properties for the parent change <code>display_name</code> to whatever you want your new damage control objective to be called. | ||
# If you're making a map that doesn't already have a damage control target you can open it in another tab and use the deep clone feature. If you're using the Terraform Patch the majority of Wrecking Crew maps will already have the asset along with all Siege maps. | # If you're making a map that doesn't already have a damage control target you can open it in another tab and use the deep clone feature. If you're using the Terraform Patch the majority of Wrecking Crew maps will already have the asset along with all Siege maps. | ||
# It's also possible to have only 1 target | # It's also possible to have only <code>1</code> target & more than <code>3</code>. The limit before the game will crash is a total of <code>6</code> targets when tested solo. The limit might be lower when played with other people but needs to be tested more. | ||
# It's also possible that using the same <code>display_name</code> name for each target can introduce instability. | |||
# The only valid value for the <code>mp_team</code> property is <code>Neutral</code>. If you change the team to <code>EDF</code> or <code>Guerilla</code> and disable the <code>shape_cutter</code> child so the target starts off intact it will belong to that team but not score any points until it's destroyed and repaired. | |||
# You can disable the <code>shape_cutter</code> child so the target starts off intact instead of destroyed like it is by default. | |||
# Any object can be used for a target if you add the <code>multi_object_marker</code>, <code>shape_cutter</code> and offset them correctly from the parent. See Stratosphere if using the Terraform Patch for how to do this; shipping containers are the targets added on that map in the patch. | |||
==Siege Targets== | ==Siege Targets== | ||
# Open a siege map in one tab, open a regular map with the same objects in another tab | # Open a siege map in one tab, open a regular map with the same objects in another tab. | ||
# Deep clone the siege target to the regular map | # Deep clone the siege target to the regular map. | ||
# Move the added siege target to the exact same location as the existing matching object on the regular map | # Move the added siege target to the exact same location as the existing matching object on the regular map. | ||
# Disable all the gamemode flags for the added siege target except for "Spawn in Siege" including its children | # Disable all the gamemode flags for the added siege target except for "Spawn in Siege" including its children. | ||
# Delete all the children of the siege targets (usually spawns that will be outside the map since they were deep cloned from the siege map), after they are all deleted make sure to "orphan children" of the child to ensure it doesn't have ghost children | # Delete all the children of the siege targets (usually spawns that will be outside the map since they were deep cloned from the siege map), after they are all deleted make sure to "orphan children" of the child to ensure it doesn't have ghost children. | ||
# Disable the <code>Spawn in siege</code> flag on the matching original map object | # Disable the <code>Spawn in siege</code> flag on the matching original map object. | ||
# You need to update <code>mp_levels.xtbl</code> so the map is selectable in siege | # You need to update <code>mp_levels.xtbl</code> so the map is selectable in siege. | ||
# Ensure the siege target and its child have the persistent flag | # Ensure the siege target and its child have the persistent flag. | ||
# | # The <code>priority</code> property for the <code>Siege target</code> child determines which siege objects are unlocked to destroy, eg if you set it to <code>1</code> it would be the first target the attackers can destroy, you can have multiple targets unlocked by using the same number and if you wanted to have targets unlocked one at a time you would use <code>1</code>, <code>2</code>, <code>3</code> and so on. If you use a value of <code>4294967295</code> they are also unlocked at the same time. | ||
# You must use an existing string in the game for the <code>display_name</code> property on the child or the map will crash. | |||
# If you mess up the offset of the child the map will crash. | |||
==Backpack Racks== | ==Backpack Racks== | ||
* Make sure you deep clone them when adding new racks, the child <code>Backpack rack</code> is required for it to work properly | * Make sure you deep clone them when adding new racks, the child <code>Backpack rack</code> is required for it to work properly. | ||
* Ensure that when moving the rack to a new location you only move the parent (the child will follow and be offset correctly), they will be named <code>Jetpack</code> for example if you're using the Terraform Patch | * Ensure that when moving the rack to a new location you only move the parent (the child will follow and be offset correctly), they will be named <code>Jetpack</code> for example if you're using the Terraform Patch. | ||
* When editing the child <code>backpack_type</code> determines which backpack will spawn, most are the same as their in game names with the exception of Firepower <code>Commando</code> & Concussion <code>Shockwave</code>. These names are from <code>mp_backpacks.xtbl</code> | * When editing the child <code>backpack_type</code> determines which backpack will spawn, most are the same as their in game names with the exception of Firepower <code>Commando</code> & Concussion <code>Shockwave</code>. These names are from <code>mp_backpacks.xtbl</code>. | ||
* When editing the child you can change the number of backpacks on a rack, edit <code>num_backpacks</code> and change it from a value ranging from 0-3, although 0 would mean the rack is empty and useless. | * When editing the child you can change the number of backpacks on a rack, edit <code>num_backpacks</code> and change it from a value ranging from <code>0-3</code>, although <code>0</code> would mean the rack is empty and useless. | ||
* When editing the child it's possible to make it team exclusive, this means only the EDF or Red Faction can pickup backpacks from that rack during team game modes. Edit <code>mp_team</code> and enter either <code>EDF</code> or <code>Guerilla</code>. In game that rack will have a green glow around it if your team can use it. | * When editing the child it's possible to make it team exclusive, this means only the EDF or Red Faction can pickup backpacks from that rack during team game modes. Edit <code>mp_team</code> and enter either <code>EDF</code> or <code>Guerilla</code>. In game that rack will have a green glow around it if your team can use it. | ||
* The <code>random_backpacks</code> boolean in the object properties for the <code>Backpack rack</code> child doesn't seem to do anything. | |||
* It's possible to make Backpack Racks destructable by changing <code>gameplay_props</code> to <code>Default</code>. During team game modes teams can fight for control by destroying racks and repairing them so only their team can use them. Racks you're able to use will glow green and racks you can't will glow red if you're using the Terraform Patch. | |||
* The maximum number of Backpack Racks you can have on a map before it causes issues is <code>25</code>. | |||
==Capture the Flag targets== | |||
* The EDF and Red Faction have their own unique flag stand placed near their team spawns on regular multiplayer maps. | |||
* Make sure you use deep cloning and only move the parent when placing or moving them so the child is offset correctly. | |||
* Objects are called <code>edf_flag_stand.cchk_pc</code> & <code>guerrilla_flag_stand.cchk_pc</code>. | |||
* If you attempt to add more than two stands to a map, the extras will not work as capture points and only the asset will appear. | |||
* <code>Neutral</code> is not a valid value for <code>mp_team</code>. | |||
==Bagman Objective Spawn== | |||
* Object is an <code>item</code> type referencing <code>items.3d_xtbl</code>. | |||
* Ignore the varying bounding box sizes when positioning the bag spawn, the XYZ axis position is what matters (the red, blue & green lines). | |||
* The <code>respawn</code> boolean doesn't do what you expect, the bag will still return to the original spawn point regardless if it's enabled or not. | |||
* You can't place more than one bag on a map normally, only one will spawn. However you can have different bag locations in Bagman and Team Bagman by using the gamemode flags. | |||
==Weapon Spawns== | |||
* You should clone other weapons to add new ones, if you make them from scratch and don't get the bounding box correct for certain weapons it can cause duplicate weapon spawns in some cases. | |||
* <code>weapon_type</code> determines which weapon will spawn and references <code>weapons.xtbl</code>. | |||
* The <code>preplaced</code> boolean needs more testing but you can disable weapons in certain game modes by disabling the game mode flags anyway. | |||
* The <code>respawns</code> boolean will cause the weapon to not re-spawn again during a match after it has been picked up for the first time. | |||
* Ensure the bounding box is slightly above the ground/floor when positioning weapons. | |||
==Trigger Regions== | |||
* In multiplayer & singleplayer these are used to prevent the player from going out of bounds. | |||
* <code>region_kill_type</code> can be set to a <code>cliff</code> or a <code>mine</code>. A cliff will cause the player to fall to their death, while a mine will explode and kill the player; this is also reflected in the killfeed message in multiplayer. | |||
* In singleplayer the <code>trigger_flags</code> can be changed so the trigger isn't enabled during missions and/or activities. Eg. <code>not_in_mission</code> will disable it during a main mission, <code>not_in_activity</code> would disable it during a side activity and <code>not_in_mission not_in_activity</code> would disable it during both. | |||
* The <code>enabled</code> boolean allows mappers to enable/disable the region. | |||
* The <code>trigger_shape</code> can be set to a <code>box</code> or <code>sphere</code>. However Nanoforge cannot render spherical bounding boxes yet. | |||
* <code>outer_radius</code> might control the size of the region, but this is untested. | |||
==Object Effects== | |||
* Plays an effect such as smoke, fire, explosion, sparks, etc. Also can play sounds if the effect has one in <code>effects.xtbl</code> and the sound string is used. | |||
* <code>sound_alr</code> = Unknown. | |||
* <code>sound</code> = The name of the sound in <code>effects.xtbl</code> | |||
* <code>visual</code> = The name of the effect in <code>effects.xtbl</code> | |||
* <code>looping</code> = Controls if the effect will play once or continuously. | |||
==Shape Cutters== | |||
* Used to damage or cut holes into destructible objects ahead of time. | |||
* <code>outer_radius</code> might control the size of the cutter, but this is untested. | |||
==Maps with names different from their in-game names== | ==Maps with names different from their in-game names== | ||
Line 200: | Line 317: | ||
* mpdlc_ruins - Remnant | * mpdlc_ruins - Remnant | ||
== | ==Maps with similar terrain== | ||
* | * Crash Site/Complex/Nordic Bonus | ||
* | * Rift/Factory | ||
* | * Remnant/Ruins | ||
* | * Broadside/Invasion | ||
* | * Wasteland/Gulch | ||
* Outpost/Framework | |||
* Radial/Transmission | |||
* Sand Pit/Division/Watchtower | |||
* Tutorial Area/Pipeline | |||
* Pinnacle/Fortress | |||
==Misc Notes== | ==Misc Notes== | ||
* Deep clone objects if you want to keep the children of an object and use regular clone if you just want to clone the parent. Only move the parent when deep cloning and the children will follow and be offset correctly. | |||
* Deep clone objects if you want to keep the children of an object and use regular clone if you just want to clone the parent. Only move the parent when deep cloning and the children will follow and be offset correctly | * If you see anything that looks like XML inside <code>layer_pc</code> or <code>rfgzone_pc</code> files you can ignore that as we're 99% sure it's junk from their file packer reusing memory without zeroing it out. | ||
*[https://github.com/Moneyl/RfgTools/blob/main/Documentation/RfgZonexFormat.md Zone file format docs] - Describes the zone format used by RFG in more detail. | |||
===Localization strings=== | ===Localization strings=== |
Latest revision as of 23:43, 21 February 2024
This page is part of the Red Faction: Guerrilla Editing Knowledgebase | |
Editing Main Page |
This page is under construction. The information on this page may not yet be complete. |
This page goes over how to install Nanoforge and it's basic features. This article only goes over the basics of each feature. See the other guides for more detailed explanations.
IMPORTANT NOTE
Nanoforge was rewritten starting with version v1.0.0. At the time of writing that version only has a map editor for multiplayer and wrecking crew maps. The other editors will return in future releases. If you're editing MP/WC maps it recommended that you use the latest version of Nanoforge. It has many improvements to the map editor. If you want to use features that are still missing in the rewrite such as the texture and mesh exporters, you should use v0.21.1
Installation
Download
Nanoforge releases are posted on github. Multiple releases will be listed. You should always download the most recent release. To download it, look for the ▸Assets
button(1), click it, and download the first zip file listed under it(2).
Install
- Unpack the zip file you downloaded anywhere and run Nanoforge.exe
- You should now see the start screen. On the left side it has the data path and the recent projects list. On the right it has the changelog. Nanoforge with attempt to auto detect your RFG install. If it says that your data path is invalid click the
Browse...
button and select your RFG data folder.
Features
This section gives a quick rundown of each of Nanoforge's features.
Projects
Nanoforge uses projects to track edits made to game files. The idea is to use a single project per mod. You only need to create a project if you're editing files. You don't need one to view and export files. To create a new project click New project
in the start page or File > New project...
on the main menu bar. Fill out all the info on the popup and click Create
. Below are each of the fields to fill in:
- Name: The name of the project. Used to name the project file and as the name in any modinfo.xml files it generates.
- Path: Path to the folder that the project should be created in.
- Description: (Optional) Description of what the mod is. Used in the description field of modinfo.xml.
- Author: (Optional) Author(s) of the mod. Used in the author filed of modinfo.xml.
- Create project folder: If unchecked then the project files are placed directly in the folder chosen for path. If checked a folder with the entered name will be created in that folder.
File explorer
The file explorer lets you view the contents of vpp_pc and str2_pc files without extracting them manually. You can double click supported file formats like textures to open them. If you single click a vpp_pc or str2_pc file it will expand to show it's contents. Extra info about the file will be shown in the properties panel for some files when single clicking them.
Search
You can use the search bar to limit which files are shown in the file explorer. By default it will only show files with names that contain the search term. You can also use some special characters to specialize your search behavior:
- Start your search with *: Will only show files with names that end with whatever comes after *
- End your search with *: Will only show files with names that start with whatever comes before *
If you prefer regex you can check the regex search option. Note that the regex search option is much slower than the default one.
Properties panel
The properties panel sometimes will show additional info about files selected in the file explorer. It also may be used by other UI panels to show additional info. For example, it can list object properties when viewing territories (see map viewing section below).
Textures
You can open texture files by double clicking them in the file explorer. Textures are split into two files. Either a cpeg_pc and gpeg_pc file pair or a cvbm_pc and gvbm_pc file pair. You can double click any of these to open a texture. A single RFG texture file can contain multiple textures, which we'll refer to as subtextures. Info about the selected subtexture will be shown below the subtexture list.
Above is an example of what you might see if you open a texture file. On the sidebar to the left there a few things, in order:
- The subtexture list. Click on one to see more info about it below.
- Texture info. This is info about the selected subtexture.
- Header info. This is general info about the cpeg/cvbm file.
Exporting textures
Textures can be exported to files you can edit with common image editors like Paint.NET, GIMP, or Photoshop. Currently textures can only be exported as .dds files. You can export single subtextures by right clicking one of them and clicking Export...
. You can export all subtextures at once with the Export all...
button.
Editing textures
Textures can be edited by imported textures you've edited externally. Currently it can only import .dds files. You do this by right clicking a subtexture, clicking Replace...
and selecting the file you want to replace the subtexture with. Once you do this it's critical that you press the Save
button above the subtexture list to save your edit. This edit will be automatically saved to your current project when you click Save
. See Nanoforge Texture Editing for more info.
Meshes
Nanoforge supports viewing and exporting .csmesh_pc (static mesh) and .ccmesh_pc (character mesh) files. Just like textures, meshes consist of two files. Every csmesh_pc file is paired with a gsmesh_pc file, and every ccmesh_pc file is paired with a gcmesh_pc file. You can click any of them to open a mesh. When you open a mesh you'll first see a blank space. Meshes are loaded on a background thread so it may take a few seconds for the mesh to be loaded and for it's textures to show up. Before its textures are found or if the textures cant be found you might see textures from previously loaded meshes applied to the mesh.
Above is what you might see if you open a mesh file. There's a few parts of the UI to note, in order:
- The camera button. This lets you control camera settings like speed and location. You can move the camera by holding down the right mouse button and using WASD to move around. If this doesn't work try left clicking on the mesh 3D view. Only the most recently selected mesh reacts to camera controls so if you have several open it'll only move one camera.
- The scene button. This has some rendering settings for the mesh such as scale and lighting color/intensity.
- The info button. This shows some additional info about the mesh such as vertex format, and the LOD slider for meshes with multiple levels of detail.
- The export button. This lets you export the mesh and it's textures to a .obj file, which can be imported into tools like blender.
- The status bar. This shows the loading status and percentage. It will show
Done! ✓
once loading is complete.
Exporting meshes
To export a mesh:
- Wait for it to finish loading. The status bar will show
Done! ✓
and 100%. - Click the export button. Top left of the document, button furthest to the right.
- Select a folder to export the mesh and it's textures to and click
Export
.
A single gltf file and the meshes textures will be exported. Each lod level is labelled in the gltf under their own subnode. Currently these gltf files don't look right as is when imported into Blender. This is because GLTF uses a different rendering model than RFG. Typically meshes have a diffuse, specular, and normal texture. Their names end with _d, _s, and _n respectively. You'll need to make the following changes to the textures in the Blender shading tab:
- Diffuse -> Set color space to linear, attach texture color to "Base Color" on the BSDF
- Specular -> Set color space to linear, attach texture color to "Specular" on the BSDF
- Normal -> Set color space to SRGB, attach texture color to "Normal" on the BSDF
In the near future an extension will be made to automatically patch the shader graph.
Camera movement
To move the camera hold down the right mouse button over the 3D view and use WASD to move around. Holding down shift while moving will cause the camera to move faster. Pressing Q and E will move the camera directly up and directly down respectively.
Mod packaging
Once you're done editing textures you can use Nanoforge to repack the editing files and generate a modinfo.xml for you. To do this, simply click File > Package mod
on the main menu bar. Once it's done go to the "Output" folder inside your project folder to see the modinfo.xml and any files that it relies on. These are ready for use with the re-mars-tered mod manager.
Map view
Nanoforge has partial support for viewing maps like the main campaign map. We'll be referring to them as territories as that's how RFG groups together many zones. See RF:G Map organization for more details on how RFG maps are structured. To open a territory via Tools > Open territory
on the main menu bar. Terr01 is the main campaign map territory. A new document should appear when you open a new territory. Camera movement is the same as the mesh viewer. See camera movement. Terrain is loaded in the background so you'll see separate blocks of terrain pop into view as they load. Bounding boxes are drawn for zone objects. With a territory open you should see new information on the zone panel and the zone objects panel. You can dock panels by clicking and dragging on their titles. It's recommended that you dock the zone object list below the zone list so you can see both at once.
Below is an annotated image of information you can view about territories plus descriptions for each annotation.
- First, in the top left is the zone list. Territories are made up of one or more zones which in turn have many zone objects. Click a zone to see its object in the zone objects panel (bottom left). By default the zone with the most objects is selected. In this case that's
04_06
. Note that each zone corresponds to a rfgzone_pc file. So, for example,04_06
is really terr01_04_06.rfgzone_pc. - Next, bottom left is the zone objects list. This lists the objects inside the selected zone. Click an object to see its properties in the properties panel. Some objects have child objects, denoted by having a triangle in front of their name which you can click to expand them. You can filter objects by type inside the filters header. By default some very common objects like navpoints are hidden.
- Finally, in the top right is the properties panel. This shows the properties of the selected zone object.
Object Flags
- Flag 0 (Persistent): Unknown, any objects with this flag have a separate copy stored in a second
rfgzone_pc
file with its name prefixed withp__.
So, for example, Crescent has tworfgzone_pc
files.mp_crescent.rfgzone_pc
andp_mp_crescent.rfgzone_pc
. The objects with the persistent flag are stored in both zone files, while objects without that flag are only stored inmp_crescent.rfgzone_pc
. It's consistently used on player spawns, on most siege objectives and on mostrfg_movers
on Siege maps. It's recommended you don't enable or disable this flag on maps if you're using the Terraform Patch as it contains fixes for missing objects that incorrectly used this flag or were missing it; doing so will cause objects to vanish. - Flag 1: Unknown
- Flag 2: Unknown
- Flag 3: Unknown; might be related to how the game saves/loads map data from save files (requires more investigation)
- Flag 4: Unknown; seems to always get converted to the runtime flag
streaming_fixed
, mostrfg_movers
andgeneral_movers
have this flag. If you're using the Terraform Patch it's recommended you don't disable this flag as it applies it to all objects since it was used most of the time and objects missing it were assumed to be an error by Volition. (They also made mistakes with the gamemode and persistent flags) - Flag 5: Unknown; seems to get converted to the runtime flag
force_full_save
- Flag 6: Unknown
- Flag 7: Unknown
- Flag 8: Spawns in Anarchy
- Flag 9: Spawns in Team Anarchy
- Flag 10: Spawns in CTF
- Flag 11: Spawns in Siege
- Flag 12: Spawns in Damage Control
- Flag 13: Spawns in Bagman
- Flag 14: Spawns in Team Bagman
- Flag 15: Spawns in Demolition
Chunk Flags
- Applies to
rfg_movers
&general_movers
. - When editing their properties in the inspector it's possible to change the
chunk_flags
. - You can also use
gameplay_properties.xtbl
to apply these flags and changegameplay_props
. If you're using the Terraform Patch a newgameplay_prop
namedInvulnerable
is added which also can be used to make objects indestructible. - Eg:
dynamic_link invulnerable
will make the object indestructible. Full list of flags below: - child_gives_control: Unknown.
- building: Unknown.
- dynamic_link: Unknown.
- world_anchor: Unknown.
- no_cover: Might be where EDF can't take cover behind objects.
- propaganda: EDF propaganda billboards you destroy for the achievement in singleplayer have this flag in
gameplay_properties.xtbl
. Probably used so the game knows to track the players progress and reduce EDF control of the sector. - kiosk:
tech_kiosk_EDF_A
has this flag ingameplay_properties.xtbl
. Probably used so the game knows its a special object that plays propaganda videos. - touch_terrain: Unknown, no
gameplay_properties.xtbl
entries use this flag and it's missing from the table description. - supply_crate: EDF crates you destroy for the achievement in singleplayer have this flag in
gameplay_properties.xtbl
. Probably used so the game knows to track the players progress. - mining: Ores you mine for salvage and the achievement in singleplayer have this flag in
gameplay_properties.xtbl
. Probably used so the game knows to track the players progress. - one_of_many: Unknown,
windmill_0708
,0102smokestack_86
&0102smokestack_86_child
have this flag ingameplay_properties.xtbl
. Might be related to one of the side activities where you have to destroy multiple targets. - plume_on_death: Unknown.
- invulnerable: Makes an object indestructible.
- inherit_damaga_pct: Unknown.
- regrow_on_stream: Unknown.
- casts_drop_shadow: Object will cast drop shadows.
- disable_collapse_effect: Unknown.
- force_dynamic: Unknown.
- show_on_map: Most objects in
gameplay_properties.xtbl
. Most likely means the object will show on the minimap in singleplayer. - regenerate: Unknown.
- casts_shadow: Object will cast a shadow map.
Object Info
obj_zone
= Defines the wind speed, terrain file name &spawn_resource_data
. If you move its location the terrain will no longer have collision.MPST
= Multiplayer siege target.MPDCT
= Multiplayer damage control target.shape_cutter
= Causes object to start off with initial damage, used on damage control targets or maps like crash site, ruins & remnant where they put a hole in the wall.spawn_node
= Camera view at start of match and end of game. If a map doesn't have a least one of these it will crash.spectator_camera
= Camera view exclusively for players using the spectator mode, recommended to just ignore adding them and usespawn_nodes
instead.trigger_region
= Killbox that can be set to a mine or cliff.rfg_mover
= Buildings, backpack racks & more.general_mover
= Explosive barrels and thebackpack_effect_attach.cchk_pc
objects for example.player_start
= Spawn point, can be set to Neutral, EDF or Guerilla.item
= In multiplayer the bag for bagman is set toitem_type
"multi_object_bagman_flag" and referencesitems_3d.xtbl
.weapon
= Weapon spawn,weapon_type
determines which weapon will spawn and referencesweapons.xtbl
.object_effect
= Visual effect, eg the fire on Nordic Bonus.multi_object_marker
= Multiple uses, in multiplayer themarker_type
can be set toBackpack rack
,Spawn node
,Flag capture zone
,King of the Hill target
,Siege target
&Spectator camera
.cover_node
=navpoint
= Probably where NPCs can navigate, similar to navmeshes in other games.object_action_node
=object_squad_spawn_node
= Probably where squads spawn and references varioussquads.xtbl
files.object_path_road
= Probably where NPCs can drive vehicles.object_guard_node
=object_vehicle_spawn_node
= Probably where vehicles can spawn like walkers found around the SP map.object_bounding_box
= Seems to be only be used in singleplayer, unknown why.object_activity_spawn
= Probably where you can start a side activity like demolition master for example.object_house_arrest_node
= Related to the house arrest side activity.object_patrol
= Probably where EDF patrol.object_dummy
=object_mission_start_node
= Probably where you can start a main mission.object_restricted_area
= Probably where the EDF will attack on sight and you will get an alert level in SP.backpack_effect_attach.cchk_pc
= Seems to be for attaching the backpack to the player when they spawn, DO NOT TOUCH IT ALL OR THE MAP WILL CRASH WHEN SPAWNING.
Object Properties
gameplay_props
referencesgameplay_properties.xtbl
.backpack_type
referencesmp_backpacks.xtbl
.weapon_type
referencesweapons.xtbl
.item_type
referencesitems_3d.xtbl
.spawn_resource_data
referencesspawn_resource.xtbl
.ambient_spawn
referencesambient_spawn_info.xtbl
ordlc01_ambient_spawn_info.xtbl
.visual
referenceseffects.xtbl
.sound
referencesfoley.xtbl
(not included in the game for some reason) however there isdlc01_foley.xtbl
.
Spawn Points
mp_team
can be set toNeutral
,EDF
orGuerilla
.- When making a CTF map and you don't want players spawning at the opposing base ensure you disable the Flag
Spawn in CTF
for any Neutral spawn points. - Unknown if the
respawn
andinitial_spawn
booleans do anything in multiplayer. indoor
boolean is probably left over from Saints Row since all of RF:G is technically outdoors and no spawn points use this boolean.checkpoint_respawn
&activity_respawn
are only used in singleplayer.- Foward X axis (blue line) determines player spawn direction.
Spawn Nodes
- Camera views at the start of match or when a player dies and is spectating.
- Foward X axis (blue line) determines player camera direction & view.
- If a map doesn't have at least one
Spawn node
it will crash when loading.
Spectator Cameras
- Believed to be similar to a
Spawn node
but used exclusively by players using the spectator option in matchmaking. Recommended to just ignore adding these since the community only plays custom games and addingSpawn nodes
to your map will serve the same purpose. - Foward X axis (blue line) determines player camera direction & view.
Mover Types
- Applies to
rfg_movers
- When editing their properties it's possible to change the
mtype
field to the corresponding numbers - Fixed = 0 (default)
- Normal = 1 (unknown)
- Lite = 2 (unknown)
- Ultra Lite = 3 (unknown)
- World Only = 4 (no collision but you can still destroy it with a hammer for example)
- No Collision = 5 (no collision)
Damage Control Targets
- Deep clone
MPDCT_MAPNAME_XXX
. - Move MPDCT_MAPNAME_XXX to the location of your choosing.
- In object properties for the parent change
display_name
to whatever you want your new damage control objective to be called. - If you're making a map that doesn't already have a damage control target you can open it in another tab and use the deep clone feature. If you're using the Terraform Patch the majority of Wrecking Crew maps will already have the asset along with all Siege maps.
- It's also possible to have only
1
target & more than3
. The limit before the game will crash is a total of6
targets when tested solo. The limit might be lower when played with other people but needs to be tested more. - It's also possible that using the same
display_name
name for each target can introduce instability. - The only valid value for the
mp_team
property isNeutral
. If you change the team toEDF
orGuerilla
and disable theshape_cutter
child so the target starts off intact it will belong to that team but not score any points until it's destroyed and repaired. - You can disable the
shape_cutter
child so the target starts off intact instead of destroyed like it is by default. - Any object can be used for a target if you add the
multi_object_marker
,shape_cutter
and offset them correctly from the parent. See Stratosphere if using the Terraform Patch for how to do this; shipping containers are the targets added on that map in the patch.
Siege Targets
- Open a siege map in one tab, open a regular map with the same objects in another tab.
- Deep clone the siege target to the regular map.
- Move the added siege target to the exact same location as the existing matching object on the regular map.
- Disable all the gamemode flags for the added siege target except for "Spawn in Siege" including its children.
- Delete all the children of the siege targets (usually spawns that will be outside the map since they were deep cloned from the siege map), after they are all deleted make sure to "orphan children" of the child to ensure it doesn't have ghost children.
- Disable the
Spawn in siege
flag on the matching original map object. - You need to update
mp_levels.xtbl
so the map is selectable in siege. - Ensure the siege target and its child have the persistent flag.
- The
priority
property for theSiege target
child determines which siege objects are unlocked to destroy, eg if you set it to1
it would be the first target the attackers can destroy, you can have multiple targets unlocked by using the same number and if you wanted to have targets unlocked one at a time you would use1
,2
,3
and so on. If you use a value of4294967295
they are also unlocked at the same time. - You must use an existing string in the game for the
display_name
property on the child or the map will crash. - If you mess up the offset of the child the map will crash.
Backpack Racks
- Make sure you deep clone them when adding new racks, the child
Backpack rack
is required for it to work properly. - Ensure that when moving the rack to a new location you only move the parent (the child will follow and be offset correctly), they will be named
Jetpack
for example if you're using the Terraform Patch. - When editing the child
backpack_type
determines which backpack will spawn, most are the same as their in game names with the exception of FirepowerCommando
& ConcussionShockwave
. These names are frommp_backpacks.xtbl
. - When editing the child you can change the number of backpacks on a rack, edit
num_backpacks
and change it from a value ranging from0-3
, although0
would mean the rack is empty and useless. - When editing the child it's possible to make it team exclusive, this means only the EDF or Red Faction can pickup backpacks from that rack during team game modes. Edit
mp_team
and enter eitherEDF
orGuerilla
. In game that rack will have a green glow around it if your team can use it. - The
random_backpacks
boolean in the object properties for theBackpack rack
child doesn't seem to do anything. - It's possible to make Backpack Racks destructable by changing
gameplay_props
toDefault
. During team game modes teams can fight for control by destroying racks and repairing them so only their team can use them. Racks you're able to use will glow green and racks you can't will glow red if you're using the Terraform Patch. - The maximum number of Backpack Racks you can have on a map before it causes issues is
25
.
Capture the Flag targets
- The EDF and Red Faction have their own unique flag stand placed near their team spawns on regular multiplayer maps.
- Make sure you use deep cloning and only move the parent when placing or moving them so the child is offset correctly.
- Objects are called
edf_flag_stand.cchk_pc
&guerrilla_flag_stand.cchk_pc
. - If you attempt to add more than two stands to a map, the extras will not work as capture points and only the asset will appear.
Neutral
is not a valid value formp_team
.
Bagman Objective Spawn
- Object is an
item
type referencingitems.3d_xtbl
. - Ignore the varying bounding box sizes when positioning the bag spawn, the XYZ axis position is what matters (the red, blue & green lines).
- The
respawn
boolean doesn't do what you expect, the bag will still return to the original spawn point regardless if it's enabled or not. - You can't place more than one bag on a map normally, only one will spawn. However you can have different bag locations in Bagman and Team Bagman by using the gamemode flags.
Weapon Spawns
- You should clone other weapons to add new ones, if you make them from scratch and don't get the bounding box correct for certain weapons it can cause duplicate weapon spawns in some cases.
weapon_type
determines which weapon will spawn and referencesweapons.xtbl
.- The
preplaced
boolean needs more testing but you can disable weapons in certain game modes by disabling the game mode flags anyway. - The
respawns
boolean will cause the weapon to not re-spawn again during a match after it has been picked up for the first time. - Ensure the bounding box is slightly above the ground/floor when positioning weapons.
Trigger Regions
- In multiplayer & singleplayer these are used to prevent the player from going out of bounds.
region_kill_type
can be set to acliff
or amine
. A cliff will cause the player to fall to their death, while a mine will explode and kill the player; this is also reflected in the killfeed message in multiplayer.- In singleplayer the
trigger_flags
can be changed so the trigger isn't enabled during missions and/or activities. Eg.not_in_mission
will disable it during a main mission,not_in_activity
would disable it during a side activity andnot_in_mission not_in_activity
would disable it during both. - The
enabled
boolean allows mappers to enable/disable the region. - The
trigger_shape
can be set to abox
orsphere
. However Nanoforge cannot render spherical bounding boxes yet. outer_radius
might control the size of the region, but this is untested.
Object Effects
- Plays an effect such as smoke, fire, explosion, sparks, etc. Also can play sounds if the effect has one in
effects.xtbl
and the sound string is used. sound_alr
= Unknown.sound
= The name of the sound ineffects.xtbl
visual
= The name of the effect ineffects.xtbl
looping
= Controls if the effect will play once or continuously.
Shape Cutters
- Used to damage or cut holes into destructible objects ahead of time.
outer_radius
might control the size of the cutter, but this is untested.
Maps with names different from their in-game names
- wc1 - Complex
- wc2 - Watchtower
- wc3 - Scrapheap
- wc4 - Vista
- wc5 - Fortress
- wc6 - Factory
- wc7 - Gulch
- wc8 - Cascade
- wc9 - Transmission
- wc10 - Pipeline
- wcdlc1 - Ruins
- wcdlc2 - Repercussion
- wcdlc3 - Imperial
- wcdlc4 - Expansion
- wcdlc5 - Frost
- wcdlc6 - Abandoned
- wcdlc7 - Stratosphere
- wcdlc8 - Invasion
- wcdlc9 - Nordic Bonus
- mpcx_crossover - Doubletime
- mpcx_assembly - Outpost
- mpdlc_landbridge - Equilibrium
- mpdlc_islands - Haven
- mpdlc_minibase - Complex
- mpdlc_overhang - Gradient
- mpdlc_ruins - Remnant
Maps with similar terrain
- Crash Site/Complex/Nordic Bonus
- Rift/Factory
- Remnant/Ruins
- Broadside/Invasion
- Wasteland/Gulch
- Outpost/Framework
- Radial/Transmission
- Sand Pit/Division/Watchtower
- Tutorial Area/Pipeline
- Pinnacle/Fortress
Misc Notes
- Deep clone objects if you want to keep the children of an object and use regular clone if you just want to clone the parent. Only move the parent when deep cloning and the children will follow and be offset correctly.
- If you see anything that looks like XML inside
layer_pc
orrfgzone_pc
files you can ignore that as we're 99% sure it's junk from their file packer reusing memory without zeroing it out. - Zone file format docs - Describes the zone format used by RFG in more detail.
Localization strings
While Nanoforge is only in English at the moment it can view localized strings used by RFG. RFG uses placeholder strings in many xtbls which are replaced with their localization at runtime. These are shown automatically in the xtbl editor. You can also view a list of all localized strings via Tools > Localization > View localized strings
. You can search by placeholder by checking "Search by identifier". You must fully enter the identifier without typos for this to work since it's comparing it to a hash of the identifier stored in the games localization files.
Scriptx viewer
RFG uses an xml based scripting system called scriptx for some mission logic. The viewer is an attempt at making it easier to read scriptx files which can be difficult to understand. It's a low priority feature so it likely won't see changes for a while but was enabled in case it's useful to people editing scriptx files. You still need to edit them by hand but it can help make it clearer what a script is doing. You can access it via View > Scriptx Viewer (WIP)
.