Sailwind — Технический справочник мододела
English version → en/README.md
Полная документация по архитектуре и внутреннему устройству игры Sailwind (v0.38), полученная декомпиляцией Assembly-CSharp.dll и runtime-анализом. 75 заметок покрывают: системы сохранений, экономики, физики корпуса и океана, предметов (twin-модель), погоды, NPC, UI/текст, камеры, координатные системы и полный разбор бага мода SailwindItemPhysics v4.2 (краш при столкновении held-item twin с лодкой).
Что нужно
Где найти
Персистентность мода → GameState.modData["MyMod.*"]
Заметка 11
Масштаб мира: 1 Unity unit = 1 метр , mission km = 100 m
Заметка 28
Глобальные ссылки и синглтоны
Заметка 30
Центральный хук нового дня: Sun.OnNewDay
Заметка 18
Скрытый debug-режим: P+N, нажать T
Заметка 21
Неполная декомпиляция — какие классы отсутствуют
Заметка 24
Фреймворк предметов: ShipItem → twin → ItemRigidbody
Заметки 16 , 44 , 67
Краш мода с твёрдым twin-коллайдером
Заметки 47–56
Ядро: сохранение, состояние, ссылки
Судно: физика, паруса, управление
№
Файл
Тема
14
boat-physics-buoyancy-damage.md
Физика корпуса: плавучесть, масса, урон, потопление
17
wind-and-sails.md
Ветер (пассаты, шквалы, шторм) и парусная тяга
29
anchor-mooring-ropes.md
Якорь, швартовка, тросы
22
shipyard-customization-purchase.md
Верфь: кастомизация лодок, покупка
38
ropes-rigging-steering.md
Такелаж: штурвал (пружина руля), лебёдки, автопилот
40
hull-dirt-cleaning.md
Грязь корпуса и чистка (MasterPainter)
№
Файл
Тема
18
time-weather-storms.md
Время (OnNewDay), луна, погода, блуждающие штормы
19
world-ports-regions.md
Регионы, порты (34 макс), границы мира
31
ocean-waves-inertia.md
Океан Crest: инерция волн, запрос высоты
43
item-buoyancy-water.md
Плавучесть предметов: ItemRigidbody/SimpleFloatingObject
28
navigation-instruments-world-scale.md
Навигация: 1 unit = 1 m , координаты
37
maps-charts-drawing.md
Карты/чарты: ChartData, рисование, GPS
41
cameras-view-modes.md
Камеры: BoatCamera, CameraFollow, свои камеры
46
water-physics-illusion.md
Физика воды: иллюзия объёма, SampleHeightHelper lifecycle
Экономика, миссии, предметы
№
Файл
Тема
13
economy-markets-currency.md
Экономика: рынки, валюты, цены
15
missions-cargo-mail.md
Миссии: генерация из арбитража, доставка
27
story-quests.md
Сюжет: QuestDude, автомат состояний, награды
16
item-framework-shipitem.md
Фреймворк предметов: ShipItem, физика, инвентарь
44
itemrigidbody-field-map-contract.md
ItemRigidbody: карта полей, twin-контракт
67
item-twin-collider-construction.md
Twin: отложенное построение коллайдеров, ItemSubcollider, CCD modes
45
crate-cargo-prefabs-filter.md
Ящики: amount/containedPrefab, лут-фильтр
32
inventory-cargo-storage.md
Инвентарь (5 слотов), cargo carriers
23
fishing-and-food.md
Рыбалка, порча и консервация еды
26
cooking-stove-fuel.md
Кулинария: плита, топливо, варка/копчение
33
item-spawning-pickup.md
Спавн предметов, подбор, плавучесть
34
worked-example-floating-loot.md
Пример: плавающие лут-ящики (BepInEx рецепт)
42
worked-example-fast-travel.md
Пример: фаст-тревел/телепорт
Исследование мода SailwindItemPhysics v4.2 — раунд 1 (A1–A5, B6–B12, C13–C14, D15)
№
Файл
Тема
47
item-holding-pickup-flow.md
Удержание предмета: end-to-end flow, twin vs visual, teleport при холде, held lifecycle
48
ocean-height-helper-lifecycle.md
Ocean height: SampleHeightHelper lifecycle, canCheckBuoyancyNow, batch-запросы
49
camera-render-shaders.md
Камеры/шейдеры: BoatCamera, rendering path, Z-write, depth fog
50
saves-moddata-instanceid.md
Saves/modData: instanceId, SaveablePrefab, modData persistence, что теряется
Исследование мода SailwindItemPhysics v4.2 — раунд 2 (E1–E6)
Краш/зависание при столкновении held-item твёрдого twin-коллайдера с лодкой.
№
Файл
Тема
51
boat-collider-topology-dhow.md
E1: Топология коллайдеров лодки (dhow): CapsuleCollider (root), BoatEmbarkCollider, walkCollider, HullPlayerCollider, иерархия GO
52
layers-collision-matrix-items-boat-player.md
E2: Слои Unity (0/2/5/8/12/13/14/23/26), матрица столкновений, почему twin (слой 2) сталкивается с CapsuleCollider, а игрок — нет
53
enterboat-exitboat-flap-mechanism.md
E3: EnterBoat/ExitBoat: trigger callbacks, frameCounter>1 gate, BoatMass.AddItem idempotent, ≥22 Hz flap
54
go-pointer-big-item-decollision.md
E4: Деколлизия big-item: нет while-циклов, ComputePenetration single-pass, Boat tag исключён
55
crash-scenarios-boat-item-collision.md
E5: Краш-сценарии: twin Untagged → BoatDamage.Impact не фильтрует → hullDamage 0.15/s
56
nailed-wallattachment-deck-placement.md
E6: nailed (kinematic lock), wallAttachment (raycast+snap), HangableItem, палубная посадка
Исследование мода SailwindItemPhysics v4.6 — раунд 3 (A1–A8, B1–B7)
Ванильный дроп/бросок, кликабельность, зануление velocity, плавучесть.
№
Файл
Тема
57
vanilla-drop-throw-mechanics.md
A1+A2: DropItem (4 строки), ThrowItemAfterDelay, throw charge
58
clickability-layers-manual-held-break.md
A3+A4: OnDrop/OnPickup вербатим, table последствий пропуска, layer lifecycle
59
velocity-zeroing-release-frame-pose.md
A5+A6: velocity обнуляется FixedUpdate position snap, pose в кадре релиза
60
held-readers-throw-key-binding.md
A7+A8: полная таблица held readers, InputName 10 throw key
61
item-catalog-mass-table-units.md
B1+B2+B3: PrefabsDirectory каталог, mass≈кг, UpdateMass
62
crate-mass-material-field.md
B4+B5: crate mass, no material field, no sinkable items
63
vanilla-buoyancy-floating-cargo.md
B6+B7: SimpleFloatingObject, floaterHeight=1.6, no floating cargo
Дополнительные технические заметки
№
Файл
Тема
64
item-classes.md
Справочник базовых и специализированных классов предметов
65
item-mass-buoyancy.md
Формулы UpdateMass, SimpleFloatingObject, layers/triggers
66
prefab-system.md
PrefabsDirectory, SaveablePrefab, BoatLocalItems
67
item-twin-collider-construction.md
Построение twin-коллайдеров, ItemSubcollider, CCD
68
crate-unseal-timing-and-mass.md
Вскрытие: amount → containedItems, timing и потеря vanilla aggregate mass
69
crate-withdraw-pickup-handoff.md
Извлечение: race container/UI pose → hand pose
70
water-splash-particle-systems.md
Ванильные water splash ParticleSystem, материалы и Crest точки
71
crest-simplefloatingobject-exact-model.md
Точный Crest floater: cubic Acceleration, raise, drag и race ownership
72
crest-oceanrenderer-query-contract.md
OceanRenderer, providers, GPU/CPU queries, SampleHeight/Flow contract
73
crest-wave-spectrum-lod-simulation.md
14-октавный Gerstner, spectrum, LOD, dynamic waves/flow/foam
74
crest-water-interactions-rendering-origin.md
BoatProbes, interaction, underwater, depth, reflections, Crest origin
75
crest-dll-complete-type-index.md
Полный source-map всех 80 типов Crest.dll
Параметр
Значение
DLL
Assembly-CSharp.dll
Версия игры
Sailwind v0.38 (Steam)
Инструмент
ILSpy 7.x
Покрытие
~828 классов (полное за исключением GameInput, InputName, BoatProbes, Crest helpers — API реконструирован в заметке 24)
Runtime-верификация
BepInEx console + Harmony hooks + Debug.Log
Twin-модель предмета (ключевой концепт)
У каждого ShipItem два GameObject:
Visual GO (ShipItem + Rigidbody kinematic + Collider isTrigger) — что видит игрок, raycast, interact
Twin GO (ItemRigidbody + Rigidbody dynamic + Collider isTrigger в vanilla / non-trigger в моде) — физика, buoyancy, EnterBoat/ExitBoat
В vanilla twin = isTrigger — «прозрачный» для CapsuleCollider лодки. Мод SailwindItemPhysics v4.2 делает twin non-trigger — twin физически сталкивается с CapsuleCollider, что приводит к краш-сценариям, разобранным в заметках 51–55.
Система
Детали
Океан
Кастомный форк Crest (OceanRenderer, SampleHeightHelper, batch queries)
FloatingOrigin
FloatingOriginManager — сдвиг мира каждые ~1 км для precision (заметки 43, 47)
Слои
0=Default, 2=IgnoreRaycast(twin), 5=UI, 8=Player, 12=HullPlayerCollider(walkCol), 13=Boat, 14=Terrain, 23=Map, 26=Crate (заметка 52)
Raycast mask
LayerMask.op_Implicit(-604165) — GoPointer видит большинство слоёв, не видит 2/5
Fixed timestep
fixedDeltaTime = 0.022s (~45.5 Hz physics)
Debug mode
P+N → T — скрытые множители, kinematic items, disableItemUpdate (заметка 21)
sailwind-modding-notes/
├── README.md ← Русский (основной)
├── LICENSE ← MIT
├── 01-textmesh-not-tmp.md ... 75-*.md ← 75 заметок (RU)
└── en/
├── README.md ← English translation
├── 01-textmesh-not-tmp.md ... 75-*.md ← 75 заметок (EN)
Каждая заметка — самостоятельный Markdown-документ с:
Заголовком, ссылкой на research request (для 47–56)
Таблицами полей/типов/значений
Вербатимными телами ключевых методов (ILSpy)
Sequence-диаграммами и блок-схемами
Практическими выводами «что это значит для мододела»
MIT — материалы свободны для использования в любых модах для Sailwind. См. LICENSE .