<data-definition>
    <struct-type type-name='meeting_diplomat'>
        <int32_t name='unk1' comment='uninitialized'/>
        <pointer name='person1' type-name='unit' comment='diplomat'/>
        <pointer name='person2' type-name='unit' comment='count'/>
        <pointer name='place' type-name='building'/>
        <int16_t name='unk2' comment='1'/>
        <int8_t name='unk3' comment='3'/>
        <int16_t name='unk4' comment='0'/>
        <int32_t name='unk5' comment='-1'/>
    </struct-type>

    <struct-type type-name='meeting_pet' key-field='name'>
        <int32_t name='unk0' comment='uninitialized'/>
        <int32_t name='unk1' comment='-1'/>
        <int32_t name='pet_id' ref-target='unit'/>
        <compound name='name' type-name='language_name'/>
        <int32_t name='unk3'/>
    </struct-type>

    <struct-type type-name='meeting_ref'>
        <int32_t name='unk1'
                 comment='4 person, 7 pet (pet), 8 pet (owner)'/>
        <pointer name='ptr' comment='type varies'/>
        <int32_t name='unk2' comment='0'/>
    </struct-type>

    <bitfield-type type-name='job_material_category' base-type='uint32_t'>
        <flag-bit name='plant'/>
        <flag-bit name='wood'/>
        <flag-bit name='cloth'/>
        <flag-bit name='silk'/>
        <flag-bit name='leather'/>
        <flag-bit name='bone'/>
        <flag-bit name='shell'/>
        <flag-bit name='wood2'/>
        <flag-bit name='soap'/>
        <flag-bit name='tooth'/>
        <flag-bit name='horn'/>
        <flag-bit name='pearl'/>
        <flag-bit name='yarn'/>
    </bitfield-type>

    <bitfield-type type-name='job_item_category' base-type='uint32_t'>
        <flag-bit name='unk1'/>
        <flag-bit name='unk2'/>
        <flag-bit name='furniture'/>
        <flag-bit name='unk8'/>
        <flag-bit name='unk16'/>
        <flag-bit name='unk32'/>
        <flag-bit name='ammo'/>
        <flag-bit name='unk128'/>
        <flag-bit name='unk256'/>
        <flag-bit name='unk512'/>
        <flag-bit name='finished_goods'/>
    </bitfield-type>

    <struct-type type-name='job_list_link' key-field='job'>
        <pointer name='job' type-name='job'/>
        <pointer name='prev' type-name='job_list_link'/>
        <pointer name='next' type-name='job_list_link'/>
    </struct-type>

    <struct-type type-name='job' key-field='id'>
        <int32_t name='id'/>
        <pointer name='list_link' type-name='job_list_link'/>
        <enum name='job_id' base-type='int16_t' type-name='job_type'/>
        <int32_t name='unk2'/>

        <int16_t name='x'/>
        <int16_t name='y'/>
        <int16_t name='z'/>

        <int32_t name='completion_timer' comment='-1 per 10 frames'/>

        <uint16_t name='unk4a'/>
        <uint16_t name='unk4b'/>

        <bitfield name='flags' base-type='uint32_t'>
            <flag-bit name='repeat'/>
            <flag-bit name='suspend'/>
        </bitfield>

        <int16_t name='matType' ref-target='material' aux-value='$$.matIndex'/>
        <int32_t name='matIndex'/>
        <int16_t name='unk5'/>
        <int16_t name='unk6'/>
        <int16_t name='item_subtype'/>
        <int32_t name='unk7'/>
        <int32_t name='unk8'/>

        <compound name='job_material_category' type-name='job_material_category'/>

        <stl-string name='reaction_name'/>

        <int32_t name='unk9'/>
        <int32_t name='unk10'/>

        <stl-vector name='items'>
            <pointer>
                <pointer name='item' type-name='item'/>
                <int32_t name='unk1' comment='1 for reagents, 2 for build materials'/>
                <int32_t name='to_bring'
                         comment='0 immediately once taken to be brought'/>
                <int32_t name='job_item_idx'/>
            </pointer>
        </stl-vector>

        <stl-vector name='unk11' type-name='pointer'/>

        <stl-vector name='references'>
            <pointer type-name='general_ref'/>
        </stl-vector>

        <stl-vector name='job_items'>
            <pointer type-name='job_item'/>
        </stl-vector>
    </struct-type>

    <struct-type type-name='job_item'>
        <enum base-type='int16_t' name='itemType' type-name='item_type'/>
        <int16_t name='itemSubtype' refers-to='(item-subtype-target $$._parent.itemType $)'/>
        <int16_t name='matType' ref-target='material' aux-value='$$.matIndex'/>
        <int32_t name='matIndex'/>

        <bitfield name='flags1' base-type='uint32_t'/>

        <int32_t name='count'/>
        <int16_t name='unk1'/>

        <bitfield name='flags2' base-type='uint32_t'/>
        <int32_t name='unk2'/>
        <bitfield name='flags3' base-type='uint32_t'/>
        <int32_t name='unk3'/>

        <int32_t name='metal_ore'/>

        <stl-string name='reaction_class'/>
        <stl-string name='has_material_reaction_product'/>

        <int32_t name='unk4'/>
        <int32_t name='reagent_index'/>

        <stl-vector type-name='int32_t' name='contains' comment='used with custom reactions'/>

        <int32_t name='unk5'/>
        <int16_t name='has_tool_use'/>
    </struct-type>

    <struct-type type-name='manager_order'>
        <enum name='job_id' base-type='int16_t' type-name='job_type'/>
        <int16_t name="unk_2"/>

        <int16_t name="item_subtype"/>

        <stl-string name="reaction_name"/>

        <int16_t name="mat_type" ref-target='material' aux-value='$$.mat_index'/>
        <int32_t name="mat_index"/>

        <compound name="item_category" type-name='job_item_category'/>
        <int32_t name="unk_18"/>
        <compound name="material_category" type-name='job_material_category'/>

        <int16_t name="amount_left"/>
        <int16_t name="amount_total"/>
        <int32_t name="is_validated"/>
    </struct-type>

    <struct-type type-name='mandate'>
        <pointer name='unit' type-name='unit'/>

        <int16_t name='mode' comment='0 export, 1 make, 2 guild jobs'/>

        <enum base-type='int16_t' name='item_type' type-name='item_type'/>
        <int16_t name='item_subtype' refers-to='(item-subtype-target $$._parent.item_type $)'/>

        <int16_t name='mat_type' ref-target='material' aux-value='$$.mat_index'/>
        <int32_t name='mat_index'/>

        <int16_t name='amount_total'/>
        <int16_t name='amount_remaining'/>

        <int32_t name='timeout_counter' comment='counts once per 10 frames'/>
        <int32_t name='timeout_limit' comment='once counter passes limit, mandate ends'/>

        <int16_t name='unk2'/>
        <int16_t name='unk3'/>
        <int32_t name='unk4'/>
        <uint8_t name='unk5'/>
    </struct-type>

    <struct-type type-name='activity_entry' instance-vector='$global.world.activities.all' key-field='id'>
        <int32_t name='id'/>
        <int16_t name='is_individual'/>
        <stl-vector name='events'>
            <pointer type-name='activity_event'/>
        </stl-vector>
        <int32_t name='unk2'/>
    </struct-type>

    <class-type type-name='activity_event' original-name='activity_eventst'>
        <int32_t name='event_id'
                 comment='mostly, but not always, the index in activity.events'/>
        <int32_t name='activity_id' ref-target='activity_entry'/>

        -- Guess:
        <int32_t name='subevent_id' comment='-1 unless subevent'/>
        <int32_t name='num_subevents' comment='0 for ind.drill, 2 for all in training session'/>

        <stl-vector name='hist_figure_ids'>
            <int32_t ref-target='historical_figure'/>
        </stl-vector>
        <stl-vector name='participant_ids'>
            <int32_t ref-target='unit'/>
        </stl-vector>

        -- Either empty, or same as above:
        <stl-vector name='hist_figure_ids2'>
            <int32_t ref-target='historical_figure'/>
        </stl-vector>
        <stl-vector name='participant_ids2'>
            <int32_t ref-target='unit'/>
        </stl-vector>

        -- These are equal to the ones above:
        <int32_t name='activity_id2' ref-target='activity_entry'/>
        <int32_t name='event_id2'/>
    </class-type>

    <class-type type-name='activity_event_individual_skill_drillst' inherits-from='activity_event'>
        <int32_t name='building_id' ref-target='building'/>
        <int32_t name='unk5'/>
    </class-type>

    <class-type type-name='activity_event_training_sessionst' inherits-from='activity_event'>
    </class-type>

    <class-type type-name='activity_event_combat_trainingst' inherits-from='activity_event'>
        <int32_t name='building_id' ref-target='building'/>
        <int32_t name='hist_figure_id' ref-target='historical_figure'/>
        <int32_t name='unit_id' ref-target='unit'/>
        <int32_t name='unk5'/>
    </class-type>

    <class-type type-name='activity_event_skill_demonstrationst' inherits-from='activity_event'>
        <int32_t name='building_id' ref-target='building'/>
        <int32_t name='hist_figure_id' ref-target='historical_figure'/>
        <int32_t name='unit_id' ref-target='unit'/>
        <int16_t name='unk5'/>
        <int32_t name='unk6'/>
        <int32_t name='unk7'/>
        <int32_t name='unk8'/>
        <int32_t name='unk9'/>
    </class-type>
</data-definition>

<!--
Local Variables:
indent-tabs-mode: nil
nxml-child-indent: 4
End:
-->