📌 DMM - Dark engine Mod Manager

1 Guest is here.
6648652d76725
voodoo47Quote
that makes two of us. I should quit my job again - this adulting thing really isn't for me, I'm much better off playing old games and making silly mods.
Acknowledged by: Marvin
6648652d76ab1
sarge945Quote
Currently in ss2bmm, certain mods (like RSD, Alarming Cameras, SCP) overwrite string files and this makes them incompatible in terms of their strings.

From my understanding, currently if mod A modifies, say, the description for a psi power, they have to include the entire psihelp.str file, which will conflict with mod B which modifies a different psi power.

It's a real shame that we can do all sorts of fantastic dml changes for gameplay, and they remain largely compatible, but when it comes to strings files, we are stuck with annoying compatibility issues.

Would it be possible for the mod manager to combine these files into a "master" strings file, based on the currently loaded mods? This would need to be refreshed every time a mod with a strings file is activated or deactivated.

That's probably a lot of work, though.

Basically it would work like this:
a. Start with default versions (vanilla) of the string files
b. For each line that is overridden by the first mod, replace it in the master file
c. for each line that is overridden by the second mod and is not equal to the default version of that string, override them in the master file, replacing lines modified by the first mod, etc
d. repeat until all loaded mods are processed.

Can this be fixed as part of this mod manager?
6648652d76de0
RoSoDudeQuote
The mod manager wouldn't actually need to bother with all the diffing stuff if it just parsed the string labels and mod creators included minimal .str files containing only new/changed strings. For example, psihelp.str for Alarming Cameras would consist of just the following:

Psi7:"Remote Electron Tampering\n\nPrevents cameras from activating the alarm when destroyed.\n\nDuration: 5 seconds + 5 seconds per PSI"

The mod manager would see the "Psi7:" label and then replace the build .str file with the version above without changing anything else, and append any new string labels to the very end of the file. Any mods with a full .str file would do a full replacement so they'd have to be updated, but going forward it would be very simple to have mods changing individual strings with no compatibility issues, like with gameplay DML and asset replacement.

I would love to see this as a feature in DMM someday.
6648652d76e94
voodoo47Quote
I think the engine would have to support this, so probably a no go.
6648652d7786a
sarge945Quote

Quote by voodoo47:
I think the engine would have to support this, so probably a no go.

The idea is that it would build a full, complete string file before the game even starts

I will try to explain this in a different way to hopefully get us all on the same page.

Mod A and B both contain custom strings. Currently, both mods have to ship a complete psihelp.str file (or whichever string file they modified) containing all strings in the game, including ones they did not modify, which means they are inherently incompatible as the unmodified strings from one file will overwrite the changes from the other.

Here's a real world example:

RSD modified some psi power descriptions. As a result, it ships the following psihelp.str file


Code:
BuyText0:"These buttons select which Tier of psionic disciplines you wish to purchase."
BuyText2:"This shows how many cyber modules you have available to spend."
BuyText3:"These buttons navigate between various character MFDs."
AmpText0:"These buttons switch between the different Tiers of psionic disciplines."

Psi0:"First Tier Neural Capacity\n\nThis is required for First Tier psionic disciplines.  It increases your maximum psi points by 2.  All First Tier disciplines cost 1 psi point per use."
Psi1:"Psycho-Reflective Screen\n\nProtects you from 20% of all combat damage.\n\nDuration: 20 seconds + 30 seconds per PSI"
Psi2:"Neuro-Reflex Dampening\n\nEliminates all weapon kickback.\n\nDuration: 1 minute + 20 seconds per PSI"
Psi3:"Kinetic Redirection\n\nPulls an object toward you.\n\nDuration: 1 second per PSI"
Psi4:"Psychogenic Endurance\n\nIncreases your Endurance by 2.\n\nDuration: 1 minute + 1 minute per PSI"
Psi5:"Psychogenic Cyber-Affinity\n\nIncreases your Cybernetic Affinity by 2.\n\nDuration: 30 seconds + 30 seconds per PSI"
Psi6:"Projected Cryokinesis\n\nLaunches a heat-draining projectile, equally effective against robotic and non-robotic targets.  Higher PSI increases damage."
Psi7:"Remote Electron Tampering\n\nMakes active alarms time out faster.\n\nTime reduction: 5 seconds + 5 seconds per PSI"
Psi8:"Second Tier Neural Capacity\n\nThis is required for Second Tier psionic disciplines.  It increases your maximum psi points by 4.  All Second Tier disciplines cost 2 psi points per use."
Psi9:"Anti-Entropic Field\n\nWhile active, ranged weapons will not degrade and cannot break.\n\nDuration: 20 seconds + 20 seconds per PSI"
Psi10:"Adrenaline Overproduction\n\nIncreases base damage of hand-to-hand weapons by 1 per PSI.\n\nDuration: 20 seconds per PSI"
Psi11:"Neural Decontamination\n\nClears radiation and shields you from 80% of further absorption.\n\nDuration: 10 seconds + 5 seconds per PSI"
Psi12:"Cerebro-Stimulated Regeneration\n\nRegenerates lost hit points.\n\nAmount healed: 1 hit point per PSI"
Psi13:"Psychogenic Strength\n\nIncreases your Strength by 2.\n\nDuration: 1 minute + 1 minute per PSI"
Psi14:"Recursive Psionic Amplification\n\nIncreases your Psionic Ability by 3.  Psi point costs are doubled while active.\n\nDuration: 10 seconds + 10 seconds per PSI"
Psi15:"Localized Pyrokinesis\n\nDamages all creatures within a certain radius.\n\nDuration: 5 seconds + 5 seconds per PSI"
Psi16:"Third Tier Neural Capacity\n\nThis is required for Third Tier psionic disciplines.  It increases your maximum psi points by 6.  All Third Tier disciplines cost 3 psi points per use."
Psi17:"Molecular Duplication\n\nUse some nanites to duplicate one ammo clip or hypo.\n\nChance of success: 40% + 10% per PSI"
Psi18:"Electron Cascade\n\nRecharges a single item or weapon by 20% per point of PSI, up to the maximum allowed by your Maintenance skill."
Psi19:"Energy Reflection\n\nProvides 50% immunity to all energy-based damage sources.\n\nDuration: 20 seconds per PSI"
Psi20:"Instantaneous Quantum Relocation\n\nSets teleport marker at your current position (no psi cost), then when used again teleports you to the marker. Hit Alt-T to clear marker."
Psi21:"Remote Pattern Detection\n\nShows the location of many useful items, including nanites, ammo, hypos, implants, and audio logs.\n\nDuration: 2 minutes per PSI"
Psi22:"Projected Pyrokinesis\n\nLaunches a fiery projectile, most effective against non-robotic targets.  Higher PSI increases damage."
Psi23:"Psychogenic Agility\n\nIncreases your Agility by 2.\n\nDuration: 1 minute + 1 minute per PSI"
Psi24:"Fourth Tier Neural Capacity\n\nThis is required for Fourth Tier psionic disciplines.  It increases your maximum psi points by 8.  All Fourth Tier disciplines cost 4 psi points per use."
Psi25:"External Psionic Detonation\n\nDrops a psionic proximity mine.  Does half damage to robots, and double damage to psionically sensitive creatures.  Higher PSI increases damage.\nDuration: 4 minutes"
Psi26:"Enhanced Motion Sensitivity\n\nShows the location of all nearby hostiles.\n\nDuration: 1 minute per PSI"
Psi27:"Neural Toxin-Blocker\n\nClears toxins and shields you from 100% of further absorption.\n\nDuration: 10 seconds + 5 seconds per PSI"
Psi28:"Psionic Hypnogenesis\n\nCauses a non-robotic target to become docile and stand still.\n\nDuration: 10 seconds per PSI, or until damaged by a human"
Psi29:"Molecular Transmutation\n\nTurns ammunition and hypos into nanites."
Psi30:"Metacreative Barrier\n\nCreates a wall of psionic force directly in front of you.\n\nWall's hit points: 150 + 50 per PSI over 5\nDuration: 4 minutes"
Psi31:"Cerebro-Energetic Extension\n\nTurns your Psi Amp into a powerful melee weapon.\n\nDuration: 10 seconds per PSI"
Psi32:"Fifth Tier Neural Capacity\n\nThis is required for Fifth Tier psionic disciplines.  It increases your maximum psi points by 10.  All Fifth Tier disciplines cost 5 psi points per use."
Psi33:"Advanced Cerebro-Stimulated Regeneration\n\nRegenerates lost hit points.\n\nAmount healed: 3 hit points per PSI"
Psi34:"Soma Transference\n\nDrains target non-robotic creature of hit points, and adds those hit points to your total."
Psi35:"Electron Suppression\n\nImmobilizes any robotic target.\n\nDuration: 5 seconds per PSI"
Psi36:"Imposed Neural Restructuring\n\nCauses a non-robotic target to become hostile to all non-human creatures.\n\nDuration: 10 seconds per PSI, or until damaged by a human"
Psi37:"Remote Circuitry Manipulation\n\nAllows you to hack psionically, ignoring skill requirements.  Uses half your PSI (rounded up) in place of both Hacking skill and Cyber-Affinity, and costs psi points instead of nanites."
Psi38:"Photonic Redirection\n\nRenders you invisible to all creatures.  Firing a weapon will end the effect.\n\nDuration: 4 seconds per PSI"
Psi39:"Psycho-Reflective Aura\n\nProtects you from 60% of all combat damage.\n\nDuration: 10 seconds + 20 seconds per PSI"

PsiShort0:"This is a bug"
PsiShort1:"Psi Shield"
PsiShort2:"Reflex"
PsiShort3:"Psi Pull"
PsiShort4:"Endurance"
PsiShort5:"Cyber Affin."
PsiShort6:"Cryokinesis"
PsiShort7:"Stop Alarm"
PsiShort8:"This is a bug"
PsiShort9:"Anti-Entropy"
PsiShort10:"Adrenaline"
PsiShort11:"Rad Shield"
PsiShort12:"Regenerate"
PsiShort13:"Strength"
PsiShort14:"Recursive Psi"
PsiShort15:"Pyro Field"
PsiShort16:"This is a bug"
PsiShort17:"Duplicate"
PsiShort18:"Recharge"
PsiShort19:"Reflect"
PsiShort20:"Teleport"
PsiShort21:"Detect Items"
PsiShort22:"Pyrokinesis"
PsiShort23:"Agility"
PsiShort24:"This is a bug"
PsiShort25:"Prox. Mine"
PsiShort26:"Sense Motion"
PsiShort27:"Toxin Sheld"
PsiShort28:"Hypnosis"
PsiShort29:"Transmute"
PsiShort30:"Barrier"
PsiShort31:"Psi Sword"
PsiShort32:"This is a bug"
PsiShort33:"Adv. Regen"
PsiShort34:"Transfer HP"
PsiShort35:"Suppression"
PsiShort36:"Restructure"
PsiShort37:"Psi Hack"
PsiShort38:"Invisibility"
PsiShort39:"Psi Shield+"

PsiIcon0:"picn00"
PsiIcon1:"picn01"
PsiIcon2:"picn02"
PsiIcon3:"picn04"
PsiIcon4:"picn05"
PsiIcon5:"picn06"
PsiIcon6:"picn07"
PsiIcon7:"picn21"
PsiIcon8:"picn08"
PsiIcon9:"picn03"
PsiIcon10:"picn22"
PsiIcon11:"picn10"
PsiIcon12:"picn11"
PsiIcon13:"picn12"
PsiIcon14:"picn13"
PsiIcon15:"picn15"
PsiIcon16:"picn16"
PsiIcon17:"picn09"
PsiIcon18:"picn14"
PsiIcon19:"picn17"
PsiIcon20:"picn18"
PsiIcon21:"picn19"
PsiIcon22:"picn20"
PsiIcon23:"picn23"
PsiIcon24:"picn24"
PsiIcon25:"picn25"
PsiIcon26:"picn26"
PsiIcon27:"picn27"
PsiIcon28:"picn28"
PsiIcon29:"picn29"
PsiIcon30:"picn30"
PsiIcon31:"picn31"
PsiIcon32:"picn32"
PsiIcon33:"picn33"
PsiIcon34:"picn34"
PsiIcon35:"picn35"
PsiIcon36:"picn36"
PsiIcon37:"picn37"
PsiIcon38:"picn38"
PsiIcon39:"picn39"

Meanwhile, Alarming Cameras, which modifies one Psi power, has to contain a very similar file:


Code:
BuyText0:"These buttons select which Tier of psionic disciplines you wish to purchase."
BuyText2:"This shows how many cyber modules you have available to spend."
BuyText3:"These buttons navigate between various character MFDs."
AmpText0:"These buttons switch between the different Tiers of psionic disciplines."

Psi0:"First Tier Neural Capacity\n\nThis is required for First Tier psionic disciplines.  It increases your maximum psi points by 2.  All First Tier disciplines cost 1 psi point per use."
Psi1:"Psycho-Reflective Screen\n\nProtects you from 15% of all combat damage.\n\nDuration: 20 seconds + 30 seconds per PSI"
Psi2:"Neuro-Reflex Dampening\n\nEliminates all weapon kickback.\n\nDuration: 1 minute + 20 seconds per PSI"
Psi3:"Kinetic Redirection\n\nPulls an object toward you.\n\nDuration: 1 second per PSI"
Psi4:"Psychogenic Agility\n\nIncreases your Agility by 2.\n\nDuration: 2 minutes + 1 minute per PSI"
Psi5:"Psychogenic Cyber-Affinity\n\nIncreases your Cybernetic Affinity by 2.\n\nDuration: 2 minutes + 1 minute per PSI"
Psi6:"Projected Cryokinesis\n\nLaunches a heat-draining projectile, equally effective against robotic and non-robotic targets.  Higher PSI increases damage."
Psi7:"Remote Electron Tampering\n\nPrevents cameras from activating the alarm when destroyed.\n\nDuration: 5 seconds + 5 seconds per PSI"
Psi8:"Second Tier Neural Capacity\n\nThis is required for Second Tier psionic disciplines.  It increases your maximum psi points by 4.  All Second Tier disciplines cost 2 psi points per use."
Psi9:"Anti-Entropic Field\n\nWhile active, ranged weapons will not degrade and cannot break.\n\nDuration: 10 seconds + 20 seconds per PSI"
Psi10:"Adrenaline Overproduction\n\nIncreases hand-to-hand damage by a factor equal to PSI.\n\nDuration: 10 seconds per PSI"
Psi11:"Neural Decontamination\n\nShields you from 80% of radiation damage.\n\nDuration: 10 seconds + 5 seconds per PSI"
Psi12:"Cerebro-Stimulated Regeneration\n\nRegenerates lost hit points.\n\nAmount healed: 2 hit points per PSI"
Psi13:"Psychogenic Strength\n\nIncreases your Strength by 2.\n\nDuration: 2 minutes + 1 minute per PSI"
Psi14:"Recursive Psionic Amplification\n\nIncreases your Psionic Ability by 2.  Psi point costs are doubled while active.\n\nDuration: 10 seconds + 10 seconds per PSI"
Psi15:"Localized Pyrokinesis\n\nDamages all creatures within a certain radius.  Higher PSI increases damage.\n\nDuration: 15 seconds + 8 seconds per PSI"
Psi16:"Third Tier Neural Capacity\n\nThis is required for Third Tier psionic disciplines.  It increases your maximum psi points by 6.  All Third Tier disciplines cost 3 psi points per use."
Psi17:"Molecular Duplication\n\nUse some nanites to duplicate one ammo clip or hypo.\n\nChance of success: 30% + 10% per PSI"
Psi18:"Electron Cascade\n\nRecharges a single item or weapon by 20% per point of PSI, up to the maximum allowed by your Maintenance skill."
Psi19:"Energy Reflection\n\nProvides 50% immunity to all energy-based damage sources.\n\nDuration: 20 seconds per PSI"
Psi20:"Neural Toxin-Blocker\n\nShields you from 100% of toxin absorption.\n\nDuration: 10 seconds + 5 seconds per PSI"
Psi21:"Enhanced Motion Sensitivity\n\nShows the location of all nearby creatures.\n\nDuration: 30 seconds per PSI"
Psi22:"Projected Pyrokinesis\n\nLaunches a fiery projectile, most effective against non-robotic targets.  Higher PSI increases damage."
Psi23:"Psionic Hypnogenesis\n\nCauses a non-robotic target to become docile and stand still.\n\nDuration: 20 seconds per PSI, or until damaged by a human"
Psi24:"Fourth Tier Neural Capacity\n\nThis is required for Fourth Tier psionic disciplines.  It increases your maximum psi points by 8.  All Fourth Tier disciplines cost 4 psi points per use."
Psi25:"Photonic Redirection\n\nRenders you invisible to all creatures.  Firing a weapon will end the effect.\n\nDuration: 5 seconds + 5 seconds per PSI"
Psi26:"Remote Pattern Detection\n\nShows the location of many useful items, including nanites, ammo, hypos, implants, and audio logs.\n\nDuration: 1 minute per PSI"
Psi27:"Electron Suppression\n\nImmobilizes any robotic target.\n\nDuration: 3 seconds per PSI"
Psi28:"Psychogenic Endurance\n\nIncreases your Endurance by 2.\n\nDuration: 2 minutes + 1 minute per PSI"
Psi29:"Molecular Transmutation\n\nTurns ammunition and hypos into nanites."
Psi30:"Remote Circuitry Manipulation\n\nAllows you to hack psionically.  Uses half your Psionic Ability (rounded up) in place of both Hacking skill and Cyber-Affinity, and costs psi points instead of nanites."
Psi31:"Cerebro-Energetic Extension\n\nTurns your Psi Amp into a powerful melee weapon.\n\nDuration: 10 seconds per PSI"
Psi32:"Fifth Tier Neural Capacity\n\nThis is required for Fifth Tier psionic disciplines.  It increases your maximum psi points by 10.  All Fifth Tier disciplines cost 5 psi points per use."
Psi33:"Advanced Cerebro-Stimulated Regeneration\n\nRegenerates lost hit points.\n\nAmount healed: 5 hit points + 5 hit points per PSI"
Psi34:"Soma Transference\n\nDrains target non-robotic creature of hit points, and adds those hit points to your total."
Psi35:"Instantaneous Quantum Relocation\n\nSets teleport marker at your current position, then when used again teleports you to the marked location. Hit Alt-T to clear marker."
Psi36:"Imposed Neural Restructuring\n\nCauses a non-robotic target to become hostile to all non-human creatures.\n\nDuration: 10 seconds per PSI, or until damaged by a human"
Psi37:"Metacreative Barrier\n\nCreates a wall of psionic force directly in front of you.\n\nWall's hit points: 150 + 50 per PSI over 5\nDuration: 4 minutes"
Psi38:"External Psionic Detonation\n\nDrops a psionic proximity mine.  Does no damage to robots, and double damage to psionically sensitive creatures.\n\nDuration: 4 minutes"
Psi39:"Psycho-Reflective Aura\n\nProtects you from 60% of all combat damage.\n\nDuration: 10 seconds + 20 seconds per PSI"

PsiShort0:"This is a bug"
PsiShort1:"Psi Shield"
PsiShort2:"Reflex"
PsiShort3:"Psi Pull"
PsiShort4:"Agility"
PsiShort5:"Cyber Affin."
PsiShort6:"Cryokinesis"
PsiShort7:"Stop Alarm"
PsiShort8:"This is a bug"
PsiShort9:"Anti-Entropy"
PsiShort10:"Adrenaline"
PsiShort11:"Rad Shield"
PsiShort12:"Regenerate"
PsiShort13:"Strength"
PsiShort14:"Recursive Psi"
PsiShort15:"Pyro Field"
PsiShort16:"This is a bug"
PsiShort17:"Duplicate"
PsiShort18:"Recharge"
PsiShort19:"Reflect"
PsiShort20:"Toxin Sheld"
PsiShort21:"Sense Motion"
PsiShort22:"Pyrokinesis"
PsiShort23:"Hypnosis"
PsiShort24:"This is a bug"
PsiShort25:"Invisibility"
PsiShort26:"Detect Items"
PsiShort27:"Suppression"
PsiShort28:"Endurance"
PsiShort29:"Transmute"
PsiShort30:"Psi Hack"
PsiShort31:"Psi Sword"
PsiShort32:"This is a bug"
PsiShort33:"Adv. Regen"
PsiShort34:"Transfer HP"
PsiShort35:"Teleport"
PsiShort36:"Restructure"
PsiShort37:"Barrier"
PsiShort38:"Prox. Mine"
PsiShort39:"Psi Shield+"

PsiIcon0:"picn00"
PsiIcon1:"picn01"
PsiIcon2:"picn02"
PsiIcon3:"picn04"
PsiIcon4:"picn05"
PsiIcon5:"picn06"
PsiIcon6:"picn07"
PsiIcon7:"picn21"
PsiIcon8:"picn08"
PsiIcon9:"picn03"
PsiIcon10:"picn22"
PsiIcon11:"picn10"
PsiIcon12:"picn11"
PsiIcon13:"picn12"
PsiIcon14:"picn13"
PsiIcon15:"picn15"
PsiIcon16:"picn16"
PsiIcon17:"picn09"
PsiIcon18:"picn14"
PsiIcon19:"picn17"
PsiIcon20:"picn18"
PsiIcon21:"picn19"
PsiIcon22:"picn20"
PsiIcon23:"picn23"
PsiIcon24:"picn24"
PsiIcon25:"picn25"
PsiIcon26:"picn26"
PsiIcon27:"picn27"
PsiIcon28:"picn28"
PsiIcon29:"picn29"
PsiIcon30:"picn30"
PsiIcon31:"picn31"
PsiIcon32:"picn32"
PsiIcon33:"picn33"
PsiIcon34:"picn34"
PsiIcon35:"picn35"
PsiIcon36:"picn36"
PsiIcon37:"picn37"
PsiIcon38:"picn38"
PsiIcon39:"picn39"

As a result of this, @RoSoDude has to ship a custom compatibility file that merges the changes from both strings file, which needs to be installed manually as a separate minimod, above both mods. Any mods that modify string files and want to be compatible with others will have to do the same thing.

While this currently only affects a handful of mods, there is a reasonable chance this will get worse over time as more mods are added.

The suggestion is to allow modders to instead ship a partial version of a given string file, such as psihelp.str.prt, containing only the modified text, so Alarming Cameras could ship a file containing this:


Code:
Psi7:"Remote Electron Tampering\n\nPrevents cameras from activating the alarm when destroyed.\n\nDuration: 5 seconds + 5 seconds per PSI"
The mod manager could then maintain a managed version of the string files, starting with the vanilla files and adding strings to them as needed before launching the game.

In order to maintain compatibility with other mod managers (ss2bmm), mod authors could ship 2 versions of each string file:
psihelp.str - this is the complete version containing every string, which is how strings are handled now
psihelp.str.prt - this contains only the new strings

Then it would work like this:
- Incompatible mod managers would simply install both files, which is harmless as the engine won't read the prt file, so everything works as it does now. This should not require any changes to any existing mod manager.
- If DMM sees the prt file, it should completely ignore the regular version and instead process the part file, adding it's contents to the end of the managed string file, ensuring compatibility with other mods that use the same system to modify the same file.

This has some advantages:
- No need to modify the game engine - it only ever sees a full, complete strings file
- This feature is effectively opt-in for mod authors, other mods will be unaffected and will work as normal
- Mods using this feature can still be used in other mod managers, albeit with the same problems we currently have now

This has some drawbacks:
- It would have to be done by the mod manager, probably just before launching the game, which means more work for DMM developers and yet another subsystem to maintain
- Mod authors who want to use this feature and maintain compatibility with multiple mod managers will have to duplicate their strings - both in the complete copy and the part file. This is not an issue if they only decide to support DMM - at that point they only need to ship the .prt file

I have been talking with some mod developers about this and we found out that Dark is totally okay if you append duplicates to the string file, it will use whichever one is lower in the file. So it should be relatively straightforward for DMM to copy/manage the vanilla strings file and simply append to it for each mod in order.

I'm not sure how this would affect localised versions.

I hope this has clarified the suggestion somewhat, and explained why I feel it would be an important feature to have. I hope more people can chime in with feedback/suggestions, as I understand this is a big request and there are a lot of edge cases we need to consider here.
Acknowledged by: RoSoDude
Reply

Legal stuff

Privacy Policy & Terms of Service Contact