1. Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.

    Скрыть объявление
  2. Пожалуйста, внимательно прочитайте правила раздела.
  3. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление

Помощь в освoении Mapster32 и скриптов EDuke32, а также других его редакторов

Тема в разделе "Мастерская", создана пользователем LipSheZ, 27 дек 2007.

?

Играя в Duke Nukem, пробовали ли вы когда-нибудь редактировать его con-файлы?

  1. Да, конечно!

    51,5%
  2. Было несколько раз, но я в них ничего не понял(а), там всё так сложно...

    21,2%
  3. Нет, даже и не думал(а) об этом никогда.

    27,3%
  1. New Beast

    New Beast

    Регистрация:
    7 янв 2005
    Сообщения:
    21
    LipSheZ, насколько я знаю, те монстры, которые тебя ещё не заметили, не обсчитываются con-движком и не представляют собой actor'ы, следовательно, вообще недоступны через скрипты. Обойти это можно, только переписав код каждого врага под useractor notenemy и добавив там условие обнаружения (к примеру, чуча должна стоять на месте, пока её не обнаружит игрок). И про команду sleeptime 0 не забывать - это заставит акторы работать непрерывно.

    А SKYTOWN я когда-то начал разрабатывать как модификацию Дюка с полной заменой оружия, интерфейса, инвентаря. Но в связи с малым на то время развитием порта Eduke32 и неполнотой документации, проект заморозил. Теперь думаю делать заново под новым названием и с новыми идеями и приоритетами; хочу сделать вариант менее акрадный, с элементами RTS.

    Ну да, типа того)
     
    LipSheZ нравится это.
  2. LipSheZ Пахан

    LipSheZ

    Регистрация:
    1 окт 2007
    Сообщения:
    908
    Как же без неё? Мы же говорим о самонаводящейся ракете, как тогда обойтись без FINDNEARACTOR(VAR)/FINDNEARSPRITE(VAR) и как менять всё-таки траекторию движения проджектайла?

    Исправленный код HS
     
    Последнее редактирование: 7 мар 2008
  3. New Beast

    New Beast

    Регистрация:
    7 янв 2005
    Сообщения:
    21
    От прожектайлов я бы всё-таки отказался - глючные они... Короче при выстреле генерим возле игрока нормальный актор, и загоняем в него индекс цели (в per-actor переменную), если цель уже обнаружена. А находит её уже игрок (APLAYER), в его коде периодически обходятся все монстры на карте, проверяется их местоположение (цель должна находиться возле прицела), проверяется видимость. Ракету двигаем через псевдофизику, храня в отдельных переменных скорость движения по трём координатам, вращения и углы ориентации (дискретность в 1/2048 оборота для таких целей великовата). Изначальная скорость наследуется у игрока. На ракету постоянно действует тяга движка, сила тяжести и стабилизирующее лобовое воздушное сопротивление, вместе формирующие ускорение.
     
    LipSheZ нравится это.
  4. LipSheZ Пахан

    LipSheZ

    Регистрация:
    1 окт 2007
    Сообщения:
    908
    Ракета будет наводиться на монстра, если перед выстрелом на него навести crosshair (и какое-то время держать на нём) - это ты хочешь сказать? Слушай, ты когда-нибудь играл в ShadowWarrior, знаешь как работают там самонаводки? Так вот, я хочу сделать нечто подобное, только проджектайл у меня будет воксельный и "криволетящий", т. е. слегка меняющий направление ежемилисекундно до того момента, когда она оказывается достаточно близко до какого-нибудь монстра, после чего траектория её плавно меняется в сторону монстра, к которому она только что подлетела на заданное количествово BU. Независимо от того, навёл я прицел на чувака или смотрю вообще в противоположную от него сторону, ракета должна будет полететь к нему, но только в том случае, если верны два условия: дистанция между ними меньше, скажем, 5000 BU - это раз; и то, что монстр не находится за каким-либо препятствием, например, за стеной или здоровенной каменной плитой - это два. C обозначением в CON'ах первого из этих двух условий я справился. Но вот как же, чёрт побери, объяснить игре, есть ли монстры в открытом пространстве по прямым линиям, условно проведённым одновременно во все стороны (насколько это возможно - во все), или всё чисто? Причём каждый миг проджектайл должен будет вновь пускать по сторонам эти "линии", ибо координаты его непрерывно меняются. Но как только одна из "линий" говорит проджектайлу: "Э-э, гляди-ка, вон-а я кое-кого обнаружила! Лети немедленно туда!" (это возможно при том, что расстояние между пр. и монстром достаточно маленькое), ракета тут же начинает поворачиваться боеголовкой в чудака, которого засенсерили эти "линии". Просто я никак иначе этот алгоритм себе не представляю... Причём тут сканирование по центру экрана?
    Да? Не замечал этого пока.

    Да, мне, кстати, тут удалось заскриптовать ещё один выпендрос с ракетами. Управляется такая ракета самим игроком. Примерно это выглядит так:

    Код:
    gamevar aplayer_ang 0 0
    gamevar proj_zvel 0 0
    gamevar picnum 0 0
    
    state rocketcontrol
    setactor[THISACTOR].ang aplayer_ang
    getplayer[THISACTOR].horiz proj_zvel
    subvar proj_zvel 100
    mulvar proj_zvel -55
    setactor[THISACTOR].zvel proj_zvel
    ends
    
    onevent EVENT_GAME
    getactor[THISACTOR].picnum picnum
    switch picnum
    case RPG state rocketcontrol break
    endswitch
    endevent
    
    onevent EVENT_EGS
    getactor[THISACTOR].picnum picnum
    switch picnum
    case RPG setactor[THISACTOR].zvel proj_zvel break
    endswitch
    endevent
    
     
  5. New Beast

    New Beast

    Регистрация:
    7 янв 2005
    Сообщения:
    21
    Это уже патруль какой-то, а не ракета. Пусть тогда лучше летает и из пулемёта всех мочит. В SW играл, по-моему обычные самонаводки...

    Ну почему во все... я ж сказал - линии пускаем только в монстров. Углы вычисляем через тригонометрию. Если в результате получаем монстра, в которого пускали, значит мы его видим и можем мочить.

    Можно и как редимер из Unreal Tournament сделать) В альтернативном режиме огня управляешь ракетой и видишь тоже от неё. Только для псевдо-3D Дюка это мало подходит.
     
    Последнее редактирование: 7 мар 2008
    LipSheZ нравится это.
  6. LipSheZ Пахан

    LipSheZ

    Регистрация:
    1 окт 2007
    Сообщения:
    908
    Значит ли это, что этого невозможно сделать с проджами?
    Хе-хе! Это ты забавно про пулемёт сказал, спасибо за хорошее настроение! :rofl: На самом деле я для начала хочу сделать самую обыкновенную самонаводку, а потом уже можно и украсить, и дымок погуще нарисовать, и углы рэндомизировать. Сперва надо добиться, чтобы она была похожа на... хотя бы на heat-seeker из SW. Потом я придумаю вариации и разукрашу всё по-своему. Но это потом. Насчёт патруля ни юмора, ни логики я не понял. Тебя, наверное, смутила фраза "траектория плавно меняется", или что? Я говорил, что если она будет направляться на врага идеально точно и мгновенно, то монстр не сможет от неё увернуться. Весь кайф - это наблюдать за монстром, который, завидев ракету, в панике мечется по сторонам, туда-сюда, то назад, то вперёд, и ты видишь как она лениво и очень плавно повторяет в полёте его манёвры. Я это проверял, я сравнивал два варианта - когда ракета сразу точно направляется в торс чувака и когда плавно менят angle в его сторону, - поэтому-то и решил сделать "постепеннонаправляющуюся" ракету, как описано во втором варианте... И ещё: по-моему, в SW брать врага под прицел за несколько секунд перед выстрелом было совсем не обязательно. А вот в Unreal был как раз такой ракетомёт, назывался он EightballGun'ом. Для того, чтобы ракеты наводились на монстров, надо было просто подержать прицел на ком-нибудь из них, а после звукового сигнала "пи-и-ип!" можно было стрелять самонаводиловками. New Beast, я явно что-то недопонимаю, но ты мог бы очень многое прояснить, ответив на два на три таких вопроса:
    1. То, что ты предлагаешь, будет похоже на EightballGun в плане поведения ракет или нет? Да или нет? Это ключевой момент, который, для того, чтобы я понял суть, надо прояснить.
    2. Наводить прицел на урода надо перед тем, как стреляешь, или после? Или не надо вообще?
    3. От позиции (x, y, z) какого актора нужно сканить - APLAYER'а или проджектайла.
    Я просто пока не вижу сути, не представляю себе последовательно алгоритма, потому и вынужден несколько раз переспрашивать.
    Да-с, это будет некрасиво, представляю. "Спасителя" в Дюке не будет. По крайней мере в RS - точно. Пока я задумал что-то вроде ретёрн-ту-на-пали'вского (пардон...) RocketLauncher'а при AltFire.

    New Beast, пожалуйста, ответь на мой "ключевой" вопрос. Это сверхважно.

    Всё же у меня в голове возникла такая последовательность, не знаю, правильная ли она:

    1. Берём в руки ракетомёт.
    2. Наводим crosshair на чувака. В это время в левом верхнем углу экрана видим цисло, которому соответствует <sprite id> данного монстра. Я специально сделал так, чтобы можно было видеть номер монстра, находящегося под прицелом.
      Код:
      onevent EVENT_GAME
      getactor[THISACTOR].picnum picnum
      switch picnum
      getactor[THISACTOR].x x
      getactor[THISACTOR].y y
      getactor[THISACTOR].z z
      getactor[THISACTOR].sectnum mysector
      getactor[THISACTOR].ang angvar
      getactor[THISACTOR].zvel zvel
      getactor[THISACTOR].xvel xvel
      shiftvarl zvel 14
      ifvare xvel 0 setvar xvel 1
      divvarvar zvel xvel
      cos mycos angvar
      sin mysin angvar
      hitscan x y z mysector mycos mysin zvel hitsector hitwall [COLOR="Magenta"]hitsprite[/COLOR] hitx hity hitz 4294901808 // clipmask
      endswitch
      endevent
      
      onevent EVENT_DISPLAYREST
      digitalnumberz 3010 10 6 [COLOR="#ff00ff"]hitsprite[/COLOR] 0 0 0 ZERO ZERO xdim ydim 65536        
      endevent
      
    3. Переписываем номер <sprite id> этого монстра в ещё какую-нибудь пременную, назовём её temp. Это происходит в событии GAME, чтобы переменная temp была непостоянной. Стреляем самонаводиловкой.
    4. Дальше мы, изпользуя нужную для этого команду (какую мне пока не ясно), а также зная <sprite id> монстра, на которого смотрим, "просим" игру в CON'ах изменять angle ракеты так, чтобы она в процессе полёта глядела в его сторону.
    Вот такая вот последовательность, но это уже хоть какой-то логический стержень.
     
    Последнее редактирование: 8 мар 2008
  7. New Beast

    New Beast

    Регистрация:
    7 янв 2005
    Сообщения:
    21
    Да вроде можно, просто гемора много с наследованием движения, нормализацией скорости (вверх или вниз стреляешь - быстрее летит) и т. п... Но попробовать стоит.

    Полагаю, что да. Хотя принципиальной разницы нету. В случае с эйтболом сначала сканим от игрока, ловим монстра, а потом уже ведём к нему (и ни к какому другому) ракету. Во втором цель ищет ракета, и по идее может её в полёте менять.

    На правду похоже.

    Дык а getangle? Должно проканать.
     
    LipSheZ нравится это.
  8. LipSheZ Пахан

    LipSheZ

    Регистрация:
    1 окт 2007
    Сообщения:
    908
    Эх, чёрт, чего-то совсем тяжко. Кое-что я сделал, но это не даёт желаемого результата...

    Код:
    actor APLAYER
    getactor[THISACTOR].x x
    getactor[THISACTOR].y y
    getactor[THISACTOR].z z
    getactor[THISACTOR].sectnum mysector
    getactor[THISACTOR].ang angvar
    getactor[THISACTOR].zvel zvel
    getactor[THISACTOR].xvel xvel
    shiftvarl zvel 14
    ifvare xvel 0 setvar xvel 1
    divvarvar zvel xvel
    cos mycos angvar
    sin mysin angvar
    hitscan x y z mysector mycos mysin zvel hitsector hitwall hitsprite1 hitx hity hitz 2147418160 
    enda
    
    onevent EVENT_EGS
    getactor[THISACTOR].picnum
    switch picnum
    case RPG setvarvar target_id hitsector break
    endswitch
    endevent
    
    onevent EVENT_GAME
    getactor[THISACTOR].picnum
    switch picnum
    case RPG
    getactor[target_id].x MX
    getactor[target_id].y MY
    getactor[target_id].extra enemyextra
    getactor[THISACTOR].x x
    getactor[THISACTOR].y y
    getactor[THISACTOR].ang angproj
    subvarvar MX x
    subvarvar MY y
    getangle ANGVAR MX MY
    ifvarl angproj 0 setvar angproj 2047
    ifvarg angproj 2047 setvar angproj 0
    setvarvar angproj1 angproj
    setvarvar ANGVAR1 ANGVAR
    ifvarvarl ANGVAR angproj 
    {
      subvarvar angproj1 ANGVAR1
      ifvarg angproj1 1024 addvar angproj 52
      else ifvarl angproj1 1024 subvar angproj 52
      setactor[THISACTOR].ang angproj
    }
    else ifvarvarl angproj ANGVAR 
    {
      subvarvar ANGVAR1 angproj1
      ifvarg ANGVAR1 1024 subvar angproj 52
      else ifvarl ANGVAR1 1024 addvar angproj 52
      setactor[THISACTOR].ang angproj
    }
    ldist TEMP THISACTOR target_id
    getactor[THISACTOR].z TEMP2
    addvar TEMP2 6192
    getactor[target_id].z TEMP3
    subvarvar TEMP3 TEMP2
    shiftvarl TEMP3 8
    divvarvar TEMP3 TEMP
    getactor[THISACTOR].zvel zdistproj
    ifvarvarl zdistproj TEMP3 addvar zdistproj 356
    else ifvarvarg zdistproj TEMP3 subvar zdistproj 356
    setactor[THISACTOR].zvel zdistproj
    break
    endswitch
    endevent
    
    onevent DISPLAYREST
    digitalnumberz 3010 10 6 hitsprite 0 0 0 ZERO ZERO xdim ydim 45536        
    digitalnumberz 3010 10 12 target_id 0 0 0 ZERO ZERO xdim ydim 45536        
    endevent
    // этот код без фильтрации монстров.
    
    Почему-то в момент выстрела target_id не приравнивается hitsprite'у, не смотря на то, что я в событии EVENT_EGS именно это и требовал. При наведении прицела на какого-нибудь дурака значение hitsprite'а меняется на дурацкое id, но после выстрела target_id остаётся неизменным. Проклятие!.. :banghead:
     
    Последнее редактирование: 9 мар 2008
  9. New Beast

    New Beast

    Регистрация:
    7 янв 2005
    Сообщения:
    21
    Я намедни поэкспериментировал - получилось сделать примитивное самонаведение... всех спрайтов в карте. Почти как полтергейст. У тебя не то что-то...

    Код:
    case RPG setvarvar target_id hitsector break
    Почему hitsector, если на спрайт наводим?

    Код:
    ifvarl angproj 0 setvar angproj 2047
    ifvarg angproj 2047 setvar angproj 0
    
    Вообще-то вроп так делается (будет лучше):
    Код:
    ifvarl angproj 0 addvar angproj 2048
    ifvarg angproj 2047 subvar angproj 2048
    
    Код:
    ifvarvarl ANGVAR angproj 
    {
      subvarvar angproj1 ANGVAR1
      ifvarg angproj1 1024 addvar angproj 52
      else ifvarl angproj1 1024 subvar angproj 52
      setactor[THISACTOR].ang angproj
    }
    else ifvarvarl angproj ANGVAR 
    {
      subvarvar ANGVAR1 angproj1
      ifvarg ANGVAR1 1024 subvar angproj 52
      else ifvarl ANGVAR1 1024 addvar angproj 52
      setactor[THISACTOR].ang angproj
    }
    Дублёж. Попробуй так:
    Код:
    subvarvar angproj1 ANGVAR1
    ifvarg angproj1 2048 subvar angproj1 2048
    ifvarl angproj1 -2047 addvar angproj1 2048
    ifvarg angproj1 52 addvar angproj 52 else
    ifvarl angproj1 -52 addvar angproj -52 else addvarvar angproj angproj1
    setactor[THISACTOR].ang angproj
    
     
  10. K.Alexey Ломающий стереотипы

    K.Alexey

    Регистрация:
    1 июн 2007
    Сообщения:
    970
    Nil,
    У тебя не спросил.
    И к чему это было сказано?

    Очень,очень надо,не поверишь.

    Это я и без вас знал.

    Закончим оффтоп на этом.

    По мне,лучше классический билд,нежели мапстер и прочие.Уж я к нему привык.
     
  11. LipSheZ Пахан

    LipSheZ

    Регистрация:
    1 окт 2007
    Сообщения:
    908
    Мэпстер лучше Билда по многим параметрам. Хотя бы только поэтому можно отказаться от билда и привыкать к M32. Тем более, что Мэпстер - это и есть то же самый Билд, но в него добавлена куча всего нового...
    Ну наконец-то я справился с этой задачей, ф-уф! Оказалось, что мне не хватало одной только команды - canseespr. Я вчера тщательно ещё раз просмотрел список всех операторов на WIKI и нашёл там нужное решение. А всё-таки findnearactor не оказалась лишней. Точнее, я юзал findnearactor3d.

    Код (без объявы переменных):

    state heatseekcode
    ifvarn target_id -1
    {
    canseespr THISACTOR target_id see
    ifvare see YES
    {
    getactor[target_id].x MX
    getactor[target_id].y MY
    getactor[target_id].extra enemyextra
    getactor[THISACTOR].x x
    getactor[THISACTOR].y y
    getactor[THISACTOR].ang angproj
    ifvarg enemyextra 0
    {
    subvarvar MX x
    subvarvar MY y
    getangle ANGVAR MX MY
    ifvarl angproj 0 addvar angproj 2047
    ifvarg angproj 2048 subvar angproj 2047
    setvarvar angproj1 angproj
    setvarvar ANGVAR1 ANGVAR
    ifvarvarl ANGVAR angproj
    subvarvar angproj1 ANGVAR1
    ifvarvarl ANGVAR angproj
    {
    subvarvar angproj1 ANGVAR1
    ifvarg angproj1 1024 addvar angproj 32
    else ifvarl angproj1 1024 subvar angproj 32
    setactor[THISACTOR].ang angproj
    }
    else ifvarvarl angproj ANGVAR
    {
    subvarvar ANGVAR1 angproj1
    ifvarg ANGVAR1 1024 subvar angproj 32
    else ifvarl ANGVAR1 1024 addvar angproj 32
    setactor[THISACTOR].ang angproj
    }
    ldist TEMP THISACTOR target_id
    getactor[THISACTOR].z TEMP2
    addvar TEMP2 6192
    getactor[target_id].z TEMP3
    subvarvar TEMP3 TEMP2
    shiftvarl TEMP3 8
    divvarvar TEMP3 TEMP
    getactor[THISACTOR].zvel zdistproj
    ifvarvarl zdistproj TEMP3 addvar zdistproj 356
    else ifvarvarg zdistproj TEMP3 subvar zdistproj 356
    setactor[THISACTOR].zvel zdistproj
    }
    }
    }
    ends

    onevent EVENT_GAME
    getactor[THISACTOR].picnum picnum
    switch picnum
    case HEATSEEKROCKET // это проджектайл самонаводящейся ракеты
    getactor[THISACTOR].x x
    getactor[THISACTOR].y y
    getactor[THISACTOR].ang angproj
    ifvarg enemyextra 0
    subvarvar MX x
    subvarvar MY y
    getangle ANGVAR MX MY
    ifvarl angproj 0 setvar angproj 2048
    ifvarg angproj 2048 setvar angproj 0
    ifrnd 20 addvar angproj 24
    else ifrnd 20 subvar angproj 24
    setactor[THISACTOR].ang angproj
    getactor[THISACTOR].zvel zdistproj
    ifrnd 20 addvar zdistproj 280
    else ifrnd 20 subvar zdistproj 280
    setactor[THISACTOR].zvel zdistproj
    findnearsprite3d PIGCOP 5000 target_id state heatseekcode
    findnearsprite3d SHARK 5000 target_id state heatseekcode
    findnearsprite3d PIGCOPSTAYPUT 5000 target_id state heatseekcode
    findnearsprite3d LIZTROOP 5000 target_id state heatseekcode
    findnearsprite3d LIZMAN 5000 target_id state heatseekcode
    findnearsprite3d LIZMANSTAYPUT 5000 target_id state heatseekcode
    findnearsprite3d COMMANDER 5000 target_id state heatseekcode
    findnearsprite3d COMMANDERSTAYPUT 5000 target_id state heatseekcode
    findnearsprite3d OCTABRAIN 5000 target_id state heatseekcode
    findnearsprite3d OCTABRAINSTAYPUT 5000 target_id state heatseekcode
    findnearsprite3d ROTATEGUN 5000 target_id state heatseekcode
    findnearsprite3d RECON 5000 target_id state heatseekcode
    findnearsprite3d TANK 5000 target_id state heatseekcode
    findnearsprite3d BOSS1 5000 target_id state heatseekcode
    findnearsprite3d BOSS2 5000 target_id state heatseekcode
    findnearsprite3d BOSS4 5000 target_id state heatseekcode
    findnearsprite3d 10841 5000 target_id state heatseekcode
    findnearsprite3d 11007 5000 target_id state heatseekcode
    findnearsprite3d 11519 5000 target_id state heatseekcode
    findnearsprite3d 9323 5000 target_id state heatseekcode
    findnearsprite3d 9869 5000 target_id state heatseekcode
    findnearsprite3d 2759 5000 target_id state heatseekcode
    findnearsprite3d 2761 5000 target_id state heatseekcode
    findnearsprite3d 4985 5000 target_id state heatseekcode
    findnearsprite3d 7719 5000 target_id state heatseekcode
    findnearsprite3d 7935 5000 target_id state heatseekcode
    findnearsprite3d PREDATOR 5000 target_id state heatseekcode
    findnearsprite3d POLICEMAN 5000 target_id state heatseekcode
    findnearsprite3d 10280 5000 target_id state heatseekcode
    findnearsprite3d 9850 5000 target_id state heatseekcode
    findnearsprite3d 10510 5000 target_id state heatseekcode
    break
    endswitch
    endevent
     
  12. K.Alexey Ломающий стереотипы

    K.Alexey

    Регистрация:
    1 июн 2007
    Сообщения:
    970
    LipSheZ, а мне и не нужны кучи всего нового из мапстера.Я делаю только классические карты.
     
  13. New Beast

    New Beast

    Регистрация:
    7 янв 2005
    Сообщения:
    21
    LipSheZ, угу, нормалёк. Листинг только под CODE суй, чтобы отступы сохранялись...

    Насчёт findnearsprite3d - твоя реализация правильно работать не будет, поскольку не учитывается расстояние до целей при поиске. Так, если танк будет 4096 единицах от ракеты а свинокоп - в непосредственной близости, ракета всё равно наведётся на танк. К тому же она жутко медленная и вполне может привести к халту. Лучше цикл юзай, расстояния через гипотенузу находи и запоминай минимальное в отдельной переменной.
     
  14. LipSheZ Пахан

    LipSheZ

    Регистрация:
    1 окт 2007
    Сообщения:
    908
    Гммм, а как насчёт findnearactor3d? С расстояниями в таком случае как будет?
    Близость по каким координатам?
    Странно, но я такого не замечал. Надо будет повнимательней проверить.
    Ракета, что ли, медленная? Халт?
    Я ещё раз попробую, но в прошлый раз у меня возникли сложности с LDIST- командой. Слушай, я не понимаю, она ведь id двух акоров рассматривает, или номера акторов? На Wiki написано, что акторов, но мне в это слабо верится, потому что я сам юзаю id для ldist'а. С hitscan'ом вообще какая-то бадяга, он видит спрайты только тогда, когда мой z больше z'дов сканируемых спрайтов. Может, дело в clipmask'е? Насчёт петли я понял, а вот с hitscan'ом до сих пор маюсь, чёрт побери (пардон)!
     
  15. New Beast

    New Beast

    Регистрация:
    7 янв 2005
    Сообщения:
    21
    Один хрен. Разница ведь в том, что findnearsprite и компания находят любые спрайты на карте (в т. ч. дрыхнущие акторы), а не только активные акторы. В твоём случае надо все спрайты обходить.

    Функции рода findnearsprite при каждом вызове обходят каждый спрайт в карте, что при многочисленных вызовах (к примеру если у тебя одновременно сто ракет будет) приведёт к снижению производительности. А халт рендера возникает, когда процессор не успевает обсчитать всё это безобразие 26 раз в секунду. Хотя не факт, что цикл с однократным обходом окажется намного быстрее. Но то, что он будет менее глючным и более гибким вполне очевидно.

    ээээ... ну ldist просто z-координаты не учитывает...

    В твоём случае походу действительно лучше canseespr юзать. С hitscan нужно ещё повыше брать, чтобы луч прошел по центру спрайта и учитывать прочие мелочи...
     
  16. LipSheZ Пахан

    LipSheZ

    Регистрация:
    1 окт 2007
    Сообщения:
    908
    Ладно, я это тогда оставлю для финальной версии RailSingle. В демке будут ракеты, код которых я представил двумя постами выше с файнднеарами. Некогда мне сейчас с hitscan'ом париться, есть ещё много других вещей, которыми сейчас я занимаюсь в своём RS. Да, кстати, я после запуска игры не вижу стартовых анимаций. Похоже, я где-то нечаянно (Бог знает когда) допустил ошибочку в скриптах, из-за которой после старта включается меню без анимаций. Что ты об этом думаешь, из-за чего так происходит?
     
  17. New Beast

    New Beast

    Регистрация:
    7 янв 2005
    Сообщения:
    21
    Ээээ... пропал доступ к anm'хам?
     
  18. LipSheZ Пахан

    LipSheZ

    Регистрация:
    1 окт 2007
    Сообщения:
    908
    Так это и так понятно, что доступ пропал. :) Я весь wiki перепахал, но ничего по этому вопросу дельного там не нашёл. Потом рересадил свой grp'шник в папку с AE con'ами, пустил гаму. С ними анимация заработала! Следовательно, дело в моих конах, где в них эта поганая ошибка я до сих пор не пойму.
     
  19. LipSheZ Пахан

    LipSheZ

    Регистрация:
    1 окт 2007
    Сообщения:
    908
    Так, я наконец разобрался с анимацией.
    Дело в том, что я когда-то давно вписал в один из con-файлов такую ахинею:
    Код:
    gamevar LOGO 0 0
    Эта переменная и блокировала анимацию. После того, как её убрал, всё заработало.
    Слушай, Макс, а в LEBuild'e можно вызвать список ло- и хай-тагов (при условии, что один/оба тага > 0) всех спрайтов кроме MUSICANDSFX, секторов и стен в загруженной карте? А заодно и координаты всех этих объектов, чтобы можно было каждый найти? Это очень важно, потому что в одной моей карте началась путаница с тагами, нужен способ быстро их найти и поменять. Есть такая возможность в LEBuild'e?
     
    Последнее редактирование: 19 мар 2008
  20. New Beast

    New Beast

    Регистрация:
    7 янв 2005
    Сообщения:
    21
    Ээээ... в каком плане вызвать? Полагаю, в твоём случае можно через поиск выбрать спрайты, имеющие нулевые таги и заморозить их, после чего они уже не будут мешаться на карте. А конкретнее, из-за чего путаница с тагами? Конфликты?
     
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление