Map unit: Difference between revisions

511 bytes added ,  3 years ago
m (Some clarification for Pulse Linktags. (Footnote))
Line 1: Line 1:
''Not to be confused with [[map]]s, [[Stage|stages]] or [[Scene|scenes]]''.
''Not to be confused with [[map]]s, [[Stage|stages]] or [[Scene|scenes]]''.


<onlyinclude>'''Map units''' contain placement data for game maps (e.g. MainField/A-1). In other words, they are used to configure fixed object spawns on maps for actors such as scenery and enemies for example, in contrast to the [[AutoPlacement]] system, which dynamically spawns actors.</onlyinclude>
<onlyinclude>
'''Map units''' contain placement data for game maps (e.g. MainField/A-1). In other words, they are used to configure fixed object spawns on maps for actors such as scenery and enemies for example, in contrast to the [[AutoPlacement]] system, which dynamically spawns actors.
</onlyinclude>


== Types ==
==Types==
Two types of map units exist: ''Static'' and ''Dynamic''.
Two types of map units exist: ''Static'' and ''Dynamic''.


'''Static map units''' are loaded during stage generation (see [[GameScene]] for more details). Their name is suffixed with <code>_Static</code>. They can contain both map rails and map objects; furthermore objects can be linked to each other to implement custom game logic using the [[#Link system]].
'''Static map units''' are loaded during stage generation (see [[GameScene]] for more details). Their name is suffixed with <code>_Static</code>. They can contain both map rails and map objects; furthermore objects can be linked to each other to implement custom game logic using the [[#Link system]]. Static actors are always loaded in memory and will be visible if the player is within the actor's <code>TraverseDist</code> (draw distance) set in [[ActorInfo.product.sbyml]]. It's possible to see actors from the top-left to the bottom-right in open-world stages (MainField and AocField) if the <code>TraverseDist</code> is set high enough.  


'''Dynamic map units''' are loaded and unloaded on-the-fly. Their name is suffixed with <code>_Dynamic</code>. The dynamic loading capability is only really put to good use for open-world type stages (e.g. MainField and AocField). In such map units, the link system cannot be used and only map objects can be specified.
'''Dynamic map units''' are loaded and unloaded on-the-fly. Their name is suffixed with <code>_Dynamic</code>. The dynamic loading capability is only really put to good use for open-world type stages (e.g. MainField and AocField). In such map units, the link system cannot be used and only map objects can be specified. Dynamic actors are considered to be loaded once the player is either inside of the map it's placed (always the case for CDungeon and MainFieldDungeon), or the player is (on MainField and AocField) located in one of the map-sections around the map-section the actor is placed in.  


== Contents ==
'''<u>Example</u>:''' Player is located in <u>H-5</u> so ''G-4, H-4, I-4, G-5- I-5, G-6, H-6 and I-6'' dynamic actors are loaded in memory and will be displayed if the <code>TraverseDist</code> is high enough.


=== <code>LocationPosX</code> ===
==Contents==
 
===<code>LocationPosX</code>===
X coordinate of the center of the map unit.
X coordinate of the center of the map unit.


=== <code>LocationPosZ</code> ===
===<code>LocationPosZ</code>===
Y coordinate of the center of the map unit.
Y coordinate of the center of the map unit.


=== <code>LocationSize</code> ===
===<code>LocationSize</code>===
Size of the map unit (side length of the square).
Size of the map unit (side length of the square).


=== <code>Objs</code> ===
===<code>Objs</code>===
{{expand section}}
{{expand section}}
Array of object structures. '''Must be sorted by HashId'''<ref>Technically, sorting is only required for Dynamic (non-group 0) map units. However, not sorting causes the game to fall back to a slower linear search.</ref> because the placement subsystem performs binary searches on the object array in various cases<ref>0x7101256E14</ref>.
Array of object structures. '''Must be sorted by HashId'''<ref>Technically, sorting is only required for Dynamic (non-group 0) map units. However, not sorting causes the game to fall back to a slower linear search.</ref> because the placement subsystem performs binary searches on the object array in various cases<ref>0x7101256E14</ref>.


=== <code>Rails</code> ===
===<code>Rails</code>===
{{expand section}}
{{expand section}}
Array of rail structures. Can only appear in group 0 maps (Static); this section is completely ignored for non-static map units.
Array of rail structures. Can only appear in group 0 maps (Static); this section is completely ignored for non-static map units.


== Link system ==
==Link system==
'''In static map units only''', map objects can be linked to other objects (up to 255 in a single generation group<ref>"一つの生成グループに 255 以上のアクタが指定されています。テストで無ければプログラマに相談"</ref>). These links allow implementing custom logic and callbacks. For example, DeadUp signals the destination object when the source object dies. This is used to implement enemy chests that only unlock after clearing an enemy camp.
'''In static map units only''', map objects can be linked to other objects (up to 255 in a single generation group<ref>"一つの生成グループに 255 以上のアクタが指定されています。テストで無ければプログラマに相談"</ref>). These links allow implementing custom logic and callbacks. For example, DeadUp signals the destination object when the source object dies. This is used to implement enemy chests that only unlock after clearing an enemy camp.


Line 40: Line 44:
Cs means Constraint<ref>SliderCs links are handled by a function {{addr|a=0x7100F70D60|ver=nx-1.5.0}} that is also called by [[AIDef:Action/SwitchStepSliderConstraint]]</ref>.
Cs means Constraint<ref>SliderCs links are handled by a function {{addr|a=0x7100F70D60|ver=nx-1.5.0}} that is also called by [[AIDef:Action/SwitchStepSliderConstraint]]</ref>.


{|class="wikitable sortable"
{| class="wikitable sortable"
! ID !! Name !! Description !! Official description
!ID!!Name!!Description!!Official description
|-
|-
| 4 || -AxisX || - || マイナスX軸シグナル
|4||-AxisX||-||マイナスX軸シグナル
|-
|-
| 5 || -AxisY || - || マイナスY軸シグナル
|5||-AxisY||-||マイナスY軸シグナル
|-
|-
| 6 || -AxisZ || - || マイナスZ軸シグナル
|6||-AxisZ||-||マイナスZ軸シグナル
|-
|-
| 24 || AreaCol || Area collision (link target is an Area object) || エリア(センサ)指定
|24||AreaCol||Area collision (link target is an Area object)||エリア(センサ)指定
|-
|-
| 1 || AxisX || - || X軸シグナル
|1||AxisX||-||X軸シグナル
|-
|-
| 2 || AxisY || - || Y軸シグナル
|2||AxisY||-||Y軸シグナル
|-
|-
| 3 || AxisZ || - || Z軸シグナル
|3||AxisZ||-||Z軸シグナル
|-
|-
| 37 || BAndSCs || Ball & Socket constraint || ボール&ソケットCS
|37||BAndSCs||Ball & Socket constraint||ボール&ソケットCS
|-
|-
| 38 || BAndSLimitAngYCs || Y angular velocity limited Ball & Socket constraint || Y角速度制限付ボール&ソケットCS
|38||BAndSLimitAngYCs||Y angular velocity limited Ball & Socket constraint||Y角速度制限付ボール&ソケットCS
|-
|-
| 0 || BasicSig || Basic signal || 基本シグナル
|0||BasicSig||Basic signal||基本シグナル
|-
|-
| 9 || BasicSigOnOnly || Basic signal [only emits ON signals] || オンのみ基本シグナル
|9||BasicSigOnOnly||Basic signal [only emits ON signals]||オンのみ基本シグナル
|-
|-
| 14 || ChangeAtnSig || Signal on Attention change (e.g. picking up a weapon) || アテンション変更時シグナル
|14||ChangeAtnSig||Signal on Attention change (e.g. picking up a weapon)||アテンション変更時シグナル
|-
|-
| 39 || CogWheelCs || Gear/cogwheel constraint || 歯車CS
|39||CogWheelCs||Gear/cogwheel constraint||歯車CS
|-
|-
| 21 || CopyWaitRevival || Activate links when the revival flag of the CopyWaitRevival target is set (e.g. can be used with LinkTagAnd to trigger basic signals when a chest is opened) || 配置自動セーブ継承
|21||CopyWaitRevival||Activate links when the revival flag of the CopyWaitRevival target is set (e.g. can be used with LinkTagAnd to trigger basic signals when a chest is opened)||配置自動セーブ継承
|-
|-
| 15 || Create || Create a map object. Target objects are not created unless this link is activated. || 生成
|15||Create||Create a map object. Target objects are not created unless this link is activated.||生成
|-
|-
| 11 || DeadUp || Signal on death || 死んだらオン
|11||DeadUp||Signal on death||死んだらオン
|-
|-
| 16 || Delete || Delete a map object. Target objects are created and stay spawned until this link is activated. Note: the corresponding collision is disabled even for objects that have their collision data extracted to separate Static Compound files. || 削除
|16||Delete||Delete a map object. Target objects are created and stay spawned until this link is activated. Note: the corresponding collision is disabled even for objects that have their collision data extracted to separate Static Compound files.||削除
|-
|-
| 29 || DemoMember || - || デモ参加
|29||DemoMember||-||デモ参加
|-
|-
| 32 || FixedCs || - || 固定CS
|32||FixedCs||-||固定CS
|-
|-
| 26 || ForSale || Links a shop item to its seller (target is the seller NPC). || 売り物
|26||ForSale||Links a shop item to its seller (target is the seller NPC).||売り物
|-
|-
| 19 || ForbidAttention || Prevent attention (i.e. interacting with an object, for example picking up a weapon) || アテンションタイプ変更
|19||ForbidAttention||Prevent attention (i.e. interacting with an object, for example picking up a weapon)||アテンションタイプ変更
|-
|-
| 18 || Freeze || Freeze the target object || 凍結
|18||Freeze||Freeze the target object||凍結
|-
|-
| 7 || GimmickSuccess || Success signal (used for minigames) || ネタ成功シグナル
|7||GimmickSuccess||Success signal (used for minigames)||ネタ成功シグナル
|-
|-
| 33 || HingeCs || Hinge constraint || ヒンジCS
|33||HingeCs||Hinge constraint||ヒンジCS
|-
|-
| 12 || LifeZero || Emit a LifeZero signal when the life of the source object is 0 || ライフ0
|12||LifeZero||Emit a LifeZero signal when the life of the source object is 0||ライフ0
|-
|-
| 34 || LimitHingeCs || Limited hinge constraint || 制限付ヒンジCS
|34||LimitHingeCs||Limited hinge constraint||制限付ヒンジCS
|-
|-
| 27 || ModelBind || - || モデルバインド
|27||ModelBind||-||モデルバインド
|-
|-
| 17 || MtxCopyCreate || - || 位置継承生成
|17||MtxCopyCreate||-||位置継承生成
|-
|-
| 22 || OffWaitRevival || Reset the revival flag of the target object || 配置自動セーブオフ
|22||OffWaitRevival||Reset the revival flag of the target object||配置自動セーブオフ
|-
|-
| 30 || PhysSystemGroup || - || 物理システムグループ
|30||PhysSystemGroup||-||物理システムグループ
|-
|-
| 28 || PlacementLOD || Replace the source object with the link target object at lower level of details || 配置LOD
|28||PlacementLOD||Replace the source object with the link target object at lower level of details||配置LOD
|-
|-
| 36 || PulleyCs || - || 滑車CS
|36||PulleyCs||-||滑車CS
|-
|-
| 40 || RackAndPinionCs || Rack-and-pinion constraint || ラック&ピニオンCS
|40||RackAndPinionCs||Rack-and-pinion constraint||ラック&ピニオンCS
|-
|-
| 23 || Recreate || Recreates the target object || 再生成
|23||Recreate||Recreates the target object||再生成
|-
|-
| 41 || Reference || - || 参照
|41||Reference||-||参照
|-
|-
| 10 || Remains || Divine Beast signal || 遺物シグナル
|10||Remains||Divine Beast signal||遺物シグナル
|-
|-
| 25 || SensorBind || - || センサバインド
|25||SensorBind||-||センサバインド
|-
|-
| 35 || SliderCs || Slider constraint || スライダーCS
|35||SliderCs||Slider constraint||スライダーCS
|-
|-
| 13 || Stable || - || 安定
|13||Stable||-||安定
|-
|-
| 31 || StackLink || - || スタック
|31||StackLink||-||スタック
|-
|-
| 20 || SyncLink || Put the destination object and any object that is linked to it into the same generation group || 生成グループ
|20||SyncLink||Put the destination object and any object that is linked to it into the same generation group||生成グループ
|-
|-
| 8 || VelocityControl || Velocity control signal || 速度制御シグナル
|8||VelocityControl||Velocity control signal||速度制御シグナル
|-
|-
|}
|}


=== Link tags ===
===Link tags===
''Not to be confused with [[actor tag]]s.''
''Not to be confused with [[actor tag]]s.''


Line 146: Line 150:
Parameters are documented in [[AIDef:Action/LinkTagBaseAction#MapUnitInstParams]].
Parameters are documented in [[AIDef:Action/LinkTagBaseAction#MapUnitInstParams]].


== File formats ==
==File formats==


=== Map unit binary ===
===Map unit binary===
In ''Breath of the Wild'', map units are stored in a binary format and given the ''mubin'' (Map Unit Binary) file extension. All map object IDs are replaced with CRC32 hashes as a space optimisation. [[BYML]] is used as the serialisation format.
In ''Breath of the Wild'', map units are stored in a binary format and given the ''mubin'' (Map Unit Binary) file extension. All map object IDs are replaced with CRC32 hashes as a space optimisation. [[BYML]] is used as the serialisation format.


Line 155: Line 159:
Despite the file extension, <code>Map/%s/Location.mubin</code> and <code>Map/%s/LazyTraverseList.mubin</code> are not actually map units.
Despite the file extension, <code>Map/%s/Location.mubin</code> and <code>Map/%s/LazyTraverseList.mubin</code> are not actually map units.


=== Source map unit ===
===Source map unit===
Source map units have muunt<ref>The executable has remnants of error logging functions that print paths to development map units of the following type: <code>Map/Project/%s/Data/%s/%s.muunt</code></ref> as their file extension and use strings for map object IDs such as <code>F-5_challenge.muunt/obj760</code> instead of CRC32 hashes of the IDs in map unit binaries.
Source map units have muunt<ref>The executable has remnants of error logging functions that print paths to development map units of the following type: <code>Map/Project/%s/Data/%s/%s.muunt</code></ref> as their file extension and use strings for map object IDs such as <code>F-5_challenge.muunt/obj760</code> instead of CRC32 hashes of the IDs in map unit binaries.
[[Category:Internals]]
[[Category:Internals]]
<references />
<references />
[[Category:File formats]]
[[Category:File formats]]
19

edits