diff --git a/changelog.txt b/changelog.txt
index 56b00106e..90e0b8297 100644
--- a/changelog.txt
+++ b/changelog.txt
@@ -39,6 +39,7 @@ that repo.
- ``breed``: new struct type
- ``creature_handler``: identified vmethods
- ``crime``: removed fields of ``reports`` that are no longer present
+- ``dance_form``: identified most fields
- ``history_event_context``: identified fields
- ``image_set``: new struct type
- ``itemdef_flags``: new enum, with ``GENERATED`` flag
@@ -47,6 +48,7 @@ that repo.
- ``interrogation_report``: new struct type
- ``justification``: new enum
- ``lever_target_type``: identified ``LeverMechanism`` and ``TargetMechanism`` values
+- ``musical_form``: identified fields, including some renames. Also identified fields in ``scale`` and ``rhythm``
- ``region_weather``: new struct type
- ``squad_order_cause_trouble_for_entityst``: identified fields
- ``unit_thought_type``: added several new thought types
diff --git a/df.art.xml b/df.art.xml
index d41ce0fdc..a58ac390f 100644
--- a/df.art.xml
+++ b/df.art.xml
@@ -482,19 +482,19 @@
-
-
-
-
-
-
-
+
+ -- 10
+
+
+
+
+
-
+ -- 20
-- dynamic styles
@@ -506,7 +506,7 @@
-
+ -- 30
-- more tempo styles
@@ -519,7 +519,7 @@
-
+ -- 40
@@ -531,7 +531,7 @@
-
+ -- 50
@@ -542,7 +542,7 @@
-
+ -- 60
@@ -553,7 +553,7 @@
-
+ -- 70
@@ -587,15 +587,130 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
@@ -604,9 +719,9 @@
-
-
-
+
+
+
@@ -616,71 +731,226 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 0: melody, 1: counterpoint, 2: harmony, 3: rhythm
- 0: short, 1: mid-length, 2: long, 3: varied length
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
-
- 0: rising, 1: falling, 2: rising-falling, 3: falling-rising
- 0: always, 1: often, 2: sometimes
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -- 10
+
+
+
+
+
+
+
+
+
+
+ -- 20
+
+
+
+
+
+
+
+
+
+
+ -- 30
+
+
+
+
+
+
+
+
+ -- 0
+
+
+
+
+
+
+
+
+
+
+ -- 10
+
+
+
+
+
+
+
+
+
+
+ -- 20
+
+
+
+
+
+
+
+
+
+
+ -- 30
+
+
+
+
+
+
+
+
+
+
+ -- 40
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -688,79 +958,74 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
@@ -768,47 +1033,49 @@
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
-
+
-
+
-
+
-
-
-
+
+
+
-
+
-
-
-
+
+
+
@@ -832,8 +1099,8 @@
-
-
+
+
diff --git a/df.entities.xml b/df.entities.xml
index 1cf295776..09f9fcdca 100644
--- a/df.entities.xml
+++ b/df.entities.xml
@@ -392,12 +392,12 @@
at that level (Some exterminated kobolds have it set, while most do not, for instance. Embark culled dwarven civs
may or may not have it set).
-
+
-
+
@@ -1343,7 +1343,7 @@
-
+
diff --git a/df.history.xml b/df.history.xml
index 591ae481e..a8e72a8e5 100644
--- a/df.history.xml
+++ b/df.history.xml
@@ -69,6 +69,7 @@
+
@@ -241,48 +242,48 @@
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
+
+
-
-
-
+
+
+
-
+
@@ -304,9 +305,9 @@
-
-
-
+
+
+
@@ -314,22 +315,22 @@
-
+
-
+
-
-
-
-
-
-
+
+
+
+
+
+
-
+
@@ -354,50 +355,50 @@
-
-
-
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
+
+
-
-
-
-
+
+
+
+
-
-
-
+
+
+
-
-
+
+
-
+
@@ -413,9 +414,9 @@
there's an unused dword here on 64-bit
-
-
-
+
+
+
different from above - this might be wanted.unk
@@ -434,28 +435,28 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
+
@@ -476,19 +477,19 @@
-
-
+
+
all 0xfff0bdc0 = -1000000
-
+
-
+
-
-
+
+
@@ -575,7 +576,7 @@
-
+
@@ -597,12 +598,12 @@
-
+
-
-
+
+
@@ -717,6 +718,7 @@
+ -- 10
@@ -727,6 +729,7 @@
+ -- 20
@@ -737,6 +740,7 @@
+ -- 30
@@ -747,6 +751,7 @@
+ -- 40
@@ -757,6 +762,7 @@
+ -- 50
@@ -767,11 +773,20 @@
+ -- 60
+
+
+
+
+
+ -- 70
+
+
@@ -799,7 +814,8 @@
-
+
+
@@ -867,38 +883,42 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
-
-
+
+
@@ -909,8 +929,8 @@
-
-
+
+
@@ -923,7 +943,7 @@
dtor 0x8C17FA0
-
+
(describe-obj $.name)
@@ -934,7 +954,7 @@
-
+
@@ -948,19 +968,19 @@
-
+
-
-
-
-
-
-
+
+
+
+
+
+
@@ -989,53 +1009,53 @@
-
-
+
+
-
-
-
-
+
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
-
+
+
+
-
-
-
+
+
+
@@ -1059,15 +1079,15 @@
-
+
-
+
-
+
@@ -1250,6 +1270,8 @@
+ -- 10
+
@@ -1281,6 +1303,8 @@
+ -- 20
+
@@ -1312,6 +1336,8 @@
+ -- 30
+
@@ -1343,6 +1369,8 @@
+ -- 40
+
@@ -1374,6 +1402,8 @@
+ -- 50
+
@@ -1405,6 +1435,8 @@
+ -- 60
+
@@ -1436,6 +1468,8 @@
+ -- 70
+
@@ -1467,6 +1501,8 @@
+ -- 80
+
@@ -1498,6 +1534,8 @@
+ -- 90
+
@@ -1619,6 +1657,11 @@
+
+
+
+
+
@@ -1761,11 +1804,7 @@
-
-
-
-
-
+
@@ -1856,13 +1895,13 @@
-
+
-
+
@@ -1871,7 +1910,7 @@
-
+
@@ -1897,33 +1936,33 @@
-
+
-
+
-
+
-
+
-
+
@@ -1991,7 +2030,7 @@
-
+
@@ -2000,8 +2039,8 @@
-
-
+
+
@@ -2072,7 +2111,7 @@
-
+
@@ -2080,7 +2119,7 @@
-
+
@@ -2105,7 +2144,7 @@
-
+
@@ -2113,19 +2152,19 @@
-
+
-
+
-
+
@@ -2142,24 +2181,24 @@
-
+
-
+
-
+
-
+
-
+
@@ -2167,24 +2206,24 @@
-
-
+
+
-
+
-
-
+
+
-
-
+
+
@@ -2200,7 +2239,7 @@
-
@@ -2219,7 +2258,7 @@
-
+
@@ -2232,7 +2271,7 @@
-
+
@@ -2241,8 +2280,8 @@
-
-
+
+
@@ -2258,7 +2297,7 @@
-
+
@@ -2266,7 +2305,7 @@
-
+
@@ -2305,7 +2344,7 @@
-
+
@@ -2313,7 +2352,7 @@
-
+
@@ -2323,7 +2362,7 @@
-
+
@@ -2345,9 +2384,9 @@
-
-
-
+
+
+
@@ -2361,8 +2400,15 @@
+
+
+
+
+
+
+
-
+
@@ -2378,10 +2424,10 @@
-
+
-
+
@@ -2511,12 +2557,20 @@
+
+
+
+
+
+
+
+
historical_entity.position
-
+
@@ -2539,7 +2593,7 @@
-
+
@@ -2562,7 +2616,7 @@
-
+
@@ -2594,7 +2648,7 @@
- murder, not aging
+
@@ -2615,10 +2669,10 @@
-
-
-
-
+
+
+
+
@@ -2630,7 +2684,7 @@
-
+
@@ -2652,9 +2706,9 @@
-
+
-
+
@@ -2698,8 +2752,8 @@
-
-
+
+
@@ -2728,7 +2782,7 @@
-
+
@@ -2744,8 +2798,8 @@
-
-
+
+
@@ -2803,8 +2857,8 @@
-
-
+
+
@@ -2816,7 +2870,7 @@
-
+
@@ -2846,7 +2900,7 @@
-
+
@@ -2857,8 +2911,8 @@
-
-
+
+
@@ -2906,9 +2960,19 @@
+
+
+
+
+
+
+
+
+
+
-
+
@@ -2942,7 +3006,7 @@
-
+
@@ -3028,7 +3092,7 @@
- always 12?
+ always 12?
@@ -3042,9 +3106,9 @@
-
+
-
+
@@ -3118,8 +3182,8 @@
- ? 6 = plots and schemes, 11 = agent
- ? 4 = plots and schemes, 21 = agent
+
+
@@ -3250,23 +3314,25 @@
-
+
-
+
-
-
-
-
+
+
+
+
+
-
-
-
-
+
+
+
+
+
@@ -3285,28 +3351,25 @@
-
-
-
-
-
-
+
-
-
+
+
+
-
+
+
-
+
@@ -3320,7 +3383,7 @@
-
+
@@ -3329,7 +3392,7 @@
-
+
@@ -3345,7 +3408,7 @@
-
+
@@ -3366,14 +3429,14 @@
- most likely the same format as above
-
-
-
-
-
+ most likely the same format as above
+
+
+
+
+
-
+
@@ -3409,32 +3472,32 @@
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
@@ -3551,7 +3614,7 @@
-
+
unsure but 16-bit values make more sense than 32-bit
@@ -3574,22 +3637,22 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
+
+
+
-
-
+
+
@@ -3598,9 +3661,9 @@
-
-
-
+
+
+
@@ -3612,15 +3675,15 @@
-
-
+
+
-
+
-
+
@@ -3630,15 +3693,15 @@
-
-
+
+
-
+
diff --git a/df.items.xml b/df.items.xml
index 870fcdd8d..13fc5b5b4 100644
--- a/df.items.xml
+++ b/df.items.xml
@@ -1017,7 +1017,7 @@
-
+
diff --git a/df.military.xml b/df.military.xml
index c5596fa7a..c1212816c 100644
--- a/df.military.xml
+++ b/df.military.xml
@@ -346,44 +346,44 @@
Some army_controller research notes:
- A number of attacks on the player fortress have been studied. In all cases an army_controller with a type = t2 and a site_id = player fortress were generated
- at the start of a new season (for some reason old ones can remain lingering. They can be distinguished from the new one by their old time stamp). The master_hf was
- the boss/master/leader of the goblin civ (not site) or necro site (they don't have civs), and that character was not seen in the later invasion. The general_hf was
- the general leading the attack. At that stage, i.e. before the attack actually happened, unk_64.t2.army_id referenced an army found in the armies.all vector, but
- that army wasn't present any longer when the attack was underway. The army nemesis vector contained characters, probably squad leaders, present in the attack.
- The army controller field pointed to an army_controller with type = t4 that wasn't present in the army_controllers.all vector, with the original army_controller's
- general_hf (t2) taking the role of master_hf, with a subordinate (present in the army nemesis vector) taking the general_hf role.
- Legends Mode reports of the attacks showed the original army_controller's (t2) general_hf as the leader of the attack.
- pos_x/pos_y has some kind of relation unk_64.t2.unk_x_a, unk_x_b/unk_y_a, unk_y_b and the army.pos/last_pos x/y fields. Seem to be members of a pair of sets with
- the numbers gradually increasing.
-
- SentToTributary (t12) appears in the army_controller vector only very briefly. It might possibly be related to legitimate visitors.
-
- Quester army controller (t17) doesn't seem to contain any useful info except the site_id, time, and the artifact_id, in particular not anything that looks like
- references to the questers themselves or their employer.
-
- t24: Looks like villainous visitors. Legitimate ones don't seem to use army controllers.
+ t1: All seen NomadicGroup. master = group boss, general = leader of army (with troops) referencing controller. Purpose and action unknown.
+
+ An InvasionOrder (2) is generated at the start of the season, shortly followed by an army that references an Invasion controller. The army disappears from the armies.all
+ vector once it enters the embark.
+
+ Invasion (4) has been seen via InvasionOrder army_controllers' armies, but only player fortress attacks have been studied. Prior to the army appears in the armies.all vector this controller
+ seems to be available via the army_controllers.all vector referencing the the InvasionOrder via unk_34.
+
+ t5: unk_34 seen referencing Invasion (4) and unk_38 referencing t5 (player fortress) or t7, disappearing when an army is generated (at least for player fortress).
+
+ Visit (12) appears in the army_controller vector only very briefly before legitimate visitors arrive, and is also used for exiled residents.
+
+ Quest (17) doesn't seem to contain any useful info except the site_id, time, and the artifact_id, in particular not anything that looks like
+ references to the questers themselves or their employer. However, prior to arriving at the site, armies in armies.all can reference the controller, and the army members
+ seem to match the questers that show up shortly thereafter, looking for the indicated artifact. As with InvasionOrder armies, quester armies disappear on embark arrival.
+
+ VillainousVisit (24): Villainous visitors. Legitimate ones use Visit army controllers, but only until they arrive, while villainous ones linger.
-
+
-
+
-
+
-
-
-
-
+
+
+
+
-
-
+
+
@@ -391,34 +391,34 @@
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
@@ -426,19 +426,19 @@
-
+
-
+
-
+
@@ -448,7 +448,7 @@
-
+
@@ -470,22 +470,22 @@
-
+
-
+
-
+
-
-
-
-
-
+
+
+
+
+
@@ -501,9 +501,9 @@
-
-
-
+
+
+
@@ -513,34 +513,34 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
+
-
+
@@ -553,8 +553,8 @@
-
-
+
+
@@ -618,11 +618,11 @@
-
+
-
-
-
+
+
+
@@ -630,11 +630,11 @@
-
+
-
-
+
+
@@ -643,68 +643,68 @@
-
-
- guess
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
+
- next five checks out in created units
-
-
-
- same as unk_c0 in unit
-
- made creatures undead, so not sure maybe affliction?
- crashed df...
-
-
-
+ next five checks out in created units
+
+
+
+ same as unk_c0 in unit
+
+ made creatures undead, so not sure maybe affliction?
+ crashed df...
+
+
+
-
-
-
-
-
-
- probably path
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
diff --git a/df.ui.xml b/df.ui.xml
index 0fa88d713..62e91d405 100644
--- a/df.ui.xml
+++ b/df.ui.xml
@@ -175,14 +175,14 @@
-
+
noble bookkeeper precision: 10/100/1000/10000/all_accurate
-
+
outpost/hamlet/village/town/city/metropolis
(unles that's what the above is)
@@ -194,8 +194,8 @@
-
-
+
+
@@ -205,7 +205,7 @@
-
+
@@ -530,11 +530,11 @@
-
+
-
+
-
+
@@ -571,9 +571,9 @@
-
-
-
+
+
+
diff --git a/df.units.xml b/df.units.xml
index 7cbafad7a..abec1c4e7 100644
--- a/df.units.xml
+++ b/df.units.xml
@@ -2251,6 +2251,7 @@
+ -- 30
@@ -2261,6 +2262,7 @@
+ -- 40
@@ -2270,6 +2272,55 @@
+
+ -- 50
+
+
+
+
+
+
+
+
+
+
+ -- 60
+
+
+
+
+
+
+
+
+
+
+ -- 70
+
+
+
+
+
+
+
+
+
+
+ -- 80
+
+
+
+
+
+
+
+
+
+
+ -- 90
+
+
+
diff --git a/df.world-data.xml b/df.world-data.xml
index a90112005..1960c41f2 100644
--- a/df.world-data.xml
+++ b/df.world-data.xml
@@ -66,7 +66,7 @@
-
+
@@ -574,7 +574,7 @@
-
+
@@ -661,7 +661,7 @@
-
+
@@ -691,7 +691,7 @@
-
+
@@ -702,19 +702,21 @@
- -- v0.40.14:
-
-
-
-
-
-
-
- -- v0.43.01
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1017,21 +1019,28 @@
-
+
+
+
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/df.world-site.xml b/df.world-site.xml
index 61b12c7b8..c1ed160e8 100644
--- a/df.world-site.xml
+++ b/df.world-site.xml
@@ -476,8 +476,8 @@
-
-
+
+
@@ -560,22 +560,22 @@
-
+
-
-
-
-
+
+
+
+
-
-
+
+
-
+
-
-
+
+
diff --git a/df.world.xml b/df.world.xml
index 091a85f0f..82d31d19b 100644
--- a/df.world.xml
+++ b/df.world.xml
@@ -300,7 +300,8 @@
-
+
+
@@ -1566,36 +1567,36 @@
The first value in a pair is always less/equal to the higher one, and the first value of the corresponding pair in the next vector
element is always greater/equal to the second one of the previous entry. Looks like first/last values for something.
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
DWARF ELF GOBLIN HUMAN
-
-
+
+
@@ -1604,15 +1605,15 @@
-
+
-
+
-
-
+
+