Murashka, если настолько нужно -- изучай TEXTURES. Простейший случай без Slade'а и других -- создаёшь текстовый файл "TEXTURES" и пихаешь в него такой синтаксис:
Все патчи (обычные картинки, например, *.PNG, что в Paint.net сделать можно) кладёшь в папку "graphics" и сжимаешь ZIP-ом эту папку, твой WAD и "TEXTURES". После переименовываешь *.ZIP в *.PK3.
Возможно ли для класса DECORATE "Inventory"/"CustomInventory" сделать при переполнении (достижения лимита "Inventory.MaxAmount") переход итема в следующий слот, например, как в Minecraft'е? Или только костылями -- типа такого ужаса:
Actor StoneBlockItem_Stack1: CustomInventory
{
Inventory.MaxAmount 64
States
{
<...>
Pickup:
TNT1 A 0 A_JumpIfInventory( "StoneBlockItem_Stack2", 0, 4 )
TNT1 A 0 A_JumpIfInventory( "StoneBlockItem_Stack1", 0, 2 )
TNT1 A 0 A_GiveInventory( "StoneBlockItem_Stack1" )
TNT1 A 0 A_GiveInventory( "StoneBlockItem_Stack2" )
TNT1 A 0 A_GiveInventory( "StoneBlockItem_Stack3" )
}
}
Actor StoneBlockItem_Stack2: Actor StoneBlockItem_Stack1
{ }
А также: возможно ли штатными методами DECORATE'а ограничить вместимость инвентаря игрока? Или тоже придётся делать итем, который считает количество разных типов вещей в инвентаре?
P. S.: "ZScript" не предлагать! ACS можно, но нежелательно.
Возможно ли для класса DECORATE "Inventory"/"CustomInventory" сделать при переполнении (достижения лимита "Inventory.MaxAmount") переход итема в следующий слот, например, как в Minecraft'е? Или только костылями -- типа такого ужаса:
Скорее да.
Вот кусок текста, в котором реализован подобный прыжок:
Скрытый текст:
Actor MediKit1 : CustomInventory replaces medikit // Тут я заменил стандартную аптечку(вы же можете делать вещь с 0, т.е. без замены оригинальных..)
{//Тут прописываем проперти актора в принципе любые возможные, но кроме флажка +INVBAR, его писать не надо, будут баги.
+HUBPOWER-AUTOACTIVATE
Inventory.InterHubAmount 5
Inventory.MaxAmount 5
Inventory.Amount 1
States
{
Spawn://Тут все как обычно... Картинка вещи когда она на полу..
MEDI A -1
Stop
PickUp:
TNT1 A 1 A_JumpIfInventory("MediKit1",1,"PickUpContinue")//Если вещь уже есть в инвентаре, добавится в слот который уже занимает, перепрыгивая вычисления ниже.
TNT1 A 1 A_JumpIf(CallACS("IfFullInventory")==True,"InventoryFull")//Если инвентарь забит, прыгнет в стейт InventoryFull и не подберётся с пола т.к. в том стейте нет функции типа A_RailWait
TNT1 A 1 A_GiveInventory("SlotMedikit",CallACS("CheckEmptySlot"))//Даёт доп. актора SlotMedikit, в кол. равному слоту в который вещь положилась, т.е. если вещь в 4 слоте, то доп. актор SlotMedikit будет равен 4.
PickUpContinue://Если вещь уже есть, перепрыгнет все вычисления и попадёт сюда
TNT1 A 1 A_RailWait //Эту функцию не трогаем, она нужна для поднятия вещи
Stop
Use:
TNT1 A 1 A_GiveInventory("MediKit",1)//Все что будет делать вещь прописываем тут!!! до A_RailWait, тик лучше пусть будет 1.. оно все равно не реагирует, хоть 9999 напишите, выполнится за 0 тик..
TNT1 A 1 A_RailWait//Лучше не трогаем.
Stop
InventoryFull://Сюда прыгаем если инвентарь забит!!
TNT1 A 1 A_PrintBold("Inventory full!")//Тут уже вы пишите чё хотите.
Stop
}
}
Если я тебя не так понял, то попробую понять по другому В декоерйте можно делать так :
TNT1 A 0 A_JumpIf(CountInv("MyItem") >= 0, "JumpState")
/*Т.е. проверяем наличие предмета у активатора (если надо у игрока, то пишемCountInv("MyItem", AAPTR_PLAYER1)//или можно таргет написать..*/
Еще можно так попробовать, но надо тестить, прыжки в анонимных функциях декорейта реализованы через жопу и придется подбирать рабочий.
native static bool S_ChangeMusic(String music_name, int order = 0, bool looping = true, bool force = false);
И то, и то юзабельно из любого объекта.
JSO x:
P. S.: "ZScript" не предлагать!
А можно предложу? Там даже свой инвентарь накодить можно, с вместимостью и всем остальным
Хватит уже за 2010 держаться с ацсом ) Хотя если "желательно декор" и даже ацс нежелателен, то вообще жесть.
А можно предложу? Там даже свой инвентарь накодить можно, с вместимостью и всем остальны
Может, какой-нибудь вад-пример сделаешь? Я лично всегда ковырял другие вады, так и учился... Эх, какие были времена....
А то вот мне как бы совсем непонятно, куда вот эти строки писать?
Я вот хотел написать лично для себя банальный мод, который включает определенную музыку при поднятии артефакта, который дает игроку PowerStrength, причем именно любой артефакт, не затрагивая оригинальный думовский берсерк никаким образом. Декорейтом такое уже не провернешь, потому что никакой актер не должен замещаться, а в АЦС у меня не работает. В ЗСкрипте я понятия не имею, как сделать такую проверку наподобие АЦС. Получается обращение от игры к актеру-игроку или как-то так. Мои знания в ЗСкрипте пока ограничились переносом декорейта на него
При запуске конвершена Wolfenstein 3D TC, в порте GZDoom, консоль выкидывает вот такие ошибки. В чём может быть проблема, может кто знает? С текстурой M_Skull1 - разобрался, но красный текст так и остался. Позодреваю, что это связано с инициализацией - M_Init: Init menus. Этот текст к этому понкту относится. В порте GZDoom, конечно ничего править не хочется, так как порты меняются а корвершен - нет. Надо в нём искать проблему.
А у меня вопросец..
Поставил я Actor Hits Floor на пол..
Актеру в настройках выставил 80 action т.е. запуск скрипта
Выбрал скрипт из выпадающего списка.. и он не работает когда гг упал на пол!!!
Скрипт который должен был запуститься, находиться в моей библиотеке, которая запускается в LOADACS, для тестов еще и подключил эту либу к скриптам карты (по F10 которые..)
Если запускать скрипт который прописан на карте где находится этот хитбокс Actor Hits Floor, т.е. по нажатию F10, тогда все ок работает.
Отсюда вопрос, это нормальное поведение или это БАГ "Actor Hits Floor" ?
Просто мне надо что бы я 1 раз написал скрипт у себя в либе и "Actor Hits Floor" его запускал когда ГГ касается пола, иначе как-то не весело на 20+ картах прописывать один и тот же скрипт.
В идеале мне бы модифицировать такую штуку как sector damage > instant death в настройках сектора, если это возможно, пока что не углублялся, может кто что подскажет дельное?
Каким образом делается прозрачная дверь в здуме? Формат UDMF, стандартные параметры(которые по прозрачности) линий не работают. У текстуры как была чёрная прозрачность, так и остаётся.
LEX SAFONOV Смотря какая. Есть 3д секторами (правда такую дверь можно только открыть и не дай бог что-то попадётся между зоной открытия или между деталями), или даже чистая модель, есть полиобъектные, был какой-то способ, который кажись приводил ZZYZX для ванили. Там вроде делали ванильную дверь с прозрачной текстурой (сейчас попробую поднять этот пост).
P.S: Ах да... точно. Забыл что поиск не работает...
P.P.S: А и ещё можно сделать через среднюю текстуру, написав скрипт поднятия офсета и снятия блокировки линии после активации скрипта и обратно. Обязательно делать задержки небольшие наверно, чтобы случайно скрипт не запороть.
Вот есть простой вариант, но он вряд ли заинтересует потому что он уж слишком простой и работает раз. Хотя если постараться...
Короче. Делаем сектор двери, как обычную дверь, а затем делаем прямо рядом с ним ещё сектор, высота которого гораздо выше. И подымаем этот сектор на столько, сколько хотите поднять текстуру. На стыке линий делаем mid текстуру и в свойствах ставим галочку walkable middle texture или что-то вроде того. Дальше ставим сектору двери таг как обычно, и на линии активации делаем поднятие сектора на нужную высоту. Можно сделать вроде поднятие и опускание через ACS, так как я реально не помню есть ли просто такая линия. Вот-так-вот это выглядит:
На зелёной линии и MID текстура (забыл указать на скрине)
Баг нодбилдера. Поставить точку на одной из границ аномалии, или чуть-чуть поменять расположение, или нарисовать сектор с одинаковыми параметрами внутри.