Интересно, возможно ли такое извращение как запись прогресса в gzdoom.ini?
Представьте ситуацию: В кастомном отmenudefленном меню всего три параметра: START; Options; Quit //как видно отсутствуют SAVE/LOAD, правда существуют F2 и F3, но сейчас вопрос не в этом.
Игрок жмет Старт - начинается уровень. Игрок доходит до чекпоинта и сей факт записывается в .ini примерно так
Интересно, возможно ли такое извращение как запись прогресса в gzdoom.ini?
Представьте ситуацию: В кастомном отmenudefленном меню всего три параметра: START; Options; Quit //как видно отсутствуют SAVE/LOAD, правда существуют F2 и F3, но сейчас вопрос не в этом.
Игрок жмет Старт - начинается уровень. Игрок доходит до чекпоинта и сей факт записывается в .ini примерно так
Кажется и так можно автосохранением пользоваться в куче с к примеру CVAR которые кстати записываются в ини файл по желанию.
т.е. пишешь в CVARINFO
server int checkpoint1 = 0;
Меняя команду в процессе игры, это дело сохраниться в .ini файл, как любые другие консольные переменные. (кстати оно же и легко выводиться в menudef если надо)
Наличие слова "server" иили "user" перед типом переменной, определяет будет ли эта переменная сбрасываться после смерти или нет.
т.е. ГГ в процессе игры, типа сохранился checkpoint1 = 1, умер и после смерти переменная может опять сброситься на 0, а может не сбрасываться если там server.
Zeberpal_98:
правда существуют F2 и F3, но сейчас вопрос не в этом.
И потом нажатие на кнопку f1-12 будет вызывать комманду vid_currentmode, отображение текущего разрешения экрана
Можно поискать другую команду..
Добавлено спустя 1 час 12 минут 59 секунд:
BlackMetalGuy:
Источником пламени должен быть игрок.Атака дистанционная, ибо игрок вооружён огнемётом.Пламя должно цепляться к противнику при прямом попадании и дамажить только игроков и мобов. Какую функцию выполняет A_Warp?
Могу тебе посоветовать поколупать вад в котором уже есть такой огнемет.. Думаю вряд ли кто-то захочет написать его за тебя.
A_Warp читаем zdoomwiki вкратце это именно та функция которая может закрепиться за актером и двигаться с его же скоростью на заданной высоте (похоже как атака у archvile, когда он огонь спавнит там где вражина.)
alekv Спасибо! Крайне полезный пост. Действительно параметр заносится в .ini
Я решил прописать в CVARINFO
server bool checkpoint1 = false;
Единственное, игра не реагирует на это, я что-то неправильно сделал.
//игровой скрипт
bool checkpoint1 = FALSE;
script 666 (void)
{
if(checkpoint1 == false)
{
print(s:"\cjCheckpoint act!vated."); //надпись в игре появляется, но сам параметр на [i]true[/i] в конфиге не поменялся
checkpoint1=TRUE;
}
}
// после "срабатывания" скрипта 666 я начинаю новую игру, жду секунд 5 и ничего не происходит
script 667 ENTER
{
if(checkpoint1 == true)
{
delay(130);
print(s:"\ciGame status loaded from the .ini! Yohoo!");
}
}
попытался сделать такое, ничего не вышло.
и в вики о лампе DEFAULTBIND ничего нет. нашел подозрительно похожий DEFBINDS, но и через него тоже ничего не работает
или это не ламп? в кейконфе тоже ведь есть дефултбайндс (их я тоже проверил )
или нужна гозза особая, потому что в обычной это все вырублено, чтобы всякие терривады никого не ломали?
попытался сделать такое, ничего не вышло.
и в вики о лампе DEFAULTBIND ничего нет. нашел подозрительно похожий DEFBINDS, но и через него тоже ничего не работает
или это не ламп? в кейконфе тоже ведь есть дефултбайндс (их я тоже проверил )
или нужна гозза особая, потому что в обычной это все вырублено, чтобы всякие терривады никого не ломали?
Не.. это я ошибся в названии лампа, создаешь его как и любой другой с именем "DEFBINDS"
и в нем все то и пишешь что выше описал, после возьми да сотри конфиг гоззы, и гозза перезапишет новый конфиг в котором уже будут твои бинды с этого лумпа.
Его же кстати можно использовать что бы назначать джойстику кнопки по умолчанию, но как-то оно через жопу работает из-за того что геймпадов как говна разных, особенно ноунеймов.
а можно перевести координаты ХУ, которые черные, в углы, которые красные?
наверняка же можно, а то я гуманитарий, я не пойму никак
Скрытый текст:
я просто без понятия как их связать иначе, чтобы актор, стоящий в центре квадрата, понимал, на какой угол ему быть повернутым в зависимости от значений Х и У
SomeNoob Через GZDB в свойствах контрольного сектора поставь тип, урон и интервал.
MyNameIs Нужно воспользоваться функцией atan2, в случае ZDoom ACS она называется VectorAngle.
В случае данной картинки ответом будет VectorAngle(x - 0.5, y - 0.5) * (256 / 2 / pi).
Anto96WS, функция A_CheckLOF идеально подходит для этого.
Ещё есть довольно интересная функция A_CheckBlock, но условие её работы лимитировано функциями движения типа А_Чейс.
Добавлено спустя 9 часов 26 минут 29 секунд:
Снова вопрос по спрайтам.
Имеется моб-актор со стандартными спрайтами. Оному нужно "приклеить" полупрозрачный оверлэй-эффект в виде зацикленной анимации (типа ауры) ко всем стэйтам актора. Просто "пришить" эффект к спрайтам в ФШопе не катит, поскольку эффект должен "жить сам по себе", т. е. никак не коррелироваться текущими стэйтами актора.
Тут товарищ рекомендовал, но сам не пробовал да и примеров использования на вики нет:
MyNameIs:
А как сшить две картинки я не знаю.
По идее, можно делать силой гоззы, через A_Overlay, потому что должно работать и у акторов,
This can be called by more than just the weapon; a player or CustomInventory item can also call this function.
Но я не пробовал
Собс-но вопрос: чем это можно сделать? Через A_Overlay или можно закрепить эффект как отдельный актор через связку A_SpawnItemEx(SXF_SETMASTER)+А_Warp(AAPTR_MASTER)?
Добавлено спустя 36 минут 42 секунды:
Да, и как можно задать такое поведение: для того чтобы прыгнуть к дистанционной атаке моб должен найти труп и "схавать" его. Т. е. как записать стэйт(ы) поиска и уничтожения ближайшего доступного трупа?
Оному нужно "приклеить" полупрозрачный оверлэй-эффект
Когда-то задавался таким же вопросом, да и сейчас тоже. Про A_Overlay не знал. сегодня помучаю эту функцию и посмотрю что выйдет.
Void Weaver:
Т. е. как записать стэйт(ы) поиска и уничтожения ближайшего доступного трупа?
Mein Костыль
Скрытый текст:
Движение к трупам:
Ставить трупам какой-либо один тег, дальше попытаться натравить на них монстра (через Thing_Hate?)
Если координаты цели и монстра почти совпадают, сделать что-либо с трупом (собсна съесть)
Отличить труп от живого монстра как-то так (ClassifyActor(target) & ACTOR_DEAD). Это уже через ACS
Добавлено спустя 12 минут 34 секунды:
Void Weaver:
Anto96WS, функция A_CheckLOF идеально подходит для этого.
А что сделать если нужно вызвать от объекта, причем объект дружественный\не монстр?
Да, и как можно задать такое поведение: для того чтобы прыгнуть к дистанционной атаке моб должен найти труп и "схавать" его. Т. е. как записать стэйт(ы) поиска и уничтожения ближайшего доступного трупа?
Природная трупоискалка: https://zdoom.org/wiki/A_VileChase Но на стейте "Heal" придётся мутить какой-то скрипт, чтобы труп исчез вместо того, чтобы восстать. Прямых переходов через поинтер на труп вроде нету, надо либо мутить переход через A_CheckLOF, либо стрелять от монстра особо лютым снарядом короткого действия, ремувящим любой объект с заданными характеристиками.
Про A_Overlay не знал. сегодня помучаю эту функцию и посмотрю что выйдет.
Отпишись если чо выйдет, а я тогда попробую через Варп.
Anto96WS:
А что сделать если нужно вызвать от объекта, причем объект дружественный\не монстр?
Да вроде функция достаточно гибкая - поведение в основном задаётся флагами и их сочетаниями. Например флаги CLOFF_JUMPFRIEND и\или CLOFF_JUMPNONHOSTILE заставят проверять наличие "друзей" между точками, тогда как CLOFF_SKIPFRIEND и\или CLOFF_SKIPNONHOSTILE исключат "друзей" из проверки.
Anto96WS:
Mein Костыль
Выглядит неплохо, но я бы предпочёл обойтись пока без скриптов, ибо не шарю в их синтаксисе.
Герр Смертоносец, первым делом как раз пришла мысль о ВайлЧейсе, но вот само действие (воскрешение) и маленький радиус поиска меня не устраивает. Мне нужно чтобы моб немедленно реагировал на наличие трупа в приличном радиусе - моб должен быть "заинтересован" захавать труп, ибо без "еды" он не сможет кинуть снаряд. И ЧекЛОФ тут тоже сомнителен.
Я тут прикинул (но не проверял ещё) а что если сделать так:
Скрытый текст:
ACTOR Regurgitator
{
SeeEmpty: \\Не может стрелять, ищет трупы
TNT1 A 0 A_JumpIfTargetInsideMeleeRange ("Melee")
ABCD A 1 A_Chase ("CorpseSearch")
Loop
SeeFull: \\Может стрелять
ABCD A 1 A_Chase ("Missile", "Melee")
Loop
Melee:
Goto SeeEmpty
CorpseSearch: \\Собс-но поиск трупов
ABCD A 1 A_CheckProximity ("SeeCorpseChase", "", 1024, 1, CPXF_DEADONLY|CPXF_SETMASTER|CPXF_CLOSEST) \\При обнаружении трупа делает ближайший своим мастером и идёт к нему... Или должен быть обязательно указан акторкласс?
Goto Melee \\Если трупов больше нет - идёт в рукопашку
SeeCorpseChase: \\Идёт вплотную к трупу
???
CorpseRemove: \\Ест труп
ABCD A 1 A_CustomMissile("CorpseRemoveR")
Goto SeeFull \\Труп съеден, теперь "на взводе"
Missile: \\После выстрела снова ищет труп
ABCD A 1 A_CustomMissile()
Goto SeeEmpty
}
ACTOR CorpseRemoveR: \\Собственно трупоудалялка
{
Death:
TNT1 A 0 A_Remove (AAPTR_MASTER) \\Удаляет мастер-труп... Или тут нужен другой указатель?
}
Навскидку, такой вариант может взлететь при доработке али нет?
Вот это слабое место. Здесь надо тестить, работает ли оно без указания акторкласса. Если не работает - значит всех потенциально сжираемых монстров надо делать наследием условного актора "NewMonster", искать именно его, а в флаги прописать CPXF_ANCESTOR.
Герр Смертоносец:
SeeCorpseChase: \\Идёт вплотную к трупу ???
В простейшем случае делаем A_FaceMaster и одновременно толкаем его в задницу отрицательным A_Recoil с очень малым значением. (Через каждые N секунд даём ему побродить с A_Wander рандомное число тактов на случай, если где-то застрянет.) Одновременно делаем проверки A_JumpIfMasterCloser на малый радиус, с него переход на CorpseRemove.
Void Weaver:
CorpseRemove: \\Ест труп ABCD A 1 A_CustomMissile("CorpseRemoveR")
Зачем отдельный снаряд пускать? Пусть сам A_Remove(AAPTR_MASTER) делает.