Changes between Version 2 and Version 3 of Mod_Verification_Process


Ignore:
Timestamp:
Apr 5, 2023, 9:33:38 PM (13 months ago)
Author:
Langbart
Comment:

Add additional remarks about "ignoreInCompatibilityChecks", some grammar, punctuation and readability changes

Legend:

Unmodified
Added
Removed
Modified
  • Mod_Verification_Process

    v2 v3  
    11== Introduction ==
    22
    3 This page aims to describe the verification process mods undergo before being made readily available on [https://0ad.mod.io/ mod.io]. Because we allow download these modes by signing them, we have to ensure they are not broken, that they do not contain malicious code, whether they are indeed OOS compatible, and whether we are not needlessly stealing bandwith for big mods.
     3This page aims to describe the verification process mods undergo before being made readily available on [https://0ad.mod.io/ mod.io]. We must ensure that these mods are not broken, that they are not malicious code, that they are indeed Out-Of-Sync (OOS) compatible, and that we are not needlessly stealing bandwidth for big mods.
    44
    55== Steps ==
     
    77=== Mod is downloaded ===
    88
    9 In general this step should go well, since that's  [https://0ad.mod.io/ mod.io]'s responsibility.
     9In general, this step should go well, since that's  [https://0ad.mod.io/ mod.io]'s responsibility.
    1010
    1111=== Mod is extracted ===
     
    1313==== Directory Structure ====
    1414
    15 We need to make sure that the mod as the correct directory structure. E.g. it should be as follows
     15Check that the directory structure is correct, see below for a proper example.
    1616{{{
    1717└───sky_ships.zip
    1818    │   mod.json
    1919    │   readme.md
    20     │
    2120    ├───art
    2221    │   ├───actors
    2322    │   │   └───structures
    2423    │   │           argestesion.xml
    25     │   │
    2624    │   └───meshes
    2725    │       └───structural
    2826    │               argestesion.dae
    29     │
    3027    └───simulation
    3128        └───templates
    3229            └───structures
    3330                    argestesion.xml
    34 
    3531}}}
    3632
    37 and not like this:
     33See below for a wrong example. This will not work, and the game will be confused.
    3834{{{
    3935└───sky_ships.zip
     
    4137        │   mod.json
    4238        │   readme.md
    43         │
    4439        ├───art
    4540        │   ├───actors
    4641        │   │   └───structures
    4742        │   │           argestesion.xml
    48         │   │
    4943        │   └───meshes
    5044        │       └───structural
    5145        │               argestesion.dae
    52         │
    5346        └───simulation
    5447            └───templates
     
    5750}}}
    5851
    59 Else it will not work and the game will be confused. On Windows it usually means you generated the zip from outside the folder instead of from inside the folder.
     52On `Windows`, it usually means you generated the zip from outside the folder instead of from inside the folder.
    6053
    6154==== mod.json ====
    6255
    63 The `mod.json` file is an important part of the verification process. For the sake of the demonstration let's assume we have a mod called `Sky Ships` with a mod.io url `https://0ad.mod.io/sky-ships` and a directory structure like the correct one above.
     56The `mod.json` file is an important part of the verification process. For the sake of the demonstration, let's assume we have a mod called `Sky Ships` with a mod.io url `https://0ad.mod.io/sky-ships` and a directory structure like the correct one above.
    6457
    65 Now let's assume the `mod.json` file looks like this:
     58Let's assume that the mod.json file looks like this:
    6659
    6760{{{#!json
     
    7164        "label": "New stuff, new things, and new bugs",
    7265        "description": "New stuff, new things, and new bugs + more stuff",
    73         "dependencies": [
    74                 "0ad=0.0.25"
    75         ]
     66        "dependencies": ["0ad=0.0.25"]
    7667}
    7768}}}
    7869
    79 A few things are wrong with this `mod.json`
     70A few things are wrong with this `mod.json`:
    8071
    81 1. `"name"` should be the same as the `mod.io` url so in this case `sky-ships` and not `sky_ships
     721. `"name"` should be the same as the `mod.io` url so in this case `sky-ships` and not `sky_ships`
    82732. `"label"` should be `Sky Ships` not `"New stuff, new things, and new bugs"`
    8374
     75{{{#!div style="padding:1px 1px 1px 10px; background: #DBEAF3; border-left: 5px solid #2980B9"
     76 **NOTE**: If you want to be facetious, you'll notice that we reference the `0ad` mod, which is in a `public` folder. It should technically be `empires_ascendant` in an `empires_ascendant` folder.
     77}}}
    8478
    85 **Note**: If you want to be facetious, you'll notice that we reference the `0ad` mod which is in a `public` folder. It should technically be `empires_ascendant` in an `empires_ascendant` folder.
     79==== Out-Of-Sync (OOS) Compatibility ====
    8680
    87 ==== OOS Compatibility ====
     81We introduced a new boolean flag with `Alpha XXV - Yaunā`, which can optionally be added to your `mod.json`.
     82{{{#!json
     83{
     84  "ignoreInCompatibilityChecks": true,
     85}
     86}}}
     87As the name suggests, it allows avoiding compatibility checks when playing with other people. However, Wildfire Games must make sure it is safe, and it won't put other people out of sync.
    8888
    89 Since A25 a new flag `"ignoreInCompatibilityChecks"` was introduced. As the name suggests it allows to avoid compatibility checks when playing with other people. However Wildfire Games must make sur it is safe and it won't put other people out of sync.
     89To do so, one might try replaying a match with the mod on, try playing multiplayer, try to rejoin a game to make sure it doesn't affect simulation. If it does, mod will be rejected.
    9090
    91 To do so one might try replaying a match with the mod on, try playing multiplayer, try to rejoin a game to make sure it doesn't affect simulation. If it does, mod will be rejected.
     91Mods that provide opportunities for cheating, for example automating unit production or providing access to information about the enemy that the player should not have access to, are also rejected.
     92- Related wiki article: [[SimulationRequirements#Cheatprevention|wiki/SimulationRequirements#Cheatprevention]]
    9293
    9394==== Analyzing files ====
     
    100101# -d is to generate a patch file
    101102# -u is to ignore whitespace changes
    102 $ git diff -du 
     103$ git diff -du
    103104}}}
    104105
    105106If a new file contains `Engine.****` calls you need to make sure there is no foul play, it can also be for big random map scripts.
    106107
    107 When checking big mods, it might be wiser to diff mods you already checked using the previous version as reference. Even if they have a git repository it's better to check locally, in case files were added manually.
     108When checking big mods, it might be wiser to diff mods you already checked using the previous version as reference. Even if they have a git repository, it's better to check locally, in case files were added manually.
    108109
    109 When having mods with lots of texture, it's good to suggest using the archive builder (to turn png/tga files into dds, dae files into psa or pmd and XML files to XMB) This will reduce the download size greatly and increase the performance.
     110For mods with a lot of textures, it is recommended to use the archive builder (to convert `png/tga` files to `dds`, `dae` files to `psa/pmd`, and `xml` files to `xmb`). This will greatly reduce the download size and increase performance.
     111- Related wiki article: [[Modding_Guide#Distributingyourmods|wiki/Modding_Guide#Distributingyourmods]]
    110112
     113==== Signing ====
    111114
    112 ==== Signing ====
    113 
    114 Once the mod is deemed `safe` we use [https://github.com/jedisct1/minisign Minisign] to sign files. For security reasons only one person can sign mods because it's not good to share that private key around given that it works for an entire alpha.
     115Once the mod is deemed `safe` we use [https://github.com/jedisct1/minisign Minisign] to sign files. For security reasons, only one person can sign mods because it's not good to share that private key around, given that it works for an entire alpha.
    115116
    116117==== Adding Metadata ====
    117118
    118 Using the signature file we replace all newlines by `\n` an the tab of the third line by a `\t`.
    119 We then add curly braces, and we copy paste the `"depenencies"` tag from the `mod.json`. Then we add "minisigs": [""] around the signature ; and we put everything the metadata field of mod.io.
     119Using the signature file, we replace all newlines by `\n` and the tab of the third line by a `\t`.
     120We then add curly braces, and we copy and paste the `dependencies` tag from the `mod.json`. Then we add "minisigs": [""] around the signature ; and we put everything in the metadata field of mod.io.
    120121
    121122==== Sending the signature ====
    122123
    123 Once all is done we send the signature for completeness or in case the person wants to share the mod through other means.
    124 
    125 
    126 
     124Once all is done, we send the signature for completeness or in case the person wants to share the mod through other means.