It looks like you're right. I knocked up a bin->json converter to help me follow one def through this crazy russian doll situation all the way to a model in a geo.
I picked a random geobin line from my defnames text dump:
geobin:1578:_ES_Des_Loiter_D9_P_City_00_02
// that row is...
1578:object_library/Omni/EncounterSpawns/P_City_00_02/P_City_00_02.geo
So then looking at object_library/Omni/EncounterSpawns/P_City_00_02/P_City_00_02.bin, I look for a def called "_ES_Des_Loiter_D9_P_City_00_02", I find this:
"name": "_ES_Des_Loiter_D9_P_City_00_02",
"type": "",
"obj": "",
"groups": [
{
"name": "object_library\/Omni\/EncounterSpawns\/BaseTypes\/ES_BrawlShipRec_BaseType",
"position": {
"x": 0,
"y": 0,
"z": 0
},
"rotation": {
"x": 0,
"y": 0,
"z": 0
}
}
]
(Don't mind the screwed paths) So take the end of the path "ES_BrawlShipRec_BaseType" and search in defnames, I find this:
geobin:1486:ES_BrawlShipRec_BaseType
// that row is
1486:object_library/Omni/EncounterSpawns/BaseTypes/BaseTypes.geo
This is another geobin, so I look in object_library/Omni/EncounterSpawns/BaseTypes/BaseTypes.bin for "ES_BrawlShipRec_BaseType":
"name": "ES_BrawlShipRec_BaseType",
"type": "",
"obj": "",
"groups": [
{
"name": "Omni\/EncounterSpawns\/Encounter_V_40",
"position": {
"x": 0,
"y": 0,
"z": 0
},
"rotation": {
"x": 0,
"y": 0.872665,
"z": 0
}
},
{
"name": "Omni\/EncounterSpawns\/Encounter_E_01",
"position": {
"x": 11.5,
"y": 0,
"z": -8
},
"rotation": {
"x": 0,
"y": 1.919862,
"z": 0
}
},
// etc
I thought I'd look at "Omni\/EncounterSpawns\/Encounter_E_01", so I search defnames for Encounter_E_01:
geobin:1537:Encounter_E_01
// which is this row
1537:object_library/Omni/EncounterSpawns/EncounterSpawns.geo
So I look in object_library/Omni/EncounterSpawns/EncounterSpawns.bin for Encounter_E_01:
"name": "Encounter_E_01",
"type": "",
"obj": "",
"groups": [
{
"name": "_encounter_E_01",
"position": {
"x": 0,
"y": 0,
"z": 0
},
"rotation": {
"x": 0,
"y": 0,
"z": 0
}
}
]
This doesn't have a path, so I look in the same geobin for a def with that name:
"name": "_encounter_E_01",
"type": "",
"obj": "_encounter_E_01",
"groups": [ ]
The obj field is set, so look in defnames for "_encounter_E_01":
geo:1537:_encounter_E_01
// that row is
1537:object_library/Omni/EncounterSpawns/EncounterSpawns.geo
So finally this is one which is a geo rather than geobin, load up "object_library/Omni/EncounterSpawns/EncounterSpawns.geo" in geodraw, and I find this:
13 _encounter_E_01__ENEMY
Hooray!
Now the thing I'm wondering is - can a def have the "obj" field set (therefore having a model), as well as having child groups which also have models etc? Should be easy enough to find out.