Интересно, а как ты пропишешь в ацс, какие звуки проигрывать в зависимости от пола игрока? Пока только видится вариант с созданием 2 как бы "классов" - мужской и женский, у которых разные звуки и спрайты. Но отсюда следуют все неудобства выбора класса.
Я не задумывался в серьез, но пол игрока это простая переменная, которую надо вывести туда где игрок сможет ее поменять в настройках(cvar) или в самой игре(переменная int). Вот примерно так я представляю это дело... int myshik; Script "smena_pola" void { While(on){ PrintBold(s:"If you male press USE\nIf you famale press other key, but not USE"); But = GetPlayerInput(-1,INPUT_BUTTONS); if (But & BT_USE) {myshik = yes; PrintBold(s:"pozdravlay ti myshik!"); terminate;} else{ myshik = no; PrintBold(s:"pozdravlay ti baba!"terminate;); Delay(1); } }
Script "CheckBaba" (int baba) {if (myshik == yes) baba = no; PlaySound(myshiksound); else playsound(babaSound); baba = yes; SetResultValue(baba); }
Actor player { Spawn: PLAY A 0 ACS_NamedExecute("play_sound",0) //PLAY A 0 A_JumpIf(CallACS("Checkbaba")==true,"PlaySoundBaba") //или такой вариант //PLAY A 1 A_PlaySound("myshik") PlaySoundBaba: PLAY A 0 A_PlaySound(...) Goto spawn
Конечно если задуматься нормально над полом игрока, то и хороший скрипт можно написать, да и получился бы более настраиваемый.
Shadowman:
На видео ничего толком не видно - чел что-то набирает, потом появляется сообщение внизу экрана. Вот если бы там ссылку на код дали, это было бы другое дело...
Дак вот самому интересно, он как-то вывел консольный ввод, т.е. там не просто набор какой-то, а именно консольные команды туда вводит!!! Я там на англ почитал, но сути не уловил, понял что он это сделал в какой-то сборке гоззы, мб из той сборки можно вырвать такую фичу да в свою сборку запихнуть. А юзер тот что рпг делает забанен походу и не спросить ничего(
alekv Идея то была немного в другом: пол задается изначально при генерации игрока, и сменять его по ходу игры НЕЛЬЗЯ. Наличие опции пола в Player Setup эту идиллию рушит. Ну или надо задавать пол независимо от значений, которые игрок вздумает проставить в Player Setup.
Идея то была немного в другом: пол задается изначально при генерации игрока, и сменять его по ходу игры НЕЛЬЗЯ. Наличие опции пола в Player Setup эту идиллию рушит. Ну или надо задавать пол независимо от значений, которые игрок вздумает проставить в Player Setup.
Ну дак смотри, игрок начал новую игру, стартует какой либо ролик, после уже в игре игроку предлогается выбрать пол персонажа, там же можно прикрутить возможность что-то еще настроить, а поле player setup вообще убрать из менюдефа, мб можно даже сделать выбор перса в самой игре, а не только его настроку путем морфа в заранее прописанные классы(хотя я морфом еще не пользовался, потому не знаю есть ли у морф персов какие-то недостатки или нет). В общем что получается, игрок 1 раз в начале игры настраивает перса и все, он до самой смерти или конца игры пол поменять не сможет. Если юзать морф классы удобно, тогда и со звуками парится не особо надо т.к. каждому классу в декорейте писать свои звуки, а если юзаешь глум там и текст проще для каждого класса писать, т.е. с помощью функции ReadUserData(""); реально уменьшает путаници в скриптах т.к. все диалоги, тексты и прочее можно вынести в отдельную папку и отдельные файлы. Да и генерацией игрока в player setup не особо то и назовешь.. имхо если делать, так делать свою более настраиваемую.
Наличие опции пола в Player Setup эту идиллию рушит.
Не рушит. Заводишь свою переменную пола, которая подхватывает то значение пола, которое было в момент нажатия кнопки [New Game]. Это значение в дальнейшем считается истинным. Каждую секунду (внутри вечного цикла) проверять, сменился ли пол. Если пол сменился, надавать читеру по рукам (это можно сделать сотней разных способов).
Ну или надо задавать пол независимо от значений, которые игрок вздумает проставить в Player Setup.
Народ - такой вопрос возник: у арчвайла есть такой код на See стейте:
VILE AABBCCDDEEFF 2 A_VileChase
Т.е. на каждый фрейм (букву) выполняется A_VileChase. Мне нужно, чтобы кроме VileChase выполнятся еще и мой собственный код. Например можно сделать так:
Скрытый текст:
VILE A 0 мой код 1 VILE A 0 мой код 2 VILE A 0 мой код ... VILE A 2 A_VileChase
VILE A 0 мой код 1 VILE A 0 мой код 2 VILE A 0 мой код ... VILE A 2 A_VileChase
VILE B 0 мой код 1 VILE B 0 мой код 2 VILE B 0 мой код ... VILE B 2 A_VileChase
VILE B 0 мой код 1 VILE B 0 мой код 2 VILE B 0 мой код ... VILE B 2 A_VileChase
...
VILE F 0 мой код 1 VILE F 0 мой код 2 VILE F 0 мой код ... VILE F 2 A_VileChase
VILE F 0 мой код 1 VILE F 0 мой код 2 VILE F 0 мой код ... VILE F 2 A_VileChase
И все будет работать как мне надо. Вопрос лишь в том, как из миллиона строк сделать несколько строк циклом (иными словами, как сделать цикл, в котором будут последовательно меняться спрайты с VILE A до VILE F)
alekv:
Скрытый текст:
UsernameAK : Я плохой маппер, все мои уровни симметричные. Как научиться красиво маппить?
Детали, в них секрет, сделай коробку из секторов и подумай что и как расположить в этой коробке, твоя цель сделать обычную коробку интересной, что бы в ней было интересно находиться... Что для этого надо? Начни с идеи, что будет представлять твоя коробка, мб это каюта корабля или некий склеп в какой-то пещере..? Как определился, подумай где будут источники света т.к. в думе для сочной картинки приходится подстраиваться под свет а не наоборот. Начни подбирать текстуры для твоего дизайна, рисуй сам или гугл.. Как найдешь что надо, подумай о различном декоре который логичо видеть в стилистике твоей комнаты, если это склеп, гробы, свечи, черепа, мусор, не большие бугорки с землей как бы упавшей с потолка, возможно разные предметы бальзамирования или ритульного характера(тут уже от стилистики зависит) и т.д. как определишься с декором и если умеешь рисовать хоть как-то, хотя бы простую тень(мазнуть кистью черного цвета с альфа каналом там где должна быть тень), подумай какие объекты не будут двигаться, к примеру какой либо ящик в углу, то на текстурах можно добавить статичную тень(которая не будет двигаться) которую отбрасывает такой ящик, раньше так и делали, запекали тень от статичных объектов в текстуры. Ну и до того как рисовать тень, конечно надо определиться где будет лежать твой декор, для этого можешь нагуглить картинок с подобной стилистикой и черпать идеи, а можешь придумать для каждого декора свою мини историю, например ящик что стоит в углу, принесли рабочие когда склеп только сторился и забыли около него ломик или еще какой предмет. Священик который спустя 50 лет заходил в склеп, проводил какой либо ритуал и поставил и забыл подсвечник с тогда еще горевшей свечой на таком ящике, крысы бегая в поисках еды, уронили этот подсвечник, ящик частично обгорел, тем самым стены около него чуть почернели от копоти..
В таком духе можешь попробовать расставить предметы, это не так долго как кажется и еще что важно, это оттенок цвета который будет передавать твоя комната с помощью дин лайтов например. Тоесть если это склеп, то темно, горящая свеча(на текстурах должен быть оттенок цвета исходящего от всечи, просто подбери палитру в ФШ например это делается очень просто Изображение>Корекция>Варианты). И последнее, всегда помни что полюбому получится хуже чем представляешь в голове, пытайся смотреть так сказать трезво что бы не разочаровываться. Надеюсь сойдет за не полный ответ..
Ответ знакомого геймдизайнера (в прошлом левелдизайнера) на твою цитату:
еще вопрос: есть быстро бегающий актор А, который разово спавнит (например через spawnitemex) актора Б. Требуется, чтобы на каждый тик актор Б знал координаты актора А (с целью спавнить в том месте акторы через тот же spawnitemex например). Как это сделать? И какие, в таком случае, координаты получит актор Б в случае смерти актора А ?
И какие, в таком случае, координаты получит актор Б в случае смерти актора А ?
грубо говоря - никакие
theleo_ua:
еще вопрос: есть быстро бегающий актор А, который разово спавнит (например через spawnitemex) актора Б. Требуется, чтобы на каждый тик актор Б знал координаты актора А (с целью спавнить в том месте акторы через тот же spawnitemex например). Как это сделать?
лично я вижу реализацию в АЦС. И тут ещё есть нюанс небольшой... Вообщем если актор Б - проджектайл, то координаты актора А через "Цель" можно получить достаточно просто(у проджектайла целью является создатель, т.е. актор А). Если актор простой, не проджектайл, то можно попробовать в spawnitemex выставить последний флаг как Children(я просто сейчас не помню как он называется, вообщем он делает созданный объект по умолчанию "созданным кем то"). Опять же вызывать скрипт из актора Б и в проверять в нём координаты создателя через APP_MASTER(не помню держится ли сейчас такое, вообще тот флаг у функции Children уже хреновато работает).
Актор простой, не проджектайл. Идея понятна, вопрос лишь в том, как наиболее эффективно актору Б узнать, что актора А убили (пока вижу 3 способа: либо актору А в стейте Death вызывать a_killchildren, либо менять себе какой-то проперти (например speed), а актору Б соответственно это проперти проверять и если оно отличается от дефолтного, то goto death (актор Б по задумке тоже должен умереть, если родитель умирает), либо актору Б анализировать health актора А (и при health<1 goto Death) )
Позже проверю, как оно сработает, но если у кого есть идеи лучше, просьба отписать
еще вопрос: есть быстро бегающий актор А, который разово спавнит (например через spawnitemex) актора Б. Требуется, чтобы на каждый тик актор Б знал координаты актора А (с целью спавнить в том месте акторы через тот же spawnitemex например). Как это сделать? И какие, в таком случае, координаты получит актор Б в случае смерти актора А ?
Спавнить скриптом через ACS, а не через SpawnItemEx. Тогда скрипт запускается от имени актора А, и имеет его координаты через TID 0 (активатор), а актору Б назначаешь UniqueTID(). И while(true) с Delay(1).
script "spawn_actor_b" (void)
{
int actor_b_tid = UniqueTID();
SpawnForced("actor_b_class", GetActorX(0), GetActorY(0), GetActorZ(0), actor_b_tid, 0);
while (true)
{
// GetActorX(0), GetActorY(0), GetActorZ(0) = координаты актора который вызвал скрипт
// Все действия с актором Б делать через actor_b_tid
Delay(1);
}
}
theleo_ua:
как наиболее эффективно актору Б узнать, что актора А убили
if (GetActorProperty(0, APROP_Health) <= 0)
{
Thing_Remove(actor_b_tid);
terminate;
}
Всем доброго дня и вечера!! подскажите пожалуйста код для оружия? нужно чтобы игрок с помощью руки мог охладить опр. радиус вокруг себя (пока удерживаешь кнопку выстрела все вокруг замерзают) без всяких видимых эффектов.
Не то чтобы такую штуку было легко закодить. Особенно чтобы работало на нативных монстрах, например. Проще всего... Ну... Если монстры все свои (или заменённые нативные), то делаешь им стейт Pain.FreezeRadius, который замораживает монстра на один тик. Беззвучно. После этого оружие игрока должно спавнить на месте игрока (прямо на месте) мгновенно взрывающегося актора с флагом +FORCEPAIN, +CAUSEPAIN и с нулевым уроном. С необходимым радиусом атаки. Каждый тик (т.е. с промежутком 1). В итоге когда игрок нажмёт на атаку, то у него каждый тик должна спавниться взрывная волна с типом дамага FreezeRadius, которая будет на 1 тик замораживать всех монстров, у которых прописан Pain.FreezeRadius. И просто доставлять неприятности тем, у кого не прописан Pain.FreezeRadius, потому что у них есть свой стейт боли, который обычно тоже их заставляет остановиться.
Спасибо! я пробовал делать не видимые снаряды почти 0й скорости которые при нахождении на карте выкидывали кучу очень быстрых, вторичных снарядов в разные стороны и затем основной снаряд исчезал после проигрывания стейта "spawn" (срок жизни назначал так чтобы он исчез перед след. выстрелом), спрайты отключены (TNT1), получалось кривовато да и мне доставалось тоже в обратную хотя флаг "friendly" был прописан как у основного снаряда так и у вторичного.
Добавлено спустя 17 часов 54 минуты 13 секунд:
вот хотел за одно спросить какие параметры нужно задать оружию чтобы при выстреле снаряды разлетались на 360 гр. от игрока это было бы самый раз для имитации заморозки, не обязательно чтобы замерзли все и одним разом главное чтобы морозило на 360 гр. относительно игрока.
ACTOR NewZombieMan : ZombieMan replaces ZombieMan
{
Game Doom
SpawnID 4
Health 20
Radius 20
Height 56
Speed 8
PainChance 200
Monster
+FLOORCLIP
SeeSound "grunt/sight"
AttackSound "grunt/attack"
PainSound "grunt/pain"
DeathSound "grunt/death"
ActiveSound "grunt/active"
Obituary "$OB_ZOMBIE"
dropitem "Pistol2"
States
{
Spawn:
POSS AB 10 A_Look
Loop
See:
POSS AABBCCDD 4 A_Chase
Loop
Missile:
POSS E 10 A_FaceTarget
POSS F 8 A_PosAttack
POSS E 8
Goto See
Pain:
POSS G 3
POSS G 3 A_Pain
Goto See
Death:
POSS H 5
POSS I 5 A_Scream
POSS J 5 A_NoBlocking
POSS K 5
POSS L -1
Stop
XDeath:
POSS M 5
POSS N 5 A_XScream
POSS O 5 A_NoBlocking
POSS PQRST 5
POSS U -1
Stop
Raise:
POSS K 5
POSS JIH 5
Goto See
}
}
Проблема в том,что актор "Pistol2" заменяет пистолет игрока и он прописан у зомби как dropitem,но при убийстве зомби из него всё также выпадает обойма Это с dropitem косяки или в коде зомби глюк какой то? Порт GZDoom
Раз уж пошла такая пьянка, опишу и свою проблему с дропитем: есть такие акторы HereticImp и HereticImpLeader . Если им прописать Dropitem "что-нибудь", то ничего дропаться не будет. Почему так происходит и как это наиболее эффективно исправить? На данный момент я (в качестве обходного костыля) в стейтах смерти и креша прописал spawnitemex (первыми фреймами)
И еще вопрос: представим себе летающего монстра, например HereticImp или Dragon , у которого есть стейт crash. Цель - сделать, чтобы при смерти этого монстра (например если игрок или другой монстр убивает данного монстра) обязательно со 100%-й вероятностью дропался целевой монстр (НЕлетающий). Как это наиболее эффективно реализовать? Что в данном случае лучше - dropitem или spawnitemex? Если второе - в какие стейты его писать - Death или Crash? Если первое - тогда вопрос "как заставить его работать для проблемных акторов а-ля HereticImp " ?
Заранее спасибо за ответы
Добавлено спустя 8 минут 35 секунд:
D1m3:
Проблема в том,что актор "Pistol2" заменяет пистолет игрока и он прописан у зомби как dropitem,но при убийстве зомби из него всё также выпадает обойма Это с dropitem косяки или в коде зомби глюк какой то? Порт GZDoom
Как костыль, можешь прописать Dropitem "None", а в стейтах смерти A_spawnitemex ("Pistol2")
P.S. А костыль который ты предложил это очень херовый костыль, я против. Приколи потом кто-то ответвится от этого монстра и будет в шоке смотреть как у него одновременно пистоль и дропитем работают ))
Всем привет! Вот решил освоить такого зверя, как HUB:
GZDoom - Doom in UDMF format (я так понимаю, мапинфо для UDMF и других форматов - отличаются).
1. Порывшись в ZDoom Wiki, не обнаружил подробного описания. Я так понимаю, что это делается через кластеры в mapinfo? 2. Можно ли, вернувшись с уровня обратно в хаб, вносить в хаб изменения (как в Hexen - seven portals, например), двери открывать... Как это реализуется? 3. Не найдется ли у кого нибудь Вад-пример (дабы не объяснять, а просто тыкнуть носом)?
zzXenobytEzz Я сам хабы не программировал, но занимаясь другим, наталкивался на туториалы по сабжу на ZDoom.Вики. Находятся они правда не очень легко, надо признать.
2. Можно ли, вернувшись с уровня обратно в хаб, вносить в хаб изменения (как в Hexen - seven portals, например), двери открывать... Как это реализуется?
ACS_Execute принимает параметр "map" (второй по списку). Указываешь номер карты (levelnum), скрипт будет выполнен сразу когда ты вернёшься на эту карту. Работает только в пределах текущего кластера.
zzXenobytEzz:
3. Не найдется ли у кого нибудь Вад-пример (дабы не объяснять, а просто тыкнуть носом)?