Создание дверей стандартных (не вращающихся), я как многие делают, разобью на пошаговые блоки, сразу предупреждаю, надо будет долго терпеть прежде чем всё заработает. Шаг 1: Описание программных блоков в ".ini", поможет ориентироваться в просторах файла и даст первые намёки на логику взаимодействия программных блоков. Шаг 2: Здесь я разбиваю на подшаги "а", "б", "в" и т.п, и дам самое основное, что бы дверь вообще работала хотя бы. Шаг 3: Добавление эффектов "Gib" (Гибы) - картинки появляющиеся после уничтожения двери или мотора, эффект разрушения. ... ШАГ 1: Описание прораммных блоков в ".ini": (Буду лишь по одному экземпляру показывать... всё идёт в правильной последовательности, можно в один ".ini" файл всё бросать)Для сравнения можете посмотреть файл "Cortex Command build 23\Base.rte\Actors\Doors\Doors.ini", или прикреплённый файл "All.rte". {Внимание!!! Игра по каким-то причинам иногда не хочет принимать ".ini" файлы с русским описаниям, особенно в некоторых местах, например: "PresetName = ALL DoorA // Имя присваемое данному программному блоку, с дверью.", игра выдаст ошибку в этой строчке, так же замечено похожее переодическое поведение с координатмаи. Возможно виной всему раскладка клавиатуры в момент пичатанья "//". По этому советю взять готовый ".ini" файл и менять его без добавления описаний.} 1) Первый программный блок. Определяет значение гиба.(Для манипуляций им в будущем!) Quote AddEffect = MOSRotating PresetName = Door Motor Gib A // Здесь присваиваем имя данному программному блоку или гибу если хотите (для будущего использования) Mass = 52.75// Масса создаваемого объекта - гиба. HitsMOs = 1 GetsHitByMOs = 0 SpriteFile = ContentFile FilePath = ALL.rte/Objects/ALL/Doors/Elements/MotorGibA.bmp // Путь к ".bmp" картинке гиба. FrameCount = 1 SpriteOffset = Vector X = -8 // Дополнено - уточнено Mad_Alex: Координаты определяющие центр рисунка, который будет еще и центром тяжести объекта. Y = -7 AngularVel = 6 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material CopyOf = Mangled Metal Resolution = 4 Depth = 0 DeepCheck = 0 2) Второй программный блок. Определяет значение двери (движущейся его части). Quote AddEffect = Attachable PresetName = ALL DoorA // Имя присваемое данному программному блоку, с дверью. PinStrength = 10000 Mass = 200 // Масса двери. HitsMOs = 1 GetsHitByMOs = 1 SpriteFile = ContentFile FilePath = ALL.rte/Objects/ALL/Doors/Elements/SlideShortA.bmp // Путь к ".bmp" картинке двери. FrameCount = 1 SpriteOffset = Vector X = 0 // Дополнено - уточнено Mad_Alex: Координаты определяющие центр рисунка, который будет еще и центром тяжести объекта. Y = 0 EntryWound = AEmitter CopyOf = Dent Metal Light ExitWound = AEmitter CopyOf = Dent Metal Light AngularVel = 0 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material CopyOf = Door Metal Resolution = 4 Depth = 0 DeepGroup = AtomGroup AutoGenerate = 1 Material = Material CopyOf = Door Metal Resolution = 6 Depth = 4 DeepCheck = 1 JointStrength = 300 JointStiffness = 0.5 BreakWound = AEmitter CopyOf = Wound Bone Break JointOffset = Vector X = 0 Y = 0 DrawAfterParent = 1 GibImpulseLimit = 7500 // Это значение определяет какая сила воздействия начинает наносить вред двери.. GibWoundLimit = 75 // Это количество жизней, двери. // GibSound = Sound // CopyOf = Bone Crack AddGib = Gib // Этот программный блок прикрепляет гибы к двери. GibParticle = MOSRotating CopyOf = Door Base Gib // Название присвоенное гибу в программном блоке 1. Offset = Vector X = 0 Y = 7 MinVelocity = 15 3) Третий программный блок. Определяет значения мотора. Quote AddEffect = ADoor PresetName = ALL MotorA // Имя присваемое данному программному блоку, с мотором. Mass = 117.72 // Масса мотора. HitsMOs = 0 GetsHitByMOs = 1 SpriteFile = ContentFile FilePath = ALL.rte/Objects/ALL/Doors/Elements/MotorA.bmp //Путь к ".bmp" картинке мотора. FrameCount = 4 SpriteOffset = Vector X = 0 // Дополнено - уточнено Mad_Alex: Координаты определяющие центр рисунка, который будет еще и центром тяжести объекта. Y = 0 AngularVel = 6 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material CopyOf = Military Stuff Resolution = 4 Depth = 0 DeepCheck = 0 GibImpulseLimit = 5000 // Это значение определяет какая сила воздействия начинает наносить вред мотору. GibWoundLimit = 30 // Это количество жизней мотора. // Сюда также можно прикрепить гибы (смотреть конец второго программного блока) 4) Четвёртый программный блок. Он соединяет мотор и дверь (привязывает дверь к мотору). Quote AddActor = ADoor CopyOf = ALL MotorA // Название присвоенное программному блоку отвечающему за мотор. PresetName = ALL SistemA // Название присваемое программному блоку в котором совместили дверь и мтор. PinStrength = 10000 SpriteAnimMode = 5 SpriteAnimDuration = 150 // Скорость анимации мотора. EntryWound = AEmitter CopyOf = Leaking Machinery ExitWound = AEmitter CopyOf = Leaking Machinery Status = 0 Health = 100 Team = 0 CharHeight = 40 Door = Attachable CopyOf = ALL DoorA //Название присвоенное программному блоку отвечающему за дверь. OpenOffset = Vector X = -29 // Координаты двери в открытом состоянии, относительно места установки мотора, а не его рисунка. (В пикселях) Y = 0 ClosedOffset = Vector X = -29 // Координаты двери в закрытом состоянии, относительно места установки мотора, а не его рисунка. (В пикселях) Y = 24 OpenClosedAngle = Matrix AngleDegrees = 0 //Поворот ".bmp" картинки двери. (В градусах) DoorMoveTime = 750 //Время закрытия-открытия двери(ей). // DoorOpenSound ClosedByDefault = 1 ResetDefaultDelay = 2000 // Через сколько после установки в игру закроются двери, как это бывает обычно у всех. SensorInterval = 100 AddSensor = Sensor StartOffset = Vector X = 0 // Координаты пройдя в которых дверь откроется, относительно места установки мотора, а не его рисунка. (В пикселях) Y = 28 //Удивительно, но со знаками (+ и -) какая-то белиберда, это вы уж сами тестируйте, но похоже здесь надо ставить знак наоборот. Что то вроде, того что не от мотора считается, а от точки считается где мотор находится, но мотор всё равно остаётся на месте и точка оказывается там где нам надо. SensorRay = Vector X = -55 // Точка координат до которой тянется линия от предыдущей точки координат (смотреть выше) войдя в которую откроются двери. (В пикселях, относительно предыдужей точки координат) Y = 0 SkipPixels = 6 // Дополнено - уточнено Mad_Alex: Чем меньше значение параметра SkipPixels тем плотнее луч соединяющий координаты "StartOffset = Vector" и "SensorRay = Vector", детальнее проверка наличия актора в луче и больше он кушает быстродействие 5) Пятый программный блок. Добавляет в СС объект и определяет местонахождение моторов. Quote AddTerrainObject = TerrainObject // Добавляем объект. PresetName = DoorT2 // Название объекта которое будет отображаться в игре. AddToGroup = ALL (Doors) // Группа в которой будет находиться объект в игре. GoldCost = 150 // Цена объекта. FGColorFile = ContentFile // Ниже пути по которым игра найдёт нужные рисунки для создания объекта. Path = ALL.rte/Objects/ALL/Doors/DoorT2FG.bmp MaterialFile = ContentFile Path = ALL.rte/Objects/ALL/Doors/DoorT2Mat.bmp BGColorFile = ContentFile Path = ALL.rte/Objects/ALL/Doors/DoorT2BG.bmp AddChildObject = SOPlacer PlacedObject = ADoor // Строка отвечающая з создание дверей в объекте. CopyOf = ALL SistemA // Имя присвоенное программному блоку в котором совместили дверь и мтор. Offset = Vector X = 21 // Координаты мотора, относительно центра рисунка. (В пикселях) Y = -41 AddChildObject = SOPlacer // Это блок второго мотора. PlacedObject = ADoor CopyOf = ALL SistemA // Имя присвоенное программному блоку в котором совместили дверь и мтор. Offset = Vector X = 21 // Координаты мотора, относительно центра рисунка. (В пикселях) Y = 41 HFlipped = 1 // Зеркализация, делает его (мотор) наоборот, как отражение тому, что должно было быть без этой команды. Rotation = Matrix AngleDegrees = 180 // Поворот рисунка двери. (В градусах) ... Шаг 2: А) Создаём дверь, мотор и объект в котором всё это будет находиться. Б) Создаём ".ini" файл и добавляем туда блок номер 2, но лучше из СС , а не отсюда! В строке "PresetName = ***" вместо звёздочек пишем имя которым вы хотите назвать этот программный блок. В строке"FilePath = ###" вместо решёток пишем путь к файлу (".bmp" картинке) вашей двери.[/color] В) Создаём прораммный блок номер 3 и проделываем те же манипуляции! Г) Создаём прораммный блок номер 4. В строке"CopyOf = ###" Вместо решёток пишем как мы назвали программный блок номер 3 (мотор). В строке"PresetName =***" вместо звёздочек пишем как мы назвали программный блок 2 (дверь). Д) Создаём программный блок номер 5. В строке "PresetName = $$$" Вместо долларов пишем как мы назовём наш модуль в СС (в игре). В строке"AddToGroup = %%%" Вместо процентов пишем в какой группе будет название нашего модуля. В трёх строках с названиями "Path = ^^^" Вместо вершинок пишем пути к трём разным bmp картинкам модуля на которому будут размещены мотр с дверью. В строке "CopyOf = @@@" Вместо Собак пишем как мы назвали программный блок номер 4 (слияние двери с мотором). И указываем координаты размещения моторов относительно центра рисунка модуля. В "X" и "Y". Е) После всех манипуляций и установки мотора в нужном месте возвращаемся к прораммному блоку 4 и химичим. Quote AddSensor = Sensor StartOffset = Vector X = 0 // Координаты пройдя в которых дверь откроется, относительно места установки мотора, а не его рисунка. (В пикселях) Y = 28 //Удивительно, но со знаками (+ и -) какая-то белиберда, это вы уж сами тестируйте, но похоже здесь надо ставить знак наоборот. Что то вроде, того что не от мотора считается, а от точки считается где мотор находится, но мотор всё равно остаётся на месте и точка оказывается там где нам надо. SensorRay = Vector X = -55 // Точка координат до которой тянется линия от предыдущей точки координат (смотреть выше) войдя в которую откроются двери. (В пикселях, относительно предыдужей точки координат) Y = 0 SkipPixels = 6 Остальные манипуляции проводите пользуясь материалами Шаг 1 для обеспечения правильного места отображения элементов. ... Шаг 3: Если вы разобрались с расположением мотора и дверьми , и всё рабтает, можно приступать к освоению гибов. Заходим в наш злополучный ".ini", хотя для кого как))) И добавляем первый программный блок (ставим перед вторым и желательно оставить пустую строку между блоками. Для сравения всё так же смотрите файл "Cortex Command build 23\Base.rte\Actors\Doors\Doors.ini", ну или прикреплённый файл "All.rte") В строке "PresetName = ***" вместо звёздочек пишем имя которым вы хотите назвать этот программный блок. В строке "FilePath = ###" вместо решёток пишем путь к файлу (".bmp" картинке) вашему гибу. В зависимости от того для чего этот гиб (для мотора или двери) мы в 2 (дверь) или 3 (мотор) программном блоке вставляем некое дополнение Quote AddGib = Gib GibParticle = MOSRotating CopyOf = *** // Вместо звёздочек пишем название присвоенное гибу в программном блоке 1 (Гибы). Offset = Vector X = 0 // Координаты по которым размещается гиб относительно центра рисунка двери (Или мотора если вы вставили это в программный блок 3) Y = 7 MinVelocity = 15 Если всё сделано правильно , вы увидите как отваливаются куски от вашей двери когда она исчерпала свой лимит жизни))) Удачи в модостроении!!! AlexandrBuryakov