wowlib 0.0.0
Read & write World of Warcraft client files — a C++26 core
Loading...
Searching...
No Matches
object.hpp
Go to the documentation of this file.
1#pragma once
2
8
9#include <cstdint>
10
11#include <welder/vocabulary.hpp>
12
14
18 struct [[
19 =welder::weld,
20 =welder::doc(R"(
21 A terrain sound emitter (MCSE, 28 bytes): a SoundEntriesAdvanced foreign
22 key and a position/size pair placing an ambient sound in the cell.)")
24 [[=welder::doc("The sound entry (a SoundEntriesAdvanced foreign key).")]]
25 std::uint32_t entryId = 0;
27 [[=welder::doc("The emitter position.")]]
29
30 [[=welder::doc("The emitter size / extents.")]]
31 C3Vector size{};
32
33 bool operator==(const CWSoundEmitter&) const = default;
34 };
35
36 static_assert(sizeof(CWSoundEmitter) == 0x1C);
37
39 parameters later folded into SoundEntriesAdvanced. Field layout per
40 wowdev's 1.12.1 struct, verified field-for-field against the 1.12.2
41 client's seven carrier tiles (positions land inside their tiles' world
42 ranges, times are day-minutes, gaps are milliseconds). 2.4.3 ships no
43 MCSE at all, so the layout is vanilla-only in practice. */
44 struct [[
45 =welder::weld,
46 =welder::doc(R"(
47 A pre-WotLK terrain sound emitter (MCSE, 52 bytes): a SoundEntries
48 foreign key plus the inline distance/time/loop parameters that later
49 moved into SoundEntriesAdvanced.)")
51 [[=welder::doc("Sequential emitter id, unique per map.")]]
52 std::uint32_t soundPointId = 0;
54 [[=welder::doc("The sound (a SoundEntries foreign key).")]]
55 std::uint32_t soundNameId = 0;
57 [[=welder::doc("The emitter position, in world coordinates.")]]
60 [[=welder::doc("Full-volume distance.")]]
61 float minDistance = 0;
63 [[=welder::doc("Audible-range distance.")]]
64 float maxDistance = 0;
66 [[=welder::doc("Cutoff distance.")]]
67 float cutoffDistance = 0;
69 [[=welder::doc("Daily start time, minutes.")]]
70 std::uint16_t startTime = 0;
72 [[=welder::doc("Daily end time, minutes.")]]
73 std::uint16_t endTime = 0;
75 [[=welder::doc("Emitter mode.")]]
76 std::uint16_t mode = 0;
78 [[=welder::doc("Minimum loop count.")]]
79 std::uint8_t loopCountMin = 0;
81 [[=welder::doc("Maximum loop count.")]]
82 std::uint8_t loopCountMax = 0;
84 [[=welder::doc("Minimum group silence, milliseconds.")]]
85 std::uint16_t groupSilenceMin = 0;
87 [[=welder::doc("Maximum group silence, milliseconds.")]]
88 std::uint16_t groupSilenceMax = 0;
90 [[=welder::doc("Minimum concurrent play instances.")]]
91 std::uint16_t playInstancesMin = 0;
92
93 [[=welder::doc("Maximum concurrent play instances.")]]
94 std::uint16_t playInstancesMax = 0;
95
96 [[=welder::doc("Minimum gap between sounds, milliseconds.")]]
97 std::uint16_t interSoundGapMin = 0;
98
99 [[=welder::doc("Maximum gap between sounds, milliseconds.")]]
100 std::uint16_t interSoundGapMax = 0;
102 bool operator==(const CWSoundEmitterVanilla&) const = default;
103 };
104
105 static_assert(sizeof(CWSoundEmitterVanilla) == 52);
106
108 struct [[
109 =welder::weld,
110 =welder::doc(R"(
111 A doodad-set range (MWDR, Shadowlands+): an inclusive [begin, end] span
112 into the MWDS index list, selecting which WMO doodad sets a placement
113 loads.)")
115 [[=welder::doc("The first MWDS index (inclusive).")]]
116 std::uint32_t begin = 0;
117 [[=welder::doc("The last MWDS index (inclusive).")]]
118 std::uint32_t end = 0;
119
120 bool operator==(const SMDoodadSetRange&) const = default;
121 };
122
123 static_assert(sizeof(SMDoodadSetRange) == 0x8);
124}
ADT chunk binary structs (the MCNK cell header, texture layers, liquid records, flying bounds) and th...
Definition header.hpp:22
One pre-WotLK sound emitter (MCSE, 52 bytes): the full inline emitter parameters later folded into So...
Definition object.hpp:39
std::uint8_t loopCountMin
Minimum loop count.
Definition object.hpp:68
std::uint16_t endTime
Daily end time, minutes.
Definition object.hpp:62
std::uint32_t soundNameId
The sound (a SoundEntries foreign key).
Definition object.hpp:44
bool operator==(const CWSoundEmitterVanilla &) const =default
std::uint8_t loopCountMax
Maximum loop count.
Definition object.hpp:71
std::uint16_t groupSilenceMin
Minimum group silence, milliseconds.
Definition object.hpp:74
std::uint16_t playInstancesMin
Minimum concurrent play instances.
Definition object.hpp:80
C3Vector position
The emitter position, in world coordinates.
Definition object.hpp:47
std::uint16_t interSoundGapMax
Maximum gap between sounds, milliseconds.
Definition object.hpp:89
std::uint32_t soundPointId
Sequential emitter id, unique per map.
Definition object.hpp:41
std::uint16_t playInstancesMax
Maximum concurrent play instances.
Definition object.hpp:83
std::uint16_t interSoundGapMin
Minimum gap between sounds, milliseconds.
Definition object.hpp:86
std::uint16_t startTime
Daily start time, minutes.
Definition object.hpp:59
std::uint16_t groupSilenceMax
Maximum group silence, milliseconds.
Definition object.hpp:77
One sound emitter (MCSE, 28 bytes): the client reads 0x1C bytes per entry — a sound-entry id and a po...
Definition object.hpp:18
bool operator==(const CWSoundEmitter &) const =default
C3Vector size
The emitter size / extents.
Definition object.hpp:26
std::uint32_t entryId
The sound entry (a SoundEntriesAdvanced foreign key).
Definition object.hpp:20
C3Vector position
The emitter position.
Definition object.hpp:23
One Shadowlands doodad-set range (MWDR): a [begin, end] span into MWDS.
Definition object.hpp:97
bool operator==(const SMDoodadSetRange &) const =default
std::uint32_t begin
The first MWDS index (inclusive).
Definition object.hpp:99
std::uint32_t end
The last MWDS index (inclusive).
Definition object.hpp:101
A 3D float vector — the workhorse: positions, normals, rotations-as-Euler-degrees in placements.
Definition types.hpp:49
The binary-level math and color primitives shared across WoW file formats (wowdev....