Автор | Сообщение |
+Ku6EPyXOBEPTKA+ = Major =
| | 2993 |
Doom Rate: 2.06 Posts quality: +1462 |
Отправлено: 06.07.23 02:48:33 | | | У кого-нибудь возникала проблема с str массивами в ACS, когда подтягиваются данные вообще откуда-то левые? Ситуация довольно интересная, но нифига не понятная: есть 2д массив с строчными данными, который прекрасно работает при "голом" запуске Zandronum (pre 3.2) и GZDoom (4.10.0) и все скриптовые свитчи реагируют как положено. Однако, стоит запихнуть моды, как массив начинает тянуть в себя кучу непонятных данных в виде строк, хотя все свитчи работают правильно. Поскольку основная функция перестаёт работать, осмелюсь предположить, что проблема именно в массиве, а не выводе данных на экран. Пока я не могу понять как вообще такое возможно. Мне кстати встречалось что-то подобное, когда моды просто отваливались при попытке запустить их с дополнительными паками.
Кстати, в заднепроходиуме интересная вещь наблюдалась. Использовался для отображения графики на экране HudMessage и SetFont, но из-за большого разрешения было решено выкинуть эту идею. Так вот, в момент бага массива у меня всплывало название используемого для графики файла даже после того, как все данные и упоминания о нём были удалены | |
|
2 |
1 |
7 |
|
|
| |
JSO x - 2nd Lieutenant -
| 1336 |
Doom Rate: 2.26 Posts quality: +726 |
Отправлено: 06.07.23 15:13:18 | | | Что за моды, вообще любые? Если "нет" -- то у меня будет очевидное предположение, что где-то в другой модификации используется такой же идентификатор -- такое же имя переменной. Насколько помню, ACS массив строк хранит как массив "указателей" (на деле чистые int) на таблицу строк.
+Ku6EPyXOBEPTKA+ пишет: | ак вот, в момент бага массива у меня всплывало название используемого для графики файла даже после того, как все данные и упоминания о нём были удалены |
Всё тот же вопрос -- какие сторонние модификации были задействованы. | |
|
2 |
7 |
1 |
|
|
| |
MyNameIs = 1st Lieutenant =
| 2054 |
Doom Rate: 2.04 Posts quality: +893 |
Отправлено: 06.07.23 18:14:14 | | | у меня вроде бы что-то похожее было, когда я писал код для визуальных новелл, и весь текст запихнул в массив
он вышел огромным, и иногда выводилась какая-то чушь вместо строк
и даже некоторые, никак не связанные с этим кодом, скрипты ломались с ошибкой P-code. иногда. а иногда ломались другие никак не связанные. | |
|
| |
+Ku6EPyXOBEPTKA+ = Major =
| | 2993 |
Doom Rate: 2.06 Posts quality: +1462 |
Отправлено: 06.07.23 18:35:23 | | | JSO x
Любые, от слова совсем. Например мой же хонте (хотя он вообще массивов не использует из-за чего мне выдаёт пустые строки). Совпадение идентификаторов точно отпадает. Я такие имена использую, что не думаю, что кто-то такой же е"!"*;%(ый найдётся. Может где-то в синтаксисе накосячено, но для чистоты эксперимента выдрал пример из вики и переписал по нему, а потом ещё разок перекидал всякие пробелы и табуляции, и переносы строк.
И самое главное, структура массива у меня не поехавшая. То есть переключатели работают правильно и видят массив как он есть. Просто данные берутся откуда-то вообще непонятно (напрочь игнорируя объявление). Может попробовать воткнуть объявление массива внутрь скрипта?. Но в любом случае это тупость.
EDIT1: Нет, только хуже стало, он перестал быть объявленным для других скриптов, при этом баг сохраняется.
UPDATE: Баг возникает именно при запуске совместно с любым вадом, который содержит ACS скрипты. Причём подмена данных происходит не только в массиве. Помните, ранее упоминалось про HudMessage. Так, вот, после разконсервирования скрипта и переделки его под вывод нужной мне (ручной ввод) строки текста, НЕОЖИДАННО!, стало выводить на экран какую-то хрень. И тут мне вспомнилось. В моде O.G.R Doom (здеть тема на форуме есть) была аналогичная ситуация, только там фатальней всё (порт просто зависал при попытке запустить с вадами, которые содержали ACS скрипты). И вот тут уже фантазия на тему что может быть таким упоротым заканчиваются. Надо попробовать очень древние порты поднять и посмотреть, была ли там такая проблема. | |
|
2 |
1 |
7 |
|
|
| |
JSO x - 2nd Lieutenant -
| 1336 |
Doom Rate: 2.26 Posts quality: +726 |
Отправлено: 07.07.23 00:23:27 | | | Для ACS существует консольная команда "globstr" (правда, только при компиляции движка в Debug-режиме. Если разбираешься в этом, советую попробовать). Также есть ещё "scriptstat", но она вряд ли что-то подходящее к твоей ситуации выдаст.
Ошибка есть сразу после входа на уровень или после каких-то действий? Как выглядит объявление массива строк (в т. ч. с модификаторами)? Какова длина массива и элементов в нём? Есть ли специальные и непечатаемые символы вроде 0x00? | |
|
2 |
7 |
1 |
|
|
| |
+Ku6EPyXOBEPTKA+ = Major =
| | 2993 |
Doom Rate: 2.06 Posts quality: +1462 |
Отправлено: 07.07.23 00:46:08 | | | JSO x
Короче, проблема не в массиве. Проблема в конфликте ACS модулей. Я целиком вырезаю объявление массива, но HudMessage по-прежнему выдаёт несуществующую строку. Совпадение названий вряд ли, опять же. Такое ощущение, что я что-то упускаю из вида, какую-то мелочь. | |
|
2 |
1 |
7 |
|
|
| |
JSO x - 2nd Lieutenant -
| 1336 |
Doom Rate: 2.26 Posts quality: +726 |
Отправлено: 07.07.23 13:33:21 | | | Проверь Autoexec на всякий случай (в *.ini-файле).
P. S.: маловероятно, конечно, но на что-то вроде ZScript/VavoomC не можешь составные части проекта перевести? | |
|
2 |
7 |
1 |
|
|
| |
+Ku6EPyXOBEPTKA+ = Major =
| | 2993 |
Doom Rate: 2.06 Posts quality: +1462 |
Отправлено: 07.07.23 15:45:27 | | | JSO x пишет: | P. S.: маловероятно, конечно, но на что-то вроде ZScript/VavoomC не можешь составные части проекта перевести? |
У меня поддержка зандры, поэтому зскрипт отпадает, а с вторым не работал, не думаю что есть возможности. Просто странность в том, что баг с подменой данных возникает, если одновременно запустить в любом виде скомпиленный скрипт (пк3, вад или просто каталогом) на карте с скриптами или с модом, где используются скрипты. Причём это происходит даже в 1.8 гозе и старых зандрах (причём чистых). АСС тоже пробовал разные.
Добавлено спустя 5 часов 43 минуты 9 секунд:
Я хочу приложиться башкой об стену. Я же говорил, что я пропустил что-то очень тупое и незначительное, но из-за чего всё по езде поехало. Короче, в тушке самого модуля ACS нужно прописывать #library "имя модуля" (ну точнее правильно говорить библиотека). Так давно не занимался этой фигнёй, что просто из головы выскочило это сделать. В любом случае, это не отменяет того факта, что все гозы начиная от 1.8 и заканчивая за 4.10 и вместе с ними заднепроходиумы вообще тупо игнорят, что библиотека не объявлена, но скрипты исполняются. Из-за этого происходит не терминация скрипта с ошибкой (точнее вообще фатал при запуске), как это должно быть, а вообще лютая дичь с подменой данных в массивах и любых манипуляциях с строчными данными.
Зато теперь есть проверка на недостающие спрайтики поворотов . |
Рейтинг сообщения: +2, отметил(и): JSO x, N00b |
|
2 |
1 |
7 |
|
|
| |
Michael63 Lieutenant Colonel
| 3860 |
Doom Rate: 2 Posts quality: +846 |
Отправлено: 09.07.23 00:43:26 | | | N00b пишет: | Присутствуют ли на карте порталы и полиобъекты? |
Нет.
N00b пишет: | На карте, с которой скриншот, это часто появляется или редко и при каких действиях? |
Довольно редко, а при каких действиях - я пока не заметил.
Рендерер - Hardware accelerated, если я правильно понимаю вопрос (могу ошибаться, т.к. я не глубокий знаток теории).
Про ошибки округления у меня мысль была (если так, то с этим, наверно, ничего не поделаешь).
В общем, я на этот мелкий баг пока забил (как и на ещё один, про который даже не писал). Надеюсь, за лето закончу свой мегавад и выложу его для финальных правок. Тогда можно будет всё посмотреть, поиграть, и, может быть, будет ясно, как исправить. |
Рейтинг сообщения: +1, отметил(и): N00b |
|
1 |
1 |
2 |
|
|
| |
Michael63 Lieutenant Colonel
| 3860 |
Doom Rate: 2 Posts quality: +846 |
Отправлено: 20.07.23 22:22:10 | | | Сделал очередные несколько секторов в своей карте, начал тестировать и вдруг обнаружил, что в двух новых секторах я внезапно прохожу сквозь стены. Обычные односторонние линии, которые по умолчанию impassable, и я этот флаг не снимал. Не пойму, что за фигня. Почему такое может быть? Пока единственная мысль, что где-то возникает переполнение оттого, что карта уже большая. Примерно: 2000+ секторов, 9000+ вершин, 12000+ линий (плюс означает, что чуть больше).
UPD: вот сколько их точно.
UPD2: сейчас мне удалось устранить баг, сделав карту более компактной. То есть, похоже, дело в размере карты. Конкретно, видимо, в максимальной разности координат далёких друг от друга вершин. |
|
|
1 |
1 |
2 |
|
|
| |
Michael63 Lieutenant Colonel
| 3860 |
Doom Rate: 2 Posts quality: +846 |
Отправлено: 30.07.23 00:19:35 | | | Как увеличить fallingdamage в одном отдельном взятом уровне мегавада, предназначенного для игры в GZDoom? Я просто прописал в mapinfo в описании соответствующего уровня команду fallingdamage. Урон при падении включился. Но оказывается, что при здоровье 100 и арморе 200 игрок падает с верхотуры и не разбивается (а надо, чтобы при падении он погибал даже с 200 здоровья и армора). Параметр урона при падении должен как-то настраиваться, но я не нашёл, как (если просто написать fallingdamage = 1000 - не работает). Остальную физику хочу оставить прежней, увеличить только урон. | |
|
1 |
1 |
2 |
|
|
| |
N00b Chief Petty Officer
| 922 |
Doom Rate: 2.15 Posts quality: +384 |
Отправлено: 30.07.23 09:41:51 | | | Проще будет повесить конкретно на эти сектора страйфовский special 115: Instant Death, чем возиться со стандартным уроном от падения, особенно если он по факту нужен только в этих секторах.
К сожалению, урон от падения тонко не настраивается, хотя через ZScript легко можно было бы определить свою функцию зависимости урона от скорости --- надо когда-нибудь попросить об этом Графа. На выбор даётся три типа урона, на странице zdoom.org/wiki/Falling_damage есть подробное описание. FallingDamage --- это хексеновский, то есть наиболее злой из трёх типов, и если и его не хватает, то этим методом больше ничего не сделать.
Но ещё можно попробовать написать свой урон от падения на ZScript вручную. Если это потребуется, можно обсудить в ЛС. |
Рейтинг сообщения: +1, отметил(и): JSO x |
|
| |
Michael63 Lieutenant Colonel
| 3860 |
Doom Rate: 2 Posts quality: +846 |
Отправлено: 30.07.23 11:43:18 | | | N00b, спасибо. Я забыл написать, что у меня формат Boom. Там, если я правильно понимаю, special 115 нет (если ввести вручную, показывает unknown effect). FallingDamage у меня работает не как хексеновский, а как ZDoom-овский. Если бы он работал как хексеновский, то, согласно тому графику, высоты падения должно было хватить, чтобы умереть с любым стартовым здоровьем. Нет, вру, может и как хексеновский. Пожалуй, обойдусь костлём - повешу на сектора special 16, чтобы он добивал. Кривовато, но я планирую вскоре закруглить работу с мегавадом, т.к. уже чутка перегорел, а надолго затягивать с ним не хочу. | |
|
1 |
1 |
2 |
|
|
| |
BeeWen Lieutenant Colonel
| | 3458 |
Doom Rate: 1.61 Posts quality: +860 |
Отправлено: 30.07.23 12:58:10 | | | Michael63 пишет: | а надо, чтобы при падении он погибал даже с 200 здоровья и армора |
Michael63 пишет: | у меня формат Boom |
В таком случае этот вопрос можно попытаться решить телепортируя куклу игрока на неё же. |
Рейтинг сообщения: +1, отметил(и): N00b |
|
1 |
1 |
1 |
|
|
| |
N00b Chief Petty Officer
| 922 |
Doom Rate: 2.15 Posts quality: +384 |
Отправлено: 30.07.23 13:04:08 | | | Точно, и я снова забыл про то, что это Boom. Всё равно предложу ньюскульный метод, который будет убивать игрока именно при столкновении с землёй. Если в мегаваде уже переопределён класс игрока и через ZScript, то можно добавить туда следующее:
override void PlayerLandedMakeGruntSound(Actor onmobj)
{
if (level.info.flags & (LEVEL_FALLDMG_ZD | LEVEL_FALLDMG_HX))
{
int threshold = -20;
// Console.Printf(vel.z..""); <- подгонка значения
if (vel.z <= threshold) { DamageMobj(self, self, 1000000, "Falling", DMG_FORCED | DMG_NO_FACTOR | DMG_FOILINVUL); return; }
}
Super.PlayerLandedMakeGruntSound(onmobj);
}
Это даст игроку падать без последствий только менее чем на 192 юнита (там скорость 20 получается), причём включается это только на картах с FallingDamage.
Если класс игрока есть, но в DECORATE, то могу помочь с переводом. | |
|
| |
Michael63 Lieutenant Colonel
| 3860 |
Doom Rate: 2 Posts quality: +846 |
Отправлено: 31.07.23 19:53:59 | | | Спасибо, но я пока никакой скриптинг в Думе не трогал. Соответственно, класс игрока не переопределён. А телепортировать куклу игрока на неё же можно, но для этого мне надо делать довольно много дополнительных линий, а выглядеть будет всё равно неестественно. Оставлю пока топорный вариант, когда при большом здоровье игрок не разбивается, но максимально сильная "радиация" его добивает. Мне сейчас лучше доделать уровни и нажать паузу (или даже резет), а то собственное здоровье начало прихрамывать. Надеюсь, скоро уже выложу, и тогда, как я уже говорил, мелкие детали типа вот этой можно будет коллективно допилить при желании. |
|
|
1 |
1 |
2 |
|
|
| |
JSO x - 2nd Lieutenant -
| 1336 |
Doom Rate: 2.26 Posts quality: +726 |
Отправлено: 31.07.23 22:19:59 | | | N00b пишет: | <...> то можно добавить туда следующее: |
Оно же на все поверхности будет действовать, а не только на тот сектор. Так что, по-моему, это немного не то, что нужно.
Я мог бы предложить то же самое делать через "LevelPostProcessor::SetSectorSpecial()". В особенности подойдёт, когда
Michael63 пишет: | <...> класс игрока не переопределён. |
Впервые этот метод появился в GZDoom g4.3.0 (искать "added generic level post-processing script class"). Стоит учитывать, если проект создаётся и под старые версии движка.
Второй вариант -- напрямую присвоить урон сектору (через "EventHandler::WorldLoaded()", например):
Sector sec = level.sectors[ 0 ];
sec.damageType = 'Falling';
sec.damageAmount = 0x7FFF;
sec.damageInterval = 1;
sec.leakyDamage = 0xFF; // Шанс игнорирования надетого антирадиационного костюма.
Впрочем, только что обнаружил, что же самое можно сделать и через ACS.
Michael63 пишет: | Надеюсь, скоро уже выложу, и тогда, как я уже говорил, мелкие детали типа вот этой можно будет коллективно допилить при желании. |
Хорошо, ждём! |
|
|
2 |
7 |
1 |
|
|
| |
camper = Master Sergeant =
| 472 |
Doom Rate: 1.45 Posts quality: +257 |
Отправлено: 17.08.23 22:39:49 | | | N00b пишет: | После этого нужно дать декорации номер (DoomEdNum), не совпадающий с этими (без этого можно будет только спаунить в игре её командой summon, а не ставить на карту). Вписать номер нужно после названия: |
Оказывается это работает для всего. Нашел готовые вещи (things) в репозитории realm667 https://www.realm667.com/en/repository-18489
Где-то вещи (things) помечены именно всеми теми номерами и ключами-комментариями, а где-то нет. Очень жаль, что нет еще общепризнанного дополнительного списка для дополняемых вещей. А то так поставишь номер, а оно оказывается уже занято кем-то.
Кроме того кажется удобным добавлять вещь целиком в сборе, вместе с ресурсами (скриптами, звуками, графикой), а не разбрасывать по папкам pk3. Голова идет кругом от этого. Так и хочется, чтобы в стандат pk3 добавили отделную папку things, с категориями monsers, mapobject (decorate карты, но не скрипты), pickup и т.д. |
|
|
| |
N00b Chief Petty Officer
| 922 |
Doom Rate: 2.15 Posts quality: +384 |
Отправлено: 18.08.23 11:09:18 | | | Это может вызвать проблемы только с совместимостью (при создании сборника из нескольких карт, например), и в таком списке нет смысла.
WADы из репозитория Realm667 можно добавлять прямо в корневую папку pk3. Но если их версия актора устраивает не полностью (хочется, к примеру, привести всех акторов более-менее к одному стилю), то придётся редактировать декорейт и ресурсы, каждый раз залезая в wad, а это ещё муторнее, чем один раз его распатронить по своим папкам. Вместо pk3 можно все ресурсы хранить в директории, которую упаковывать в pk3 только при релизе (с папками умеют работать и SLADE, и GZDoom). Так можно, например, одновременно строить карту в билдере и подгонять параметры акторов. А decorate можно разбить на несколько файлов и подключать их, примерно как в C: #include "monsters.txt" |
Рейтинг сообщения: +1, отметил(и): camper |
|
| |
Герр Смертоносец - Warrant Officer -
| 1043 |
Doom Rate: 1.38 Posts quality: +855 |
Отправлено: 18.08.23 18:56:43 | | | camper пишет: | Где-то вещи (things) помечены именно всеми теми номерами и ключами-комментариями, а где-то нет. Очень жаль, что нет еще общепризнанного дополнительного списка для дополняемых вещей. А то так поставишь номер, а оно оказывается уже занято кем-то. |
Общепризнанного списка нету и никогда не будет, ибо заниматься конечным арбитражом должна большая авторитетная коммерческая организация, которой это делать никогда не надоест. А она быстро скатится известно куда с кэнцеллингом и лутбоксами потому что кали-юга.
Для Hexen format/UDMF можно сделать универсальный customThingSpawner, спавнящий монстра в зависимости от arguments, в котором все возможные монстры и их подвиды будут вбиты на уровне Decorate заранее. В принципе это замена шила на мыло, но кому-то так может показаться удобнее.
camper пишет: | Кроме того кажется удобным добавлять вещь целиком в сборе, вместе с ресурсами (скриптами, звуками, графикой), а не разбрасывать по папкам pk3. Голова идет кругом от этого. Так и хочется, чтобы в стандат pk3 добавили отделную папку things, с категориями monsers, mapobject (decorate карты, но не скрипты), pickup и т.д. |
Это вечная проблема вообще любого кусочно-сборного контента. Компиляция в одну кучу требует уйму работы (и такую же уйму работы на выковыривание), рассовывание по кирпичикам порождает конфликты зависимостей и раздувание веса избыточным дублированием. Оптимальных решений здесь нет и не будет. |
Рейтинг сообщения: +1, отметил(и): camper |
|
5 |
|
|
| |