Ценные ссылки, спасибо. Правда, меня пока терзают сомнения, переходить ли на GZDoom, или остаться пока в ZDoom. У меня обычно так: чем навороченнее, тем дольше разбираться приходится.
Это лично твое дело.. я тебе с самого начала советовал переходить на гоззу, в целом GZDoom полностью поддерживает карты ZDoom, но не наоборот. В основном это из-за огл наверное..
Вот даже когда до кодов доберешься, если не надоест модинг, рано или позно начнешь кодить, там то и увидишь разницу. Здум лишен таких интересных фич как зеркальный пол, если делать все хайрез и на асфальте типо лужа.. ну капец как классно смотрится, A_SetRoll тоже гоззовская "фича", с ней можно более эффектно замутить геймплей, простые зеркала(непомню, но здум их не поддерживает?) там еще пара других возможностей, всех не припомнить. Выбор за тобой.
Michael63 :
Да, действительно, спасибо. А можно ли сделать так, чтобы по умолчанию он нигде не включался?
Могу только посоветовать редактировать ZDoom.ini, и в дальнейшем распространять его с модом. Конечно не удобно, но другого способа не нашел.
Michael63 :
Ведь вроде бы всё, что есть в ZDoom, есть и в GZDoom, поэтому в принципе такая конвертация возможна. Тогда я бы не парился и делал пока под ZDoom, а когда будет настроение/времени побольше, перешёл бы на GZDoom.
Повторю GZDoom полностью поддерживает ZDoom, все что сделаешь под ZDoom, нормально запустится в GZDoom, но не наоборот.
Артём :
У меня вылетает ГЗДум Билдер почему-то.
Это что из-за DamageFactor он перестал запускаться? О_О
Да, действительно, спасибо. А можно ли сделать так, чтобы по умолчанию он нигде не включался?
Только в настройках здума, но я крайне не советую этого делать, он создает какую-никакую иллюзию освещенности, без него все картонное, особенно в софте
Добавлено спустя 1 минуту 35 секунд:
alekv :
непомню, но здум их не поддерживает?
Есть, но они реализованы методом "пох на качество, главное быстро". Если перед зеркалом слишком маленький сектор, то получится бяка, а не зеркало
Таких кнопок по сути две - Shift и CapsLock. Их обе возможно выпилить из списка?
Да можно, но вариант не лучший.. capslock=toggle cl_run в конфиге гоззы на капслок прописать другое действие. Я вот только не знаю можно ли как-то свой конфиг запихнуть в вад или пк3 архив и что бы его считывала гозза... =(
Шифт убирается MENUDEF.
Я, да и не только я.. очень был бы рад если кто-то написал разрабу гоззы что бы он подумал или добавил возможность включать в моды свои GZDoom.ini, хотя бы для элементарной замены стандартных кнопок как постоянный бег, приседания.. Для меня загадка почему он не сделал этого раньше.. думм с помощью гоззы можно переделать почти как угодно, и способов чаще всего несколько, а вот элементарное изменение назначений клавиш ну вообще через жопу... да как и в целом весь menudef.
Добавлено спустя 16 часов 27 минут 43 секунды:
LEX SAFONOV :
Тааак, парни, есть вопросик по глобальным переменным в АЦС - не тем, которые объявляются в теле скрипта, а в самом начале.
Написал что то такое:
Вообщем сделал что то типа генератора случайной музыки на АЦС..... Так вот запарка вся в переменной FirstPlay . Запускаю уровень - вроде играет трек DFMUS01, перехожу на следующий уровень - опять его играет, перехожу опять - играет так же. Проверил - переменная почему то не обнуляется. Получается глобальные переменные каждый новый уровень выставляют дефолтное значение, которое установлено в начале? Это можно как то обойти?(Костыли с инвенториями не предлагать, я знаю что можно через них сделать).[/u]
Не давно смотрел SetUserCVar.. почему-то вспомнил про твой скрипт, возможно с помощью своей CVar можно что-то сделать? Тоесть что бы CVar хранила число, и ты его изменял в своем скрипте, так же помоему можно? Других вариантов перенести число с предыдущего уровня на новый я не нашел(не считая конечно inventory.InterHubAmount +HUBPOWER) Как правильно пользоваться CVar до сих пор не знаю, потому тут я не советчик, все не могу понять где она мне может понадобится что бы научиться
Добавлено спустя 28 минут 48 секунд:
LEX SAFONOV
Кстати.. если интересно, добавил я твой скрипт с вычислением дистанции, явно лучше работает чем мой старый, но решил я сделать что-то типо LOD, тоесть когда камера игрока не видит объект(в моем случае 3Дмодель морковки их на 1 уровне +-200шт.), то морковка переключает кадр на TNT1 A 1, гозза намертво повисла, пк тоже и через мин 3 только выскочила ошибка:
Execution could not continue.
Failed to allocate 80 bytes from process heap
Я так понимаю сделав так я превысил кол. вычислений в 1тик или чего-то там... Очень жаль что просто так такое не сделать(
А с A_JumpIfCloser() ничего подобного нет, даже не лагает...
Я так понимаю сделав так я превысил кол. вычислений в 1тик или чего-то там...
Пришли код)
alekv :
Не давно смотрел SetUserCVar.. почему-то вспомнил про твой скрипт, возможно с помощью своей CVar можно что-то сделать? Тоесть что бы CVar хранила число, и ты его изменял в своем скрипте, так же помоему можно? Других вариантов перенести число с предыдущего уровня на новый я не нашел(не считая конечно inventory.InterHubAmount +HUBPOWER) Как правильно пользоваться CVar до сих пор не знаю, потому тут я не советчик, все не могу понять где она мне может понадобится что бы научиться
Разобрался я с тем генератором. Вообщем если тебе будет интересно, да и не только тебе :
Как выяснилось позже - в АЦС есть несколько "типажей" глобальных переменных - простые(что в вопросе), для связей на картах(тип World) и работающие везде - тип Global.
Вот как я поменял "тип" у глобальной переменной:
global bool 1: FirstPlay;
global int 2: LatestMusic;
Такие переменные может сбросить только 2 случая - "новая игра" и "выход из игры".
Кому интересно и нужно, вот - http://zdoom.org/wiki/Scope
Там даже пример с картами есть(типаж World)
Разобрался я с тем генератором. Вообщем если тебе будет интересно, да и не только тебе :
Как выяснилось позже - в АЦС есть несколько "типажей" глобальных переменных - простые(что в вопросе), для связей на картах(тип World) и работающие везде - тип Global.
Вот как я поменял "тип" у глобальной переменной:
global bool 1: FirstPlay;
global int 2: LatestMusic;
Такие переменные может сбросить только 2 случая - "новая игра" и "выход из игры".
Кому интересно и нужно, вот - http://zdoom.org/wiki/Scope
http://zdoom.org/wiki/Scope
Там даже пример с картами есть(типаж World)
Решение в основах получается... Спасибо, буду знать, мне в дальнейшем это понадобится..
Я видел не раз эти Global.. но чего-то не въехал зачем они, да и интереса не было.
LEX SAFONOV :
Пришли код)
Да собственно вот.
Так выложить не смог.. половина кода пропадает почему-то
Я особо не парился над кодом морковки, просто добавил в конце See A_JumpIf(ACS_NamedExecuteWithResult("DistanceScript") > 2048, "Off") так чисто для проверки и получил то что писал выше хД таких морковок на уровне я даже посчитал почти все.. 300+ шт.
+Еще некоторые объекты используют такую проверку дистанции, но с ними проблем нет т.к. их не сильно много.
Вот код в acs:
Скрытый текст:
Script "DistanceScript" (int Distance)
{
Int Mob_X = GetActorX(0) >> 16;
Int Mob_Y = GetActorY(0) >> 16;
Int Mob_Z = GetActorZ(0) >> 16;
SetActivator(0,AAPTR_PLAYER1);
Int Play_X = (GetActorX(0) >> 16);
Int Play_Y = (GetActorY(0) >> 16);
Int Play_Z = (GetActorZ(0) >> 16);
Int X = Mob_X - Play_X;
Int Y = Mob_Y - Play_Y;
Int Z = Mob_Z - Play_Z;
D = sqrt(X*X + Y*Y + Z*Z);
SetResultValue(Distance);
}
Хотелось бы спросить - почему морковка является монстром? Мне кажется куда логичнее было бы основать её на CustomInventory. Это во первых.
Во вторых - у тебя крошит гоззу из-за бесконечных зацикливаний в коде.
Попробуй-ка вот такой код(переделал на CustomInventory):
Скрытый текст:
Actor Carrot : CustomInventory 10247
{//$Category Item
+Bright
+NOGRAVITY
+NOCLIP
+NOBLOOD
Height 10
Radius 10
Scale 0.25
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DistanceScript") > 2048, "Off")
MODL AAAAA 1 A_JumpIfInventory("MagnetItem",1,"Thrust")
MODL BBBBB 1 A_JumpIfInventory("MagnetItem",1,"Thrust")
MODL CCCCC 1 A_JumpIfInventory("MagnetItem",1,"Thrust")
MODL DDDDD 1 A_JumpIfInventory("MagnetItem",1,"Thrust")
MODL CCCCC 1 A_JumpIfInventory("MagnetItem",1,"Thrust")
MODL BBBBB 1 A_JumpIfInventory("MagnetItem",1,"Thrust")
Loop
SpawnOff:
TNT1 A 2
Goto Spawn
PickUp:
TNT1 A 0 A_SpawnItemEx("CarrotEff",0,0,0,4,0,4)
TNT1 A 0 A_SpawnItemEx("CarrotEff",0,0,0,Random(-4,4),Random(-4,4),Random(-4,4))
TNT1 A 0 A_SpawnItemEx("CarrotEff",0,0,0,-4,0,4)
TNT1 A 0 A_SpawnItemEx("CarrotEff",0,0,0,Random(-4,4),Random(-4,4),Random(-4,4))
TNT1 A 0 A_SpawnItemEx("CarrotEff",0,0,0,0,4,4)
TNT1 A 0 A_SpawnItemEx("CarrotEff",0,0,0,Random(-4,4),Random(-4,4),Random(-4,4))
TNT1 A 0 A_SpawnItemEx("CarrotEff",0,0,0,0,-4,4)
TNT1 A 0 A_SpawnItemEx("CarrotEff",0,0,0,Random(-4,4),Random(-4,4),Random(-4,4))
TNT1 A 0 A_SpawnItemEx("CarrotEff",0,0,0,-4,4,4)
TNT1 A 0 A_SpawnItemEx("CarrotEff",0,0,0,Random(-4,4),Random(-4,4),Random(-4,4))
TNT1 A 0 A_SpawnItemEx("CarrotEff",0,0,0,4,-4,-2)
TNT1 A 0 A_SpawnItemEx("CarrotEff",0,0,0,Random(-4,4),Random(-4,4),Random(-4,4))
TNT1 A 0 A_SpawnItemEx("CarrotEff",0,0,0,2,3,-2)
TNT1 A 0 A_SpawnItemEx("CarrotEff",0,0,0,Random(-4,4),Random(-4,4),Random(-4,4))
TNT1 A 0 A_SpawnItemEx("CarrotEff",0,0,0,2,-4,-2)
TNT1 A 0 A_SpawnItemEx("CarrotEff",0,0,0,Random(-4,4),Random(-4,4),Random(-4,4))
TNT1 A 0 A_SpawnItemEx("CarrotEff",0,0,0,4,3,3)
TNT1 A 0 A_SpawnItemEx("CarrotEff",0,0,0,Random(-4,4),Random(-4,4),Random(-4,4))
TNT1 A 0 A_RadiusGive("CarrotItem",100,RGF_PLAYERS,1)
TNT1 A 0 A_RadiusGive("ScoreCount",100,RGF_PLAYERS,5)
TNT1 A 0 A_SpawnItemEx("CarrotEff",0,0,0,4,-4,1)
TNT1 A 0 A_SpawnItemEx("CarrotEff",0,0,0,Random(-4,4),Random(-4,4),Random(-4,4))
TNT1 A 0 A_SpawnItemEx("CarrotEff",0,0,0,1,-2,-2)
TNT1 A 0 A_SpawnItemEx("CarrotEff",0,0,0,Random(-4,4),Random(-4,4),Random(-4,4))
Stop
Thrust:
TNT1 A 0 A_FaceTarget
TNT1 A 0 A_CustomMissile("CarrotMagnet",20,0,0,CMF_AIMOFFSET|CMF_AIMDIRECTION|CMF_ABSOLUTEPITCH|CMF_OFFSETPITCH|CMF_ABSOLUTEANGLE)
Stop
Death:
MODL A 1 A_RadiusGive("CarrotItem",100,RGF_PLAYERS,1)
Stop
}
}
Я правда не помню как реагирует на стейт Death инвенторный класс, но попробовать можно в любом случае. Если не будет работать - можно сделать иммитацию)
Ах да ещё замечу одну интересную вещь - я так и не понял для чего вообще A_JumpIfInventory("MagnetItem",1,"Thrust"). И мне кажется я её в Spawn стейте зря оставил, так что скорее всего эту проверку нужно будет всунуть в Pickup стейт.
Хотелось бы спросить - почему морковка является монстром? Мне кажется куда логичнее было бы основать её на CustomInventory. Это во первых.
Вот чесно забыл.. ее я делал в начале проекта, помню что были причины, я пробовал и просто инвентори и кустом и прожектайл даже, подошел монстр, если вспомню почему напишу.
LEX SAFONOV :
Во вторых - у тебя крошит гоззу из-за бесконечных зацикливаний в коде.
LEX SAFONOV :
TNT1 A 0 //Увы так не подходит, морковка 3д модель, и такие не равномерные тики делают анимацию морковки немного томозной, в игре это реально видно, и даже раздражает, кажется что фпс низкий
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DistanceScript") > 2048, "Off")
MODL AAAAA 1 A_JumpIfInventory("MagnetItem",1,"Thrust")
MODL BBBBB 1 A_JumpIfInventory("MagnetItem",1,"Thrust")
MODL CCCCC 1 A_JumpIfInventory("MagnetItem",1,"Thrust")
MODL DDDDD 1 A_JumpIfInventory("MagnetItem",1,"Thrust")
MODL CCCCC 1 A_JumpIfInventory("MagnetItem",1,"Thrust")
MODL BBBBB 1 A_JumpIfInventory("MagnetItem",1,"Thrust")
Но спасибо я добавлю скрипт, попробую. Хотя не уверен что через пару дней мне это еще будет нужно.. если не решу вопрос с оптимизацией, заброшу мод к чертям... надоел, вечно одни костыли выдумывать приходится, а вариантов костылей не 1 как всегда -_-.
LEX SAFONOV :
Ах да ещё замечу одну интересную вещь - я так и не понял для чего вообще A_JumpIfInventory("MagnetItem",1,"Thrust")
Это типо "притягивает" морковку если персонаж взял магнит(я делаю как бы 2д игру), по сути морковка стреляет прожектайлом морковкой которая летит к персу, другого решения пока не нашел.
Так что не простая морковь.. а вооот, инвентори класс не может пулять снаряды вроде, а может и нет.. блин ну реально забыл =_=
Добавлено спустя 2 минуты:
LEX SAFONOV :
Во вторых - у тебя крошит гоззу из-за бесконечных зацикливаний в коде.
Кстати, а что за бесконечный цыкл у меня? Это где? Там же не бесконечный, он выходит из цыкла когда перс рядом, и заходит в цыкл когда перс далеко.
Кстати, а что за бесконечный цыкл у меня? Это где? Там же не бесконечный, он выходит из цыкла когда перс рядом, и заходит в цыкл когда перс далеко.
Декорейт думает по другому)
alekv :
Так что не простая морковь.. а вооот, инвентори класс не может пулять снаряды вроде, а может и нет.. блин ну реально забыл =_=
Проджектайлом может выстрелить практически ЛЮБОЙ актор. Единственное - каким снарядом выстрелить именно из актора морковки. Можно в принципе самонаводящимся, однако встаёт вопрос кого актор будет ненавидеть - т.е. если у инвентории игрок не будет целью, то велика вероятность, что "морковь-ракета" просто пролетит прямо даже не нацелившись в игрока. Я если чесно это до конца не помню тоже, правда по логике объектов, тут надо эксперимент как обычно))
alekv :
Увы так не подходит, морковка 3д модель, и такие не равномерные тики делают анимацию морковки немного томозной, в игре это реально видно, и даже раздражает, кажется что фпс низкий
Хм..., тогда убери начальное TNT1 A 0 и проверку дистации перенеси в конец).
LEX SAFONOV
Да.. вспомнил, морковка монстр потому что итем не может получить инвентори итем, не может стрелять прожектайлом(тут не помню точно) и еще он монстр т.к. когда персонаж запрыгивает на канат, он инвентори итем почему-то подбирать не хочет, а морковка монстр подбиралась. Но не суть, главное что бы дистанция работала, если это мне поможет конечно с оптимизацией.
Проверил твой скрипт, реально работает... почему хз, не виснет ничего, чем же тогда мой старый цыкл плох? Тем что он проверяет дистанцию каждые 2-3 тика наверное? Морковка конечно немного дергается теперь, но думаю смогу чего-то придумать. (Они теперь забавно себя ведут, когда их много выстроенных в ряд, они как футбольные фанаты на матче волну пускают хД)
Спасибо большое!!!
Добавлено спустя 1 час 21 минуту 31 секунду:
Все, понял свою ошибку.. я не подумал о том что у меня и тот и тот цыкл чекает дистанцию, и в tnt1 a 1 он еще и проверяет каждый 2 тик...
Осталось только придумать вариант получше с магнитом раз уж взялся за переделку старого
Добавлено спустя 28 минут 45 секунд:
Вот как раз спрошу.. Какой цыкл лучше использовать в данном случае или может каждый хорош, но смотря для чего? Честно не понимаю в чем разница?
Вообще по чесноку - оба аналогичны друг другу. Goto-переходы уместны, где нужно использовать именно переход в конкретный стейт.
А так к слову - посмотри как у меня реализован цикл в Spawn стейте.)(Конкретно удели внимание Goto-переходам и A_JumpIF() функции)
Всем привет подскажите пожалуйста, как вывести изображение на экран? что-то похожее на "hudmessage" но только вывести картинку на опр. время к примеру, при пересечении линии на карте выходит сообщение "соберите 25 бонусов" и показан спрайт тех что нужно собрать.