[Скрипты] Карты с движущимися/разрушаемыми объектами в WF
|
|
Сообщений: 1511
|
Опубликовано: 13.12.2015, 12:53:12
Написал скрипт на движущиеся объекты! Скачать Исходник
С помощью летающей платформы в виде стрелки можно перемещаться между двумя большими островами. Для ее активации надо взять ящик в виде кружащихся звезд. Перемещаясь на платформе, необходимо постоянно ползти или прыгать - т.к. червь не "приклеивается" к ней. И пауза не останавливает движение! Подробнее на видео.
Также небольшие технические детали: На карте объект graphs\scenery\holygrail.xom заменил на graphs\scenery\bouncyarrow.xom. У него изменил размер и поворот. Повернул не идеально (не параллельно воде), но вроде сойдет. Направление стрелки постоянно, т.к. я не нашел как в скрипте менять поворот.
|
|
|
|
Сообщений: 1511
|
Опубликовано: 13.12.2015, 14:43:49
немного открытой инфы про детейлы:
- список используемых на карте детейлов не поддается изменению (нельзя добавить/удалить элемент) - можно изменить параметры элемента ("путь", имя для скриптов, позиция, ориентация, масштаб) - список детейлов карты поддается импорту и экспорту - "путь" указывает непонятно куда, выглядит по образцу graphs\scenery\*.xom (таких файлов в игре нет) на скрине импортировал список детейлов из me3.xom (там их вроде больше всего) в t3.xom:
- модели детейлов хранятся в bundles, для каждой карты там свой файл. как бандл связывается с картой - не понял, но явно не через скрипт (мб через имя файла или какую-то инфу в файле карты). - в бандле каждой модели присвоено имя по типу того, что в "пути", но "папки" с большой буквы и слэш прямой (Graphs/Scenery/*.xom) - свои модели тоже не добавить, только заменить
вряд ли кто это сходу поймет, но мб пригодится
алсо детейлы можно приводить в движение через скрипты (скорость тоже можно задавать). интересно было бы потестить осязаемые (collidable) движимые объекты.
|
|
|
|
Сообщений: 1511
|
Опубликовано: 13.12.2015, 15:21:13
Цитата 4erveR ( ) интересно было бы потестить осязаемые (collidable) движимые объекты. таки потестил - червь не "приклеивается" к ним, а наоборот, объекты выскальзывают из-под червя. мб у кого-то есть идеи режима на основе этой особенности?
апд. придумал: можно сделать карту с несколькими островами (или заюзать существующую), где между ними будут летать объекты (н-р блоки), с помощью которых можно перемещаться на др. остров.
ну или миссия, где по параллельным траекториям циклически движутся объекты, чем дальше от начала - тем больше скорость, а червю надо ползая по ним дойти до конца. объяснил как мог.
|
|
|
|
Сообщений: 1511
|
Опубликовано: 14.12.2015, 06:56:31
пробовал заменять details на другие модели - не сработало: 3ds (причем экспортированные в самом xv) - не может прочитать xom3d - разная структура и не импортирует xom ветви - заменилось, но игра вылетела
также пытался прописать у описанного в xom карты детейла "путь" к модели блока - тоже вылетело апд. брал также "пути" из бандла карты - часть работает, часть вылетает
|
|
|
|
Сообщений: 3813
|
Опубликовано: 14.12.2015, 19:53:56
Я в ВФ абсолютно не разбираюсь, так что увы советов дать не могу. Но молодцом!)
Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005) Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007) Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)
mod.worms.pro - мод Worms Renewation для Worms4
|
|
|
|
Сообщений: 1511
|
Опубликовано: 20.12.2015, 11:45:07
Написал скрипт на движущиеся объекты! Подробнее в шапке, а здесь будет исходник:
Код --*********************************************************** -- Moving objects test. --***********************************************************
function InitialiseLevel() LoadLevel("landscapes/MP/ScriptPack/M4.xom",true) TriggerCrateCollected = {false, false} --подобран ли ящик-триггер PlatformPoints = {"buildHere0028", "buildHere0040"} --позиции платформы end
function MakeTriggerCrate(N) --создание ящика-триггера crate = CreateCrate() crate.Contents = kWF_TRIGGER_CRATE crate.NumContents = 1 crate.TeamDestructible = -1 crate.WormCollectable = -1 crate.TeamCollectable = -1 crate.GroundSnap = false crate.FixedPosition = true crate.UXB = false crate.Destructible = false crate.Pushable = false crate.CollectableByPayload = false crate.Collectable = true crate.Model = "Crate.Critical" crate.SpinBaby = true crate.ScaleFactor = 0.5 crate.CrateId = N --+1000 SpawnCrate( crate.Index, PlatformPoints[N] ) end
function HideWormsNow() ObjData = GetDetailObjectData("holygrail") --настройка параметров объекта ObjData.IsVisible = true ObjData.IsCollidable = true ObjData.CanBeDamaged = false ObjData.CanBeDestroyed = false ObjData.DisappearsWhenDestroyed = true ObjData.TimerEventsAreRepeating = false ObjData.MovementSpeed = 1.5 ObjData.TimeToReachMovementSpeed = 3.0 ObjData.MaxHealth = 100.0 ObjData.CurrentHealth = 100.0 WarpDetailObjectToPoint("holygrail", PlatformPoints[1]) --мгновенное перемещение на стартовую позицию local CrateN = 1 --создание ящиков-триггеров while CrateN <= 2 do MakeTriggerCrate(CrateN) CrateN = CrateN + 1 end end
function CrateCollected(CrateIndex,WormIndex) crate = GetCrateData(CrateIndex) if crate.Contents == kWF_TRIGGER_CRATE then --проверка на ящик-триггер TriggerCrateCollected[crate.CrateId] = true WarpDetailObjectToPoint("holygrail", PlatformPoints[crate.CrateId]) --мгновенное перемещение на позицию рядом с ящиком if crate.CrateId == 1 then --плавное перемещение на другую позицию ObjData.TimeToReachMovementSpeed = 3.0 MoveDetailObjectToPoint("holygrail", PlatformPoints[2]) elseif crate.CrateId == 2 then ObjData.TimeToReachMovementSpeed = 5.0 MoveDetailObjectToPoint("holygrail", PlatformPoints[1]) end end collectgarbage() end
function TurnEnded() local CrateN = 1 --восстановление взятых ящиков while CrateN <= 2 do if TriggerCrateCollected[CrateN] then MakeTriggerCrate(CrateN) TriggerCrateCollected[CrateN] = false end CrateN = CrateN + 1 end end
|
|
|
|
Сообщений: 3813
|
Опубликовано: 20.12.2015, 12:44:07
Интересно) а можно объект по вейпоинтам пускать)? и спаунить и уничтожать)? представь можно сделать не как платформу, тем более червю прыгать приходится, а как движимая преграда. Можно например создать поток быстро летящих пуль?
Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005) Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007) Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)
mod.worms.pro - мод Worms Renewation для Worms4
|
|
|
|
Сообщений: 1511
|
Опубликовано: 20.12.2015, 13:01:30
Цитата firsacho ( ) спаунить и уничтожать не совсем так - можно скрывать (делать невидимым и неосязаемым), ну и обратное
Цитата firsacho ( ) а можно объект по вейпоинтам пускать в смысле по пути состоящему из точек? сложновато будет, вроде не видел функции, обрабатывающей событие конца движения. отследить состояние можно только(?) через переменную:
Код moving = IsDetailObjectMoving("Sheep001") из обработчиков в examples видел только такие:
Код function DetailObjectCollisionWithWeapon(ObjectName) function DetailObjectCollisionWithWorm(ObjectName, WormIndex) function DetailObjectDamaged(ObjectName, AssailantTaskId, DamageAmount) upd. придумал решение - как-то рассчитать время движения и использовать несколько SetDetailObjectTimerEvent - для каждого участка.
Цитата firsacho ( ) создать поток быстро летящих пуль в теории можно, как-то так:
Код ObjData = GetDetailObjectData("bullet001") ObjData.IsVisible = true ObjData.IsCollidable = true ObjData.TimerEventsAreRepeating = true ObjData.MovementSpeed = 10.0 --число от балды ObjData.TimeToReachMovementSpeed = 0.0 SetDetailObjectTimerEvent("bullet001", kEventMoveToPoint, 0, "wfRefPointSheepDip") но если выполнить SetDetailObjectTimerEvent во время хода, игра вроде как вылетит. также как и спавн ящика. мб я накосячил во время теста этих функций, но маловероятно.
|
|
|
|
Сообщений: 3813
|
Опубликовано: 20.12.2015, 23:24:31
4erveR, вообще штука интересная и можно много штук классных сделал. Пусть для платформ движимых не очень подходит... но можно например двери разъезжающиеся делать, либо платформы быстро спаунить из воды подъемные... много что можно придумать)
Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005) Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007) Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)
mod.worms.pro - мод Worms Renewation для Worms4
|
|
|
|
Сообщений: 317
|
Опубликовано: 23.12.2015, 23:20:47
А на W4M такое уже было? Если нет, то легко ли будет сделать смотря на этот скрипт?
|
|
|
|
Сообщений: 1511
|
Опубликовано: 23.12.2015, 23:22:32
Emishka_Roper, там вроде как нет возможности перемещать детейлы
|
|
|
|