mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-10-05 00:47:54 -04:00
141 lines
9.7 KiB
Markdown
141 lines
9.7 KiB
Markdown
# Struct twins
|
|
|
|
`tools/type_census.py --check-structs` reads this file (`TWINS_DOC`). G62: layout twins without evidence stay apart.
|
|
|
|
- `## Twins`: one `### <lhash>` section per tier-2 duplicate row (plain or `<lhash>:opaque`) kept as separate types, with a
|
|
`names:` line (the row's names, as a set) and a `cause:` line naming at least one address (8 hex digits or `0x…`). A listed
|
|
row does not count in `dup_classes`. An absent lhash, a name-set mismatch or an addressless cause counts in `twins_stale`.
|
|
- `## Dead kept`: `- Name — cause` bullets; a listed canon name does not count in `dead`. A name that is not dead or no longer
|
|
defined in the canonical headers counts in `twins_stale`.
|
|
|
|
## Twins
|
|
|
|
<!-- generated by tools/struct_twins.py --write; regenerate, do not hand-edit -->
|
|
|
|
### f1dcb3a42fc8
|
|
names: Rec_801825D8, Rec_80184FF8, S8012C658, S8017FF9C_sp
|
|
cause: 4 names (20 B, all members placeholders) bound to 5 distinct objects, none bound to two names: ov_SC02_011/0x801890C8:sp, ov_SC04_003/0x8017FF9C:sp, ov_SC06_029/0x801825D8:rec, ov_SC06_029/0x80184FF8:rec, shared/ov/0x8012C658:sp; full list: tools/struct_twins.py --show f1dcb3a42fc8
|
|
- `Rec_801825D8`: 1 obj — ov_SC06_029/0x801825D8:rec
|
|
- `Rec_80184FF8`: 1 obj — ov_SC06_029/0x80184FF8:rec
|
|
- `S8012C658`: 2 obj — ov_SC02_011/0x801890C8:sp, shared/ov/0x8012C658:sp
|
|
- `S8017FF9C_sp`: 1 obj — ov_SC04_003/0x8017FF9C:sp
|
|
|
|
### b519bad67107:opaque
|
|
names: Local_8017EE34, Local_80181C84, Local_801870E8
|
|
cause: 3 names (20 B, all members placeholders) bound to 4 distinct objects, none bound to two names: ov_SC03_105/0x8017EE34:local, ov_SC03_105/0x80181C84:local, ov_SC03_105/0x80183D38:local, ov_SC03_105/0x801870E8:local; full list: tools/struct_twins.py --show b519bad67107:opaque
|
|
- `Local_8017EE34`: 2 obj — ov_SC03_105/0x8017EE34:local, ov_SC03_105/0x80183D38:local
|
|
- `Local_80181C84`: 1 obj — ov_SC03_105/0x80181C84:local
|
|
- `Local_801870E8`: 1 obj — ov_SC03_105/0x801870E8:local
|
|
|
|
### c80fac242f04
|
|
names: Mat801A8E34, Mat_80183C9C, Mtx_A8CE0
|
|
cause: 3 names (32 B, all members placeholders) bound to 4 distinct objects, none bound to two names: md_SC07_004/0x801A8CE0:mtx, md_SC07_004/0x801A8E34:buf, ov_SC06_000/0x80183C9C:mat; full list: tools/struct_twins.py --show c80fac242f04
|
|
- `Mat801A8E34`: 1 obj — md_SC07_004/0x801A8E34:buf
|
|
- `Mat_80183C9C`: 1 obj — ov_SC06_000/0x80183C9C:mat
|
|
- `Mtx_A8CE0`: 2 obj — md_SC07_004/0x801A8CE0:mtx, __attribute__(ret)
|
|
|
|
### 9ba0ae408dd4
|
|
names: Drv_8017E330, Drv_8017E550, Drv_8017E878
|
|
cause: 3 names (56 B, all members placeholders) bound to 6 distinct objects, none bound to two names: 0x801F80E4, ov_SC06_006/0x8017E330:p, ov_SC06_006/0x8017E550:a0, ov_SC06_006/0x8017E550:p, ov_SC06_006/0x8017E878:a0, ov_SC06_006/0x8017E878:p; full list: tools/struct_twins.py --show 9ba0ae408dd4
|
|
- `Drv_8017E330`: 2 obj — 0x801F80E4, ov_SC06_006/0x8017E330:p
|
|
- `Drv_8017E550`: 2 obj — ov_SC06_006/0x8017E550:a0, ov_SC06_006/0x8017E550:p
|
|
- `Drv_8017E878`: 2 obj — ov_SC06_006/0x8017E878:a0, ov_SC06_006/0x8017E878:p
|
|
|
|
### 8944ddcbe454:opaque
|
|
names: Blk36_800296F8, Blob36, SW20
|
|
cause: 3 names (36 B, all members placeholders) bound to 6 distinct objects, none bound to two names: 0x800298BC(arg0), 0x80078E50, 0x80079204, 0x800D4B70, main/0x800296F8:arg0, src/resident/0x800D185C:arg0; full list: tools/struct_twins.py --show 8944ddcbe454:opaque
|
|
- `Blk36_800296F8`: 3 obj — 0x800298BC(arg0), 0x80079204, main/0x800296F8:arg0
|
|
- `Blob36`: 2 obj — 0x80078E50, src/resident/0x800D185C:arg0
|
|
- `SW20`: 1 obj — 0x800D4B70
|
|
|
|
### c2ba48790859
|
|
names: W8, W8_, func_8002EE64_b
|
|
cause: 3 names (1 B, all members placeholders) bound to 4 distinct objects, none bound to two names: 0x80076242, 0x80076243, main/0x8002EE64:b; full list: tools/struct_twins.py --show c2ba48790859
|
|
- `W8`: 2 obj — 0x80076242, 0x80076243
|
|
- `W8_`: 1 obj — D_80076242_
|
|
- `func_8002EE64_b`: 1 obj — main/0x8002EE64:b
|
|
|
|
### ac91ae2d8aa0:opaque
|
|
names: S800D22E4, vec
|
|
cause: 2 names (28 B, all members placeholders) bound to 77 distinct objects, none bound to two names: 0x800D22E4(arg0), 0x8012931C(arg0), 0x8012AD80(arg0), 0x80185238(arg0), 0x801879E8(arg0), md_SC07_004/0x801A72DC:a0, md_SC07_004/0x801ABC8C:a0, md_SC07_004/0x801AC234:a0 …; full list: tools/struct_twins.py --show ac91ae2d8aa0:opaque
|
|
- `S800D22E4`: 1 obj — 0x800D22E4(arg0)
|
|
- `vec`: 76 obj — 0x8012931C(arg0), 0x8012AD80(arg0), 0x80185238(arg0), 0x801879E8(arg0), md_SC07_004/0x801A72DC:a0, md_SC07_004/0x801ABC8C:a0, md_SC07_004/0x801AC234:a0, md_SC07_004/0x801AC940:a1 (+68)
|
|
|
|
### 82c6e3650290:opaque
|
|
names: Gte8_8017F2FC, Rec_80180808
|
|
cause: 2 names (8 B, all members placeholders) bound to 3 distinct objects, none bound to two names: 0x801B1B50, ov_SC02_021/0x8017F2FC:sp10, ov_SC06_025/0x80180808:rec; full list: tools/struct_twins.py --show 82c6e3650290:opaque
|
|
- `Gte8_8017F2FC`: 1 obj — ov_SC02_021/0x8017F2FC:sp10
|
|
- `Rec_80180808`: 2 obj — 0x801B1B50, ov_SC06_025/0x80180808:rec
|
|
|
|
### aa66418d079c:opaque
|
|
names: Blk16_80126940, Pos16_8018743C
|
|
cause: 2 names (16 B, all members placeholders) bound to 3 distinct objects, none bound to two names: ov_SC06_000/0x80181AB4:sp10, ov_SC06_029/0x8018743C:from, ov_SC06_029/0x8018743C:to; full list: tools/struct_twins.py --show aa66418d079c:opaque
|
|
- `Blk16_80126940`: 1 obj — ov_SC06_000/0x80181AB4:sp10
|
|
- `Pos16_8018743C`: 2 obj — ov_SC06_029/0x8018743C:from, ov_SC06_029/0x8018743C:to
|
|
|
|
### 1dd90dc86138
|
|
names: Ent80183F28, Ent_80184058
|
|
cause: 2 names (236 B, all members placeholders) bound to 2 distinct objects, none bound to two names: 0x80183F28(arg0), 0x80184058(arg0); full list: tools/struct_twins.py --show 1dd90dc86138
|
|
- `Ent80183F28`: 1 obj — 0x80183F28(arg0)
|
|
- `Ent_80184058`: 1 obj — 0x80184058(arg0)
|
|
|
|
### d60a32e09c91
|
|
names: P8, S72
|
|
cause: 2 names (8 B, all members placeholders) bound to 5 distinct objects, none bound to two names: 0x80185D28, 0x80185D2A, 0x80185D2C, 0x80185D2E, 0x80185D72; full list: tools/struct_twins.py --show d60a32e09c91
|
|
- `P8`: 4 obj — 0x80185D28, 0x80185D2A, 0x80185D2C, 0x80185D2E
|
|
- `S72`: 1 obj — 0x80185D72
|
|
|
|
### 08944be666a1
|
|
names: Sub8017EBC4, Sub_80181BA0
|
|
cause: 2 names (20 B, all members placeholders) bound to 3 distinct objects, none bound to two names: ov_SC04_011/0x80181BA0:p, ov_SC06_029/0x8017EBC4:func_8012C1B8, ov_SC06_029/0x8017EBC4:sp; full list: tools/struct_twins.py --show 08944be666a1
|
|
- `Sub8017EBC4`: 2 obj — ov_SC06_029/0x8017EBC4:func_8012C1B8, ov_SC06_029/0x8017EBC4:sp
|
|
- `Sub_80181BA0`: 1 obj — ov_SC04_011/0x80181BA0:p
|
|
|
|
### 474e1fa40ab6
|
|
names: Actor_8017E550, Actor_8017E878
|
|
cause: 2 names (156 B, all members placeholders) bound to 2 distinct objects, none bound to two names: 0x8017E550(arg0), 0x8017E878(arg0); full list: tools/struct_twins.py --show 474e1fa40ab6
|
|
- `Actor_8017E550`: 1 obj — 0x8017E550(arg0)
|
|
- `Actor_8017E878`: 1 obj — 0x8017E878(arg0)
|
|
|
|
### 12fe36cd7e07
|
|
names: Struct801E79D8, Struct801EF318
|
|
cause: 2 names (16 B, all members placeholders) bound to 3 distinct objects, none bound to two names: 0x801E2498, 0x801E79D8, 0x801EF318; full list: tools/struct_twins.py --show 12fe36cd7e07
|
|
- `Struct801E79D8`: 1 obj — 0x801E79D8
|
|
- `Struct801EF318`: 2 obj — 0x801E2498, 0x801EF318
|
|
|
|
### c6e867e46e6f
|
|
names: V16x4, Vec4s16_8018423C
|
|
cause: 2 names (8 B, all members placeholders) bound to 7 distinct objects, none bound to two names: 0x80188984, ov_SC03_105/0x8018423C:out, ov_SC03_105/0x8018423C:pos, ov_SC03_105/0x8018423C:tmp, ov_SC03_105/0x8018423C:vec, ov_SC06_025/0x8017F664:a, ov_SC06_025/0x8017F664:b; full list: tools/struct_twins.py --show c6e867e46e6f
|
|
- `V16x4`: 3 obj — 0x80188984, ov_SC06_025/0x8017F664:a, ov_SC06_025/0x8017F664:b
|
|
- `Vec4s16_8018423C`: 4 obj — ov_SC03_105/0x8018423C:out, ov_SC03_105/0x8018423C:pos, ov_SC03_105/0x8018423C:tmp, ov_SC03_105/0x8018423C:vec
|
|
|
|
### 64db0612c4d4
|
|
names: Work_801832E0, Work_80183634
|
|
cause: 2 names (236 B, all members placeholders) bound to 2 distinct objects, none bound to two names: 0x801832E0(arg0), 0x80183634(arg0); full list: tools/struct_twins.py --show 64db0612c4d4
|
|
- `Work_801832E0`: 1 obj — 0x801832E0(arg0)
|
|
- `Work_80183634`: 1 obj — 0x80183634(arg0)
|
|
|
|
### cc89b444f3c5
|
|
names: EntA, Ent_SC07_010_8017AE2C
|
|
cause: 2 names (256 B, all members placeholders) bound to 4 distinct objects, none bound to two names: ov_SC07_010/0x8017E5B8:func_8012C588, ov_SC07_010/0x8017E5B8:p, ov_SC07_010/0x8017E70C:func_8012C588, ov_SC07_010/0x8017E70C:p; full list: tools/struct_twins.py --show cc89b444f3c5
|
|
- `EntA`: 2 obj — ov_SC07_010/0x8017E5B8:func_8012C588, ov_SC07_010/0x8017E5B8:p
|
|
- `Ent_SC07_010_8017AE2C`: 2 obj — ov_SC07_010/0x8017E70C:func_8012C588, ov_SC07_010/0x8017E70C:p
|
|
|
|
### 2816963b1259
|
|
names: Obj800D302C, Struct800D2FEC
|
|
cause: 2 names (44 B, all members placeholders) bound to 2 distinct objects, none bound to two names: 0x800D2FEC(arg0), 0x800D302C(arg0); full list: tools/struct_twins.py --show 2816963b1259
|
|
- `Obj800D302C`: 1 obj — 0x800D302C(arg0)
|
|
- `Struct800D2FEC`: 1 obj — 0x800D2FEC(arg0)
|
|
|
|
### 2e57efa3d051
|
|
names: Voice336A8, VoiceF80
|
|
cause: 2 names (72 B, all members placeholders) bound to 4 distinct objects, none bound to two names: 0x800A4988, main/0x80030F80:e, main/0x80030F80:i, main/0x800336A8:vo; full list: tools/struct_twins.py --show 2e57efa3d051
|
|
- `Voice336A8`: 2 obj — 0x800A4988, main/0x800336A8:vo
|
|
- `VoiceF80`: 2 obj — main/0x80030F80:e, main/0x80030F80:i
|
|
|
|
## Dead kept
|
|
- Unkstruct_80126B58 — defined in the generated `head_types` block of include/struct_types.h; `--fold-dead` never edits generated text (T5.1.c3b)
|
|
- LineF2_8018F694 — used only inside a multi-line macro body in ov_SC06_018/032/033 (census cannot see it); deleting it broke cc1 (`undeclared`), T5.1.c3b
|
|
- actor4c — tag of Actor4C, named only by its own self-pointer member `unk20`; the self-reference needs the tag
|
|
- actor4c_8015444C — tag of Actor4C_8015444C_t9f81a8d5, same self-pointer `unk20` reason
|