There is no special editor. The advanced editor is used to create these.
It is important when designing this to provide the final user (in the simple editor) the options to configure and customize these event libraries.
For example don't hardcode an event picture illustration for a message, but let the user specify one through a libvar or a table.
This can be done by adding stringlists (tables) to the library and libvars… these can be given documentation and datatypes and will enable to give the end-user the ease-of-use to tailer the library for his scenario.
It is very much recommended to always use the documentation buttons for libraries, libvars and stringlists (aka tables) so the end-user has some information on how to use them.
1. Never store data in regimeslots or gameslots. Always store data in libvars of your own library. This makes sure it can function independently and will not get data mixed up with other libraries not of your writing. Keep in mind you can create these libvars on the fly just by writing to them using the appropriate exec.
2. Only use the old 9 maparea slots for calculations within an event. Never store data in them, always use hexlibvars of your own library for that purpose.
3. Where possible do not hardcode core variables. Make them accesible as libvars or stringlists of your own library. The end user will appreciate it. As will you when you re-use your event library for a different scenario.
4. Never hardcode the action card categories… The designer using your libary needs to be able to determine the category of each card your library uses or generates. This means having a global libvar accesible in which the end user can specify the category number of your cards. (take a look at the basic event library to see this approach in action). This is because there are only limited categories and the person using the Simple Editor determines the category names and which cards goes in which category (because he might be using a lot of libraries).
5. Never hardcode eventpictures in the messages generated by your events. Allow the user of your library to set them through a libvar.
6. Make sure if you are looping through actioncards for example in your events and deleting stuff that you only delete stuff from your library and not from others. Remember: the end user might be using your library in conjunction with other libraries.
Only the event, cards and event pictures info will be read from these libraries
This is something I have not documented yet. As it would be a huge topic. There are over 400 execs and checks and understanding their use requires to understand almost all data types in the engine.
If there is a lot of interest in the Community Project I might start on this though.
Lets say we would like to have functionality that simulate some command & control problems for one or both of the sides in a scenario. How would we design an event library that would be capable to provide that functionality?
Before we start lets list what we'll need to do:
* A regime libvar that switches this functionality on/off: CommandProblemsEnabled = yes/no
* A regime libvar that specifies the % a HQ suffers C&C problems: CommandProblemsChance = numeric (0-100)
* A regime libvar that specifies the basic AP its units will lose: CommandProblemsFixedAPLoss = numeric (0-100)
* A regime libvar that specifies a random ammount of AP its units will lose: CommandProblemsRandomAPLoss = numeric (0-100)
* A 'turn event' that when the regime in question has its regimeLibVar CommandProblems set to 'yes' loops through all HQs to test them for Command problems.
Thats it. It will do the job. No chrome, but I am keeping it simple in this tutorial.
Make sure you have the advanced editor enabled. In the main menu click on the 'advanced editor' button and specify a smallest map size as possible.
Then once in the advanced editor go to the settings tab and then to the 'Import and Other settings' tab and set the ruleset to 'VR'
This is important as it tells the Simple editor that your event library is compatible with the default VR ruleset.
Then go to the lib tabsheet.
There we do the following.
1. Create a new library
2. Set the name of this library. Remember it has to be a unique name (call it something specific, not just 'my library' or something similar)
3. Add 4 libvars
4. Set each libvar to 'regime libvar' type and give it a propper name thats unique and describes already what it does.
Optionally you can also give a description field to each libvar and to the library as a whole. This is RECOMMENDED because you'd like other designers to make use of your library as well. Thats the whole philosophy behind the Community Project.
Thats it. We have defined our library and libvars. Now we go to the event editor.
In the event editor you do the following.
1. Add a new event.
2. Assign the event to your “Command Problems Library”.
3. Name the event
4. Set the execution type for the event to 'late start turn'. 'Late' and not 'Early' because we want to modify the AP of the units after they are set and before the player gets access to moving them.
Then I script the following code:
0) ' event code is going to come here 1) SETVAR: TempVar1 = CheckTurn 2) ' 3) SETVAR: TempVar2 = CheckLibVarRegime(TempVar1, 'Command Problems Library', 'CommandProblemsEnabled') 4) SETVAR: TempVar3 = CheckLibVarRegime(TempVar1, 'Command Problems Library', 'CommandProblemsChance') 5) SETVAR: TempVar4 = CheckLibVarRegime(TempVar1, 'Command Problems Library', 'CommandProblemsFixedAPLoss') 6) SETVAR: TempVar5 = CheckLibVarRegime(TempVar1, 'Command Problems Library', 'CommandProblemsRandomAPLoss') 7) ' 8) SETVAR: TempString1 = '' 9) ' 10) CHECK: TempVar2 > 0 11) ' If CommandProblemsEnabled=Yes we arrive here 12) LOOPER: TempVar6 FROM 0 TO CheckTotalUnits 13) ' 14) CHECK: CheckUnitHistoricalID(TempVar6) > 0 15) CHECK: CheckUnitIsHQ(TempVar6) > 0 16) CHECK: CheckUnitOwner(TempVar6) == TempVar1 17) ' 18) SETVAR: TempVar7 = CheckRandomPercent 19) CHECK: TempVar3 > TempVar7 20) ' If random roll 0-100 is below CommandProblemsChance for this HQ a command problem occures 21) ' 22) SETVAR: TempVar10 = TempVar5 23) SETVAR: TempVar10 * CheckRandomPercent 24) SETVAR: TempVar10 / 100 25) SETVAR: TempVar10 + TempVar4 26) SETVAR: TempVar11 = 0 27) SETVAR: TempVar11 - TempVar10 28) ' tempvar11 has the AP loss calculcated for units under this HQ (or hq itself) 29) SETVAR: TempString1 + CheckUnitName(TempVar6) 30) SETVAR: TempString1 + ' has suffered ' 31) SETVAR: TempString1 + TempVar11 32) SETVAR: TempString1 + 'AP due to command problems.' 33) SETVAR: TempString1 + ReturnCRLF 34) ' 35) LOOPER: TempVar8 FROM 0 TO CheckTotalUnits 36) ' 37) SETVAR: TempVar9 = 0 38) CHECK: CheckUnitHQ(TempVar8) == TempVar6 39) SETVAR: TempVar9 = 1 40) END CHECK 41) CHECK: CheckUnitIsHQ(TempVar8) > 0 42) SETVAR: TempVar9 = 0 43) END CHECK 44) CHECK: TempVar6 == TempVar8 45) SETVAR: TempVar9 = 1 46) END CHECK 47) ' 48) CHECK: TempVar9 == 1 49) ' This unit is suffering Command Problems 50) EXECUTE: ExecUnitApModify(TempVar8, TempVar11, -1, -1) 51) END CHECK 52) ' 53) END LOOPER 54) ' 55) END CHECK 56) ' 57) END CHECK 58) END CHECK 59) END CHECK 60) ' 61) END LOOPER 62) ' 63) CHECK: CheckStringLength(TempString1) > 0 64) EXECUTE: ExecMessage(TempVar1, -1, -1, -1) 65) END CHECK 66) ' 67) END CHECK
Save your work with the .dcxevlib extension.
And thats it.
In the final Step E i am just going to show how it looks like to the end-user when he loads your event library.
In the Simple Editor you or an end-user can load your event library and configure it (as shown in the example above) for one or more regimes.
Also note that the contents of the library are correctly listed as 4 libvars and 1 event.
Then finally when in-game when in-game the player will get reports like this one:
It is important to check if your event libraries work properly before distributing them.
Don't forget to use the description fields for the library itself and its libvars and/or stringlists (tables for end-user).
Thats it! A working and tested library ready for use or sharing with other designers.
Here you can download the library created in the tutorial above: