Hey everyone, hope you're having a good week so far. I've been working on wrapping up the code for the launcher so I can get that released with all the new suite of tools for the community, including the multiplayer tools for joining each other without hassle.
I kept running into edge cases with my auto-heal code, which was previously designed to just capture the essentials of each script and then be able to write the changes into an already formed version of the script. This turned out to be problematic, because who the hell has the time to review every written script to ensure it was exported successfully, especially with official updates.
So I took a new approach, which is taking a bit longer but now the code stores a highly readable and writable version of the code in the ScriptConfig for that script and uses that data to then be able to export the exact same script as the original script. The goal here is that if the scriptConfig regex pattern is able to write the entire original script successfully, and a new data0.pak could be written by the engine and run in the base code, then the Scriptconfigs are flexible enough for full modification and additional content injection.
Here is an example of the data if anyone is interested, this is part of a scriptable object class that was written for storing the data for each script within the 6 games:
Dead Island,
Dead Island Definitive,
Dead Island Riptide,
Dead Island Riptide Definitive,
Dying Light,
Dying Light2
This data can then be used to check for syntax errors and compare against newer versions of the code, but most importantly, builds out a solution for the code to find and identify values within the script independent of byte line data such as a WinMerge comparison. It doesn't care which line the data is on, only that it knows what the previous values were or what modified values you want to load in and apply.
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8d21e3752ce5f334ebdb212ab54ffed3, type: 3}
m_Name: sync_action_damage_presets_scr
m_EditorClassIdentifier:
editFlags: 0
fileName: sync_action_damage_presets
fileExtension: .scr
scriptRelativePath: scripts/damage
definitionType: 0
filePath: ph/source/data0.pak/scripts/damage/sync_action_damage_presets.scr
category: 0
parsingMethod: 9
regexPatterns:
- {fileID: 11400000, guid: dfba0494e4b464b429858692b121b21e, type: 2}
project: 5
isLocked: 0
fileSize: 8434
scriptId:
definitions: []
parsedContainers:
- containerName: Imports
fields:
- identifier: Imports.hit_reaction.def
value: hit_reaction.def
isDisabled: 0
isUseStatement: 0
- identifier: Imports.damage_effects.def
value: damage_effects.def
isDisabled: 0
isUseStatement: 0
- identifier: Imports.damage_flags.def
value: damage_flags.def
isDisabled: 0
isUseStatement: 0
- containerName: '"takedown_kill_ragdoll_impact"'
fields:
- identifier: main.SDamagePreset."takedown_kill_ragdoll_impact".DamageDefinition
value: '"Player_HumanTakedown"'
isDisabled: 0
isUseStatement: 0
- identifier: main.SDamagePreset."takedown_kill_ragdoll_impact".ReactionPreset
value: '"melee_ragdoll@damage_reaction_presets.scr"'
isDisabled: 0
isUseStatement: 0
- identifier: main.SDamagePreset."takedown_kill_ragdoll_impact".ImpactPhysicsForce
value: '"0.9"'
isDisabled: 0
isUseStatement: 0
- identifier: main.SDamagePreset."takedown_kill_ragdoll_impact".DamageFlags
value: EDamageFlag_Stealth
isDisabled: 0
isUseStatement: 0
- containerName: '"takedown_kill_ragdoll"'
fields:
- identifier: main.SDamagePreset."takedown_kill_ragdoll".DamageDefinition
value: '"Player_HumanTakedown"'
isDisabled: 0
isUseStatement: 0
- identifier: main.SDamagePreset."takedown_kill_ragdoll".ReactionPreset
value: '"melee_ragdoll@damage_reaction_presets.scr"'
isDisabled: 0
isUseStatement: 0
- identifier: main.SDamagePreset."takedown_kill_ragdoll".DamageFlags
value: EDamageFlag_Stealth
isDisabled: 0
isUseStatement: 0
- containerName: '"takedown_elite"'
fields:
- identifier: main.SDamagePreset."takedown_elite".DamageDefinition
value: '"Player_TakedownDamage#"'
isDisabled: 0
isUseStatement: 0
- identifier: main.SDamagePreset."takedown_elite".ReactionPreset
value: '"melee_light_hit@damage_reaction_presets.scr"'
isDisabled: 0
isUseStatement: 0
- containerName: '"takedown_default"'
fields:
- identifier: main.SDamagePreset."takedown_default".DamageDefinition
value: '"Player_TakedownDamage#"'
isDisabled: 0
isUseStatement: 0
- identifier: main.SDamagePreset."takedown_default".ReactionPreset
value: '"melee_ragdoll@damage_reaction_presets.scr"'
isDisabled: 0
isUseStatement: 0
- identifier: main.SDamagePreset."takedown_default".DamageFlags
value: EDamageFlag_Stealth
isDisabled: 0
isUseStatement: 0
The above information can then be written into a script that is checked against the original script to confirm that by using only the data stored within the ScriptConfig, it can write a compatible script with the game engine. The below attached files were all generated by the Unofficial Dev Tools.
Once the auto-heal and easy merge code is finished, I'll be releasing a new version of the launcher with a rebuilt version of IALR using these tools. Here is a list of all the systems I'm writing for the full release of the Unofficial Dev Tools:
Support for all 6 games to edit and create mods that are merge friendly with auto-update support
Script editor GUI to edit and create mods
Script Merger GUI to merge mods together
Weapon/Tool Designer
NPC/Faction Designer
Armor Designer (DL2)
Custom Character Designer (DL2 Infinity Designer rework)
Player Appearance Designer (DL2 has the most support, but may apply to other games with custom model support?)
Savegame editors, backup tools
GUI/XUI Designer (Almost done, needs a rpack loader in Unity for the DL1 and Dead island games)
Model Viewer
Texture Viewer
Custom Mod tools/rpack/model/texture tools
More updates coming soon! Thanks for your continued interest and support in this vast project, slowly but surely! Happy gaming.