Skip to content

Commit

Permalink
Create ifo-file.md
Browse files Browse the repository at this point in the history
  • Loading branch information
lion053 authored Sep 23, 2024
1 parent 1c7e6ee commit 81d83a0
Showing 1 changed file with 153 additions and 0 deletions.
153 changes: 153 additions & 0 deletions documentation/ifo-file.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
# Ifo File

To work with .ifo files a simple text editor can be sufficient, especially when you just want to delete an entry or resize the BuildBlocker for example. However for everything else Blender + [Anno Addon](https://github.com/xormenter/Blender-Anno-.cfg-Import-Addon) is recommended to avoid going crazy.

In Blender:

- Cuboids: do **not** `Ctrl A` `All Transforms` before export
- Planes: **do** `Ctrl A` `All Transforms` before export

## Cuboids

Cuboids mostly appear as `<Dummy>` which only distinguish by their `<Name>` (see exceptions) and are fully determined by their `<Position>`, `<Rotation>` and `<Extent>` (related to their center point).

<details>
<summary>Click to expand: Code Example</summary>

```xml
<Dummy>
<Name>transporter_spawn</Name>
<Position>
<xf>1.189299</xf>
<yf>0.000000</yf>
<zf>3.588088</zf>
</Position>
<Rotation>
<xf>0.000000</xf>
<yf>0.703321</yf>
<zf>0.000000</zf>
<wf>-0.710925</wf>
</Rotation>
<Extents>
<xf>0.100000</xf>
<yf>0.100000</yf>
<zf>0.100000</zf>
</Extents>
</Dummy>
```

</details>

- All names with an appended `_` usually have consecutive digits starting at 0
- All names with an appended `_01` continue with `02`, `03` and so on
- Names with 01, 02 but without `_` could be fixed names, so not sure if sth like `railroad03` would work

| Name | Tag | Usage | assets.xml |
| :-------------- | :------------------ | :------------------------------------------------------------- | :--------------------- |
| BoundingBox | BoundingBox | includes the whole cfg |
| MeshBoundingBox | MeshBoundingBox | includes the mesh geometry |
| HitBox | IntersectBox | asset is highlighted during mouse-over and considered being selected for tool-bar actions |
| infolayer | Dummy | position of `InfoLayerIcon` such as 'Missing Workforce' | enable with `<Infolayer />`; template: `InfoLayerIcon`
| transporter_spawn | Dummy | position of factory transporters in idle mode / before first move | `HideTransportersBeforeTheyMove=1`
| quest_spawn_ | Dummy | position where `QuestObjects` are spawned (for special quests like campaign there are other names like `campaign_demolition_quest_spawn` | enable with `<QuestObject />`; Quests: Name can be used in `ContextMarkerName`
| DamageImpact | Dummy | when damaged (incidents or weapons) but not ruined: area where mesh shows damage |
| harbourblock01 | Dummy | blocks harbour area infront of buildings; minimum size is 5x5 tiles: x/z axis => 0 to 0.49 == 5 tiles; 0.5 to 0.99 == 6 tiles etc. |
| docklandsmodule01 | Dummy | blocks harbour area infront of buildings; minimum size is 3x3 tiles x/z axis => 0 to 0.49 == 3 tiles; 0.5 to 0.99 == 4 tiles etc. |
| loadingpier01 | Dummy | docking position for ships; use `loadingpier02` for a 2nd pier | configure in `<LoadingPier>`
| loadingpier_air | Dummy | docking position for airships | configure in `<LoadingPier>`
| hit_metal_ | Dummy | when hit by weapons: trigger metal sound / visuals |
| hit_wood_ | Dummy | when hit by weapons: trigger wooden sound / visuals |
| hit_bricks_ | Dummy | when hit by weapons: trigger brick sound / visuals |
| hit_concrete_ | Dummy | when hit by weapons: trigger concrete sound / visuals |
| expl_01 | Dummy | when hit by weapons: area with explosion effects | can be defined in `<ExplosionEffects>`
| warflag | Dummy | a war flag is spawned at this position when island is at war |
| hpbar | Dummy | when being attacked: position of current hitpoints bar |
| FireDummy | Dummy | position of fire (if no .fc file) |
| railroad01 | Dummy | connection to rails; use `railroad02` for another one | `HasBuildingBaseTiles=1` to remove them after asset was destroyed; `AllowCodeToControlRotation=0` if they are not centered relative to the building
| railroadbase01 | Dummy | spawn / despawn position for trains |
| mining_ground | Dummy | WorkAreaPath starts here | `<WorkAreaPathSnapDummy>`
| mining_mountain | Dummy | WorkAreaPath ends here | `<WorkAreaPathSnapDummy>`
| irrigation_connector | Dummy | for water source: connection to irrigation canals |
| watersupply_connector | Dummy | for water consumer: connection to irrigation canals |
| slot_station | Dummy | start position for river channel | `BezierPath` / `StartPositionDummyName`
| turret_ | Dummy | position of a turret | configure in `<Turrets>`
| shootTurret_ | Dummy | turrets: position of muzzle effects / projectile | configure in `<MuzzleEffectAssets>` / `<ProjectileAsset>`
| shootLeft_ | Dummy | cannons: position of muzzle effects / projectile | configure in `<MuzzleEffectAssets>` / `<ProjectileAsset>`
| shootRight_ | Dummy | cannons: position of muzzle effects / projectile | configure in `<MuzzleEffectAssets>` / `<ProjectileAsset>`
| shootFront_ | Dummy | cannons: position of muzzle effects / projectile | configure in `<MuzzleEffectAssets>` / `<ProjectileAsset>`
| WorkforcePier | Dummy | connection for workforce transfer ships | enable with `<WorkforceConnector />`
| VisitorPier | Dummy | connection for tourist ships | enable with `<VisitorPier />`
| ShipEntrance | Dummy | *? some kind of anchor for incoming visitor / workforce ships ?* |
| SpecialistSpawn | Dummy | should spawn a clickable specialist on arrival (not used anymore?) |
| BoardingDummy_ | Dummy | on ship arrival: feedbacks walk towards island | configure in `HarborWaterConfig`
| DisembarkDummy_ | Dummy | on ship arrival: feedbacks walk towards ship | configure in `HarborWaterConfig`
| TouristIdleDummy_ | Dummy | visitors gather here until ship arrival if the "Tendency" is negative |
| special_feedback_loading | Dummy | spawn point for fishing ship | configure in `<FisheryConfig>` (per region)
| nextFloor | Dummy | indicates position of the next floor level for skyscrapers |
| backside_rect | Dummy | indicates the backside of a train wagon; important for directional coupling |
| frontside_rect | Dummy | indicates the frontside of a train wagon; important for directional coupling |
| bird_land01 | Dummy | birds can land here |
| speaker_ | Dummy | *? Anarchist loudspeaker audio ?* |
| joint_back | Dummy | *? used in several vehicles with trailers ?* |
| GeneratedItemSlot | Dummy | *? does nothing; used for coastal_01, food_01, factory_06, workshop_06; institution_02 ?* |
| EventPier | Dummy | *? does nothing; used for visitor piers ?* |
| HarborFrontBuilding | Dummy | *? does nothing; used for visitor piers and workforce pier ?* |
| fire_ | Dummy | *? only used for man_of_war and campaign queen ship; leftover with no function ?* |

## Planes

Planes can consist of as many vertices as you want to achieve quite complex blockers. Each vertice is translated into a pair of `x` and `z` coordinates related to the center point of your `MAIN_FILE` [should be (0/0/0)].
Therefore `Ctrl A` `All Transforms` on all planes is highly recommended if you work with Blender.

> Note that 1 tile in Anno corresponds to \|x\| = 0.5 / \|z\| = 0.5
<details>
<summary>Click to expand: Code Example</summary>

```xml
<BuildBlocker>
<Position>
<xf>6.000000</xf>
<zf>4.000000</zf>
</Position>
<Position>
<xf>6.000000</xf>
<zf>-4.000000</zf>
</Position>
<Position>
<xf>-6.000000</xf>
<zf>-4.000000</zf>
</Position>
<Position>
<xf>-6.000000</xf>
<zf>4.000000</zf>
</Position>
</BuildBlocker>
```

</details>

- For most entries you can have as many as you want, their names stay the same, no consecutive digits.
- UnevenBlocker and MeshHeightmap can be used only once per .ifo file.

| Tag | Usage | assets.xml |
| :-------------- | :------------------------------------------------------------- | :--------------- |
| BuildBlocker | the (logical) footprint an asset has ingame (== usually blocked tiles) | almost all properties of `<Blocking/>` only work within this blocker
| FeedbackBlocker | dynamic feedback is allowed to walk here (includes first person mode) |
| PriorityFeedbackBlocker | dynamic feedback is not allowed to walk here (includes first person mode) |
| UnevenBlocker | mesh within and above this plane is always above terrain. Usually used for assets with `AdjustToTerrainHeight=0` |
| WaterBlocker | blocks area for ships |
| QuayArea | area where a quay is constructed automatically (by default: with fence) | configure in `GroundDecalAsset`
| InvisibleQuayArea | area where a quay is constructed automatically (by default: without fence); if overlapping with QuayArea: overwrites QuayArea | configure in `GroundDecalInvisible`
| PathBlocker | *? probably some kind of feedback blocker; rarely used; is not imported into Blender ?* |
| ExtraBlocker | *? rarely used (e.g. calamari fishery); is not imported into Blender ?* |

## MeshHeightMap

Dynamic feedback adapts to this heightmap instead of terrain. Usually used for assets with `AdjustToTerrainHeight=0`.

Guide on how to create this map: [MeshHeightMap](https://github.com/anno-mods/modding-guide/blob/main/guides/Mesh-Height-Maps.md)

## Sequences

One entry for each sequence used in the corresponding cfg. For all possible sequence IDs look at `<SequenceIDs>` in `>GlobalBalancing<` (Guid: 2001270).

0 comments on commit 81d83a0

Please sign in to comment.