Jump to content

[TESTERS WANTED] Project Dynamism - persistence and dynamic content framework


Project Dynamism

Recommended Posts

Hello all,

 

I would like to introduce "Project Dynamism", a persistence and dynamic content creation framework for DCS World.

 

My aim is to provide a dynamic and persisting environment that allows for better immersion and a feeling of progression in DCS World campaigns and replayed single missions.

This is achieved by recreating previously inflicted battle damage to scenery, static objects and AI units at mission start. At mission end all additional damage is recorded.

 

Project Dynamism is developed with focus on user-friendliness and feature-richness at minimal impact:

  • integrated into DCS World as module with own campaign and mission section
  • automatic check and renewal of the integration, e.g. after DCS update
  • controllable via F10 radio menu
  • minimum effort for mission creators to use (via naming convention, no triggers)
  • ease to port existing missions and campaigns to use the persistence features
  • minimal installation and integration overhead

 

Typical use cases are:

  • Create a single mission that is replayed until attrition of the enemy.
  • Create a series of training missions that accumulate the damage and destruction at the shooting ground.
  • Create a campaign that simulates weakening of the enemie's shield of SAM sites and final breakthrough to the valuable target.
  • Create a campaign that accurately tracks attrition of air, ground and sea forces be they friendly or foe.
  • Create a campaign with resource restrictions by persisting the destruction of warehouses, fuel storages and parked airplanes.
  • Create a campaign that simulates the effect of destroyed infrastructure like bridges, FARPs and supply points.

 

Inspired by DCS Witchcraft and the Dynamic Campaign Engine this project tries to push the boundaries even farther. The long-term target is to develop "Project Dynamism" into a full dynamic campaign environment. Running independently from DCS as a browser app it automatically creates missions for the user into which content is spawned dynamically. In view of the RTS dynamic campaign under development by Eagle Dynamics this project instead will focus on turn-based elements (e.g. alternating planning and execution stages) and casual gamers with limited time to play.

 

Currently this is a single-person project running next to a full-time job and small familiy. It started half a year ago. So keep your expectations at bay. This is also the reason why I am planning to ask for funding via donations or for advanced features. The base version will remain for free.

 

The money will be used to fund additional DCS maps and DCS modules if needed for development, pay local students who can spend more time in coding, and keeping the server running. In the end DCS and its community shall benefit due to the reinvestment of the money into DCS products and publishing parts of the software as open-source.

 

 

Enougth talking and dreaming, I would like to invite YOU to test the current version of "Project Dynamism". Please give constructive feedback about its current state, bugs and problems found as well as the future plans meantioned above. Download link, installation instructions and how-to-use can be found in the post below.

 

Happy flying!


Edited by Project Dynamism
Link to comment
Share on other sites

Download and Instructions

 

Download

 

 

Installation

  1. Extract the content of the zip archive to a folder of your choice (preferably one that needs no admin permission for creating files inside).
  2. Start the application by double-clicking "Dynamism.DCS.Connector.exe". If asked download and install the required NET Framework 4.5 from the official website.
  3. Please acknowledge the license agreement. The "Settings" tab should now be visible.
  4. Provide a unique username, password and email and click "Sign In". The button shall turn green.
  5. Integrate into your DCS World installation by picking the DCS World user data folder. The button shall turn green.
  6. In case the button next to DCS communication channel remains red, there is another process already occupying it. Please set another HTTP port.

 

Use

  1. Switch to the "Missions" tab and download the campaigns, single or multiplayer missions of interest. Give the "Download" button time to turn green (UI is frozen until).
  2. Start DCS World, you can minimize (to system tray) the application. Do not close it!
  3. DCS World's main screen shall show the Dynamism module's icon and the downloaded missions shall be listed in the respective DCS World section (missions/campaigns) under the Dynamism module.
  4. Have fun playing the provided content or create your own one!

 

Create

  • In order to use Project Dynamism in your own mission you will only need to follow a file naming convention:
    "Dyn - <campaign_id> - <mission_number><mission_type>.miz"


     

  • The campaign_id can be anything. It is used to identify missions that belong to a series. So make sure it is unique and the same for all.

    It is allowed to contain special characters including the dash "-"


     

  • Set mission_number to 1 except for a series of consecutive missions which should be numbered sequentially.

    The hundreds of mission_number are interpreted as stage

    e.g. mission_number 205 is the 5th mission in stage 2


     

  • Set mission_type to one of the following:

    'a' accumulative (incl. current mission)

    -> battle damage is accumulated, e.g. over several replays of same mission

     

    'i' incremental (excl. current mission)

    -> battle damage of previous mission in sequence is restored, no accumulation over several replays of same mission, only damage of last play of a mission is persisted

     

    'sa' staged accumulative (excl. previous stages, incl. current mission)

    -> same as accumulative but limited to scope of one stage

     

    'si' staged incremental (excl. previous stages, excl. current mission)

    -> same as incremental but limited to scope of one stage


     

  • If mission_type is omitted then 'a' is assumed. If mission_number is omitted then 1 is assumed.
    Hence the following mission file names are all valid and will trigger Project Dynamism to record the battle damages. Only the "Dyn -" prefix is mandatory:
                                           <campaign_id>         <m_number>    <m_type>
    "Dyn - FC3 - Su25_Tester.miz"        -> 'FC3 - Su25_Tester'   1             'a'
    "Dyn - Dynamism.miz"                 -> 'Dynamism'            1             'a'
    "Dyn - FC3 - Su25_Tester - 201si"    -> 'FC3 - Su25_Tester'   201           'si'
    "Dyn - Réunion & Liberté - 6"        -> 'Réunion & Liberté'   6             'a'


     

  • Alternatively a *.lua file can be placed next to the *.miz file to overwrite the parameters.
    Make sure the file names are identical. This allows for advanced features like reserves:
    "Dyn - FC3 - Su33_RussoGeorgian_09Aug_PotiSead.lua"
    "Dyn - FC3 - Su33_RussoGeorgian_09Aug_PotiSead.miz"


    The *.lua file might have the following content (all entries optional):

    dynamism.campaign_id = 'RussoGeorgian'
    dynamism.mission_no = 2
    dynamism.persistence_type = 'i'
    
    dynamism.reserves['C-101 #01'] = 'C-101 #05,C-101 #06,C-101 #07,C-101 #08,C-101 #09'
    dynamism.reserves['Patrol #1,Patrol #2'] = 'Patrol #3,Patrol #4'


     

  • Reserves will replace destroyed primary units/objects. Depletion of reserves is persisted.
    If static objects or units shall act as reserves they must be declared in the *.lua file next to the *.miz file.
    The reserves can themselves be units or static objects or just virtual (not existing in mission).
    Add one or multiple lines that conform to (see example above):
    dynamism.reserves['<primary_unit_names>'] = '<reserve_unit_names>'


 

 

Deinstallation

 

For easy deactivation and later re-activation the Dynamism mod can be disabled from within the DCS World module manager.

Permanent removal will require the following steps:

  1. Delete the unzipped application folder of "Dynamism.DCS.Connector.exe" or simply do not start the application as it will automatically re-integrate into DCS World.
  2. Go to DCS World user data folder (typically C:\Users\<username>\Saved Games\DCS) and delete:
    • the "Dynamism" folder inside the "Mods\tech" subfolder
    • the "DynamismHooks.lua" from the "Scripts\Hooks" subfolder


Edited by Project Dynamism
Link to comment
Share on other sites

Reserved

 

Share

 

Please feel encouraged to share your missions and campaigns.

They can easily be included into the library and be downloaded by fellow DCS players through Dynamism Connector or the DCS User Files.

 

To do so, the following steps are necessary:

  1. Package the Project Dynamism mission or campaign into a simple flat ZIP file
    - no folder hierarchy
    - preferably just the MIZ file for single or multiplayer
    - preferably just the CMP file, MIZ files and accompanying image files for campaigns
     
     
  2. Upload your ZIP file on the DCS User Files
    - https://www.digitalcombatsimulator.com/en/files/
     
     
  3. From within the "My files" section copy the download link
    - it should look like https://www.digitalcombatsimulator.com/upload/iblock/fb5/Ground%20Attrition%20-%20Snowplow.zip
    - Note that the download link changes every time an edit is made and needs to be updated in the library!
     
     
  4. Post an email to project.dynamism[-at-]outlook.com specifying the following items
    - type (single, campaign, multiplayer)
    - name (brief)
    - description (brief)
    - author (your attribution)
    - modules (needed map, plane modules, mods, etc.)
    - download link (from DCS user files, as above)
    - image (landscape 273x130 pixel PNG)

 

Thanks!


Edited by Project Dynamism
Link to comment
Share on other sites

Thank you for this tool. We needed such thing for a long time. So far I have only tried it in singleplayer and it works nice !

 

 

Will be a really cool addition to DCS in conjuntion with tigair's SKYNED IADS script

 

https://forums.eagle.ru/showthread.php?t=264586

 

as you could now implement a full IADS in the first mission of the campaign which would then get degraded more and more throughout the campaign when key components would get destroyed

Link to comment
Share on other sites

Hi, I get a crash when trying to download a campaign without specifying an install directory. I know it's stupid, and should not happen "in real life", but a simple error message would be better.

 

I also got this error at mission start :

 

https://pasteboard.co/IXRHRk4.png

 

https://pasteboard.co/IXRIiOD.png

 

At the end of the mission, I also get an error message.

 

EDIT : My bad ! I did something wrong and now it works ! Thanks a lot !


Edited by ikaruga
Link to comment
Share on other sites

Hi all, thanks for your interest and feedback.

 

@Hunter Joker

Interesting. I was at the impression ED is focusing on WWII first. Project Dynamism at the moment should work equaly well for WWII era. I just can't test much as I do not own any planes nor the asset pack and map(s).

This project will rather be geared towards single-player, sporadic play, and limited duration sessions than simulating a full scale war in real-time within DCS World.

 

@maxxstv:

Added deinstallation instructions to the second post (see above).

 

@ikaruga:

Thanks for discovering. I will add the issues to the project backlog for fixing it in the next version.

 

@Spearzone:

Was just reading about the SKYNED IADS script a couple of days ago. Indeed interesting.

Will try to make a Dynamism demo mission/campaign that uses it. Any suggestion for the player's airframe? I only own FC3, A-10C and Mig-21.

 

@Shrike88 and Spearzone:

I am a singleplayer guy. No experience what is needed for multiplayer and running it on a server.

The two demo campaigns "Snowplow" and "Hailstorm" define playable aircraft via client slots. Guess you tested and thats not enough for multiplayer?

Link to comment
Share on other sites

I did a few tests yesterday and I'm really enjoying it !

It works very well : the vehicles stay dead in the next mission, I tried adding a few choppers to both sides, they don't respawn at the next mission either if you don't specify them reserves...

 

This has a lot of potential, can't wait for more campaigns !

 

A question : why is it server based ? Why not saving the campaign data locally, like other missions do (Persian Power, Operation Clear Field ... ) ?

Link to comment
Share on other sites

Is there a way to edit or get to work with multiplayer online coop ? Does this support it ?

 

 

Would be pretty much interested in the same feature as i mainly play online coop missions.

 

 

The question is : Does the tool need the "campaign mode" to run or would it also be possible to get it running with the mission files running one after the other online coop , as you can only select .miz files when setting up a multiplayer but not a campaign file.

 

 

@project dynamism :

Any chance to make the tool running with a series of coop multiplayer mission (based on the same basic setup or template) that are not officially a campaign ?

Link to comment
Share on other sites

Hello all,

 

@Zortex

Yes, I am aware of this. The false positives on VirusTotal stem from the use of a code obfuscator. "Project Dynamism" is implemented in C# which binaries can be easily decompiled and the source code copied one-to-one.

Within minutes one would be able to produce a runnable alternative - or worse malicious - connector that handles communication between DCS World and the server (REST API). Also to hide API tokens I opted for code obfuscation knowing that "security by obfuscation" is just the very first layer of defense. I will experiment with less aggressive obfuscation and limiting it to the net code only. Maybe it helps in triggering less false positives.

 

@ikaruga

Happy you find the tool useful. Notice that also shot-down planes and choppers will be recreated as wrecks at their respective crash sites. Pretty impressive to fly over an area where a "turkey shoot" had happened in an earlier mission (e.g. enemy airbase taken by surprise).

I have a naval operation Su-33 campaign in the pipeline. It really benefits from the persistence and was the trigger for developing "Project Dynamism". Since DCS World 2.5.6 made considerble changes to lighting conditions I have to refly and adjust all missions again in order to recreate the perfect flying atmosphere.

Regarding the question why is "Project Dynamism" server based: You are perfectly right. Currently it could save all data locally, never in need to telephone out. I opted for server based technology to

- be more independent of DCS and LUA

- support a range of DCS versions and react to scripting framework changes by serving adapted LUA scripts

- provide dynamic content e.g. news/changelog, new missions and campaigns

- and most important auto-create mission files and control assets during mission runtime (in future)

- in summary be future proof to develop this into a dynamic campaign framework that is configured via web interface and interacts with DCS at runtime

 

@Spearzone

You can run without the "campaign mode". It is just a nice wrapping for single player. In effect all what configures the persistence is contained in the mission files. Running one mission after the other e.g. for online play is equivalent. Just make sure in the call to "dynamism.OnMissionStart('<campaign_id>',<mission_number>,'<mission_type>')" that <campaign_id> stays the same for all missions in the sequence and that <mission_number> increases.

So, YES, you can run a series of coop multiplayer missions (based on the same basic setup or template) that are not wrapped into a campaign but still use all features of the persistence.

Link to comment
Share on other sites

I tried running it as a host in multiplayer but it didn't work.

 

 

As there is no mission end like in campaign or single player where you press EXIT (you just load the next mission without exiting as this would shutdown the server)

 

i added a radio item in the comm menu that would let you run

 

"dynamism.OnMissionEnd()" to save any damage to units but it didn't work.

 

 

When loading the next mission all killed units were alive again.

 

 

Any suggestions ?

 

 

 

 

[EDIT : I tried now running the exact same 3 mission files

 

in campaign mode --> dynamism working

 

in single player mission mode --> dynamism not working

as a host in multiplayer --> dynamism not working]


Edited by Spearzone
Link to comment
Share on other sites

Hello Spearzone,

 

Interesting, as it should work equally well for single player mission mode. Adding the "dynamism.OnMissionEnd()" command to radio menu and calling it in multiplayer mode should also suffice.

 

One thing that could screw the experience in your setup of running the same mission over again would be to have <mission_type> in "dynamism.OnMissionStart('<campaign_id>',<mission_number>,'<mission_type>')" not set to 'a' but something like 'i'.

 

'i' incremental (excl. current mission)

-> battle damage of previous mission in sequence is restored, no accumulation over several replays of same mission, only damage of last play of a mission is persisted (when moving to the next in sequence)

-> when re-running the mission one will not see any damage previously inflicted in that mission but only the damage until the previous mission in the sequence.

 

 

Another idea is that the <campaign_id> of the single player mission is identical to an actual campaign in your pilot's log which was reset/never played. This will automatically trigger the "reset campaign" action which erases all inflicted damage. Try to name the single player <campaign_id> to something weird that is guaranteed to not exist (but respect the limited character set "a-zA-Z_0-9. -").

 

Same should fix the reset problem for the multiplaer mission (hopefully).

 

 

If this still does not sort things out you might want to PM me your respective dcs.log (typically in C:\Users\<username>\Saved Games\DCS\Logs\dcs.log)

You should see plenty of "SCRIPTING: Dynamism.Export" entries that trace what is going on.

Link to comment
Share on other sites

@Project Dynamism

 

 

Got it running as a host in a multiplayer game now.

 

 

You were right : The reason why it didn't work before was that the campaign name I used in the DoScript at mission start was also an active single player campaign.

 

 

I just resaved the mission using a new campaign name in "dynamism.OnMissionStart('<campaign_id>',<mission_number>,'<mission_type>')" and now it worked.

 

 

I had to make a trigger to manually call up the dynamism mission end script to make it usable in multiplayer.

Link to comment
Share on other sites

A question : What happens if I call the SetReserves multiple times ? Does it overwrite the previous occurrence or is it cumulative ? I want to set reserves for multiple planes but it's tedious to do them all in a single small text window.

Link to comment
Share on other sites

For defining reserves for units or statics in a mission one can call dynamism.SetReserves() multiple times.

The calls must happen before the call to dynamism.OnMissionStart(). The reserves can themselves be units or static objects or just virtual (not existing in mission).

 

dynamism.SetReserves({'F-16 #1','F-16 #2'},{'F-16-res #1','F-16-res #2','F-16-res #3','F-16-res #4'})
dynamism.SetReserves({'Molniya #1'},{'Molniya #2','Molniya #3'})
dynamism.SetReserves({'T-80 #01','T-80 #02','T-80 #03','T-80 #04','T-80 #05'},{'T-80 #06','T-80 #07','T-80 #08','T-80 #09','T-80 #10'})
dynamism.OnMissionStart('ReservesTestMission',1,'a')

 

In above example let's say there is a flight of two F-16 #1 and #2. Each of them is backed by four reserves F-16-res #1 .. #4. In case some F-16 is destroyed, on next mission start, it will be replenished from the reserves. So there will be again the flight of two F-16 #1 and #2. If the reserves exist as units in the mission, they will disappear depending on the attrition of the original F-16 flight. The reserves themselves can of course be destroyed as well, e.g. parked aircraft on the ground. This continues until all reserves are depleted. Then the original F-16 flight will not be able to be replenished and starts with a reduced number of units (depending which one was shot down).

 

Then there shall be only one Molniya ship attacking a convoi. In a previous mission Molniya #1 .. #3 were anchored at a port where the player had the chance to destroy them. Depending on the player's success at attacking the port there might now be a Molniya drawn from the surviving reserves or even none at all that is performing the attack. The attack group in the current mission is set up with Molniya #1.

 

Similar for a platoon of 10 T-80 tanks that were under attack in an earlier mission. Now 5 of them are supposed to make a thrust on the opponent's position. Depending on the earlier attrition of the platoon now 5 or less tanks will start the attack.


Edited by Project Dynamism
Link to comment
Share on other sites

@Spearzone

 

Glad you got it working. I'm currently looking into the "Hooks" mechanism of attaching to DCS World. Seems superior to the old approach of MissingScripting.lua

 

This appears to work for single and multiplayer, allows to differentiate between single/multi and whether it is running in campaign (through mission file path).

 

With this information I can get rid of the name collision problem you experienced.

 

Will roll out a new LUA script that adds the "save mission destructions" trigger automatically to the F10 menu... DONE v0.8.1


Edited by Project Dynamism
Link to comment
Share on other sites

Hello ProDy :

 

 

Just after the installation, i receive an alert by Windows Defender :

 

 

Capture.png

 

 

Threat detected: Trojan:Win32/Zpevdo.A

Warning level: Severe

Category: Trojan Horse

Details: This program is dangerous and executes commands from a malicious person.

 

 

 

Details :

 

file: C:\Program Files\Eagle Dynamics\Project Dynamism\Dynamism.DCS.Connector.exe

 

 

Without more explanantion, it's hard to thrust you and provide some tests.

Link to comment
Share on other sites

Hi HiCKS-BB15,

 

That is new and that is bad. Windows Defender is also my major instance of trust... not one of the small antimalware vendors on VirusTotal that used to give a false positive in the past.

 

I can also reproduce on my side. Thanks for the heads up.

Will investigate how to do better (see post https://forums.eagle.ru/showpost.php?p=4239097&postcount=13 for the reason).

 

 

Hello ProDy :

 

 

Just after the installation, i receive an alert by Windows Defender :

 

 

Capture.png

 

 

 

 

 

Without more explanantion, it's hard to thrust you and provide some tests.

Link to comment
Share on other sites

I'm afraid I have to agree with Bogey Jammer about the monthly fee.

 

Each player creating their own server and connecting on it with the current client would solve the problem, though ...

However, you would have to start the server, the client AND DCS to play the dynamic campaign. No idea how much RAM it would take, though ...

 

 

As a sidenote, there's currently a known bug in DCS being investigated that corrupts the debriefings and messes up with your dynamic campaign, preventing me to go to the next mission. Not much you can do about it, though ...

https://forums.eagle.ru/showthread.php?p=4240066#post4240066


Edited by ikaruga
Link to comment
Share on other sites

Wanna take part in the monthly fee and server based tool discussion here :

 

 

Generally I find this script is a great addition to DCS. I am part of a Coop mission multiplayer group and all of us put many many hour of freetime in it to create Skins packs, scripts (tigairs skynet IADS), handouts and missions without charging for it. It's part of the game.

 

 

@Project Dynamism : I would really recommend you to get away from this "using an extra tool with monthly fee approach".

Why not just publish the script (often this is how things really develop in the DCS community as other developers can create great additions to given scripts).

You could still incorporate a link to your website with a paypal donate button on it.

Anyone using the script can then decide wether it's useful for him and if he wants to make a donation (I would :smilewink:).

 

Anyway, thanks for doing this work !

Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...