Только что прошел МАР09 Plutonia 2 без сейвов. Почти всех убил, остались лютейшие бароны, вдаряющие самонаводкой, и кучка чейнганнеров, портнувшихся на синий ключ, о которых я забыл. Оружие использовал всё: основа, конечно, меч - против зомбей, пинки, одиночных ревенантов и какодемонов. Им хорошо расчищать толпу мелочи, но против импов не катит - загрызут быстрее, против чейнов вблизи и то лучше. Какоману - как ssg против толпы и медленных монстров типа манкубов, ибо они успевают убежать прежде, чем снаряд наберет полную скорость. Зеленая мана очень непослушна, норовит улететь в зомбя, когда под носом хеллнайт, однако против особо заныкавшихся какодемонов и особенно хеллнайтов и баронов - незаменима. Если монстр близко на высоком уступе, тоже не катит - убивается об уступ. Красную ману - ее было мало - для кемперящих импов и чейнганнеров, иногда против манкубов, когда мало хп и рисковать с розовой маной не хочется. Дает постоянный болевой шок у монстров. Ну и совсем было мало желтой маны. Ее я слил на дальнюю толпу ревенантов, когда зеленая мана кончилась. Все душекубы использовал, два против арча, один против толпы. Осталось 200 душ с БФГи. Надо все-таки вводить unmaker.
Круговую атаку мечом ослабил, теперь барон валится с двух ударов.
Исправил досадный баг, когда ловец душ выскакивает впереди меча, когда патроны кончились.
досадный баг, когда ловец душ выскакивает впереди меча, когда патроны кончились.
Даааа...этот досадный момент меня тож убивал иногда.
Сделай ещё чтоб зелёная мана кидалась и без наводки тоже. (альт. атака)
Кстати, я тож ся прохожу ПЛ2 (впервые), на уровне где-то 7-8, могу демок написать)))
PS: Ссылочку на обновление?..
ещё PS: Очень прикольно получается, когда кинуть зелёную ману в постоянно телепортирующегося монстра)))) снаряд то в ту сторону, то в эту... (плутониа, левел...блин, не помню номер, но тебя ещё телепортируют в окружение 2 арчей, которые по 4 сторонам телепортируются..)
Идея про ловец душ: Может сделать, чтоб при использовании магии игрок смотрел наверх, ловец душ давал небольшой дамаг, души прилетают в точку над игроком, "убиваются" и кидают "патроны" на игрока...
Скрытый текст:
Чет мне кажется, что этот мод только мне и автору нравится... что не есть хорошо... А мод классный! .
Да, можно, в настройках игрока. Поставить Autoaim -> Never.
Кстати, самонаводку понерфлю немного, а то действительно вбок снаряды улетают.
Мод еще нравится моему другу, только он не переваривает быстрых снарядов импов. Говорит, в Generator of Evil они за мгновение пролетают всю арену.
Скрытый текст:
Блин, ну и спрайты мне дали. Под стол чуть не грохнулся. Демон показывает фигурки из театра теней, четырьмя пальцами кастовать такую магию... Лан, попробую))).
Блин, точно...чёт не подумал.
А если сделать так, чтоб игрок при использовании магии дергался не хаотично в разные стороны, а только вперёд? У меня (GZdDooM последний) душа сама в героя не влетает, но берётся за счёт этих дерганий. И заодно легче управлять, чтоб с обрывов не падать...
Сдаюсь. Не знаю, как сделать оживающую душу-монстр-патрон.
Вот тестовая душа
Скрытый текст:
actor Soul : Ammo
{
radius 6
height 8
inventory.pickupmessage "Picked up a soul."
inventory.PickupSound "soul/pick"
inventory.amount 1
inventory.maxamount 500
inventory.icon "SOULS"
ammo.backpackamount 1
ammo.backpackmaxamount 1000
+FLOATBOB
+DONTGIB
}
actor TestSoul : Soul
{
obituary "Hello, soul!"
health 1000
radius 9
height 9
xscale 0.5
yscale 0.5
mass 50
speed 10
painchance 256
damage 0
attacksound "skull/melee"
inventory.pickupmessage "Picked up imp's soul."
inventory.amount 2
MONSTER
-SHOOTABLE
+FLOAT
+NOGRAVITY
+MISSILEMORE
+NOBLOCKMONST
+DROPOFF
-PUSHABLE
+LOOKALLAROUND
+CANNOTPUSH
+NOTELEPORT
-CANPUSHWALLS
-CANUSEWALLS
-ACTIVATEMCROSS
+NOBLOCKMONST
+BRIGHT
-SOLID
+NOCLIP
states
{
Spawn:
IMSL A 2 bright
IMSL B 2 bright ACS_Execute(701,0,0,0,0)
IMSL C 2 bright ACS_Execute(704,0,0,0,0)
goto Idle
Idle:
IMSL ABCB 10 bright
loop
Active:
IMSL ABCB 10 bright A_Look
loop
See:
IMSL A 0 bright A_ChangeFlag("NOCLIP",0)
/*IMSL A 0 bright A_JumpIf(velx==35 || vely==35 || velz==35,2)
IMSL A 0 bright A_ScaleVelocity(3)*/
IMSL ABCB 2 bright A_Chase
IMSL A 2 bright ACS_ExecuteAlways(708,0,20,0,0)
IMSL A 0 A_JumpIfInventory("PickedUp",1,"Death")
loop
Missile:
IMSL A 0 bright A_ChangeFlag("NOCLIP",1)
IMSL A 10 bright A_FaceTarget
IMSL B 4 bright A_SkullAttack
IMSL CA 4 bright
IMSL A 2 bright ACS_ExecuteAlways(708,0,20,0,0)
IMSL A 0 A_JumpIfInventory("PickedUp",1,"Death")
goto Missile+2
Death:
TNT1 A 1 bright A_NoBlocking
stop
}
}
Вот скрипт последней версии:
Скрытый текст:
#library "Demonic"
#include "zcommon.acs"
int PLAYER_TID = 666;
int SOULS_TID = 667;
int MANA_TID = 668;
function int fdistance (int tid1, int tid2)
{
int len;
int y = getactory(tid1) - getactory(tid2);
int x = getactorx(tid1) - getactorx(tid2);
int z = getactorz(tid1) - getactorz(tid2);
int ang = vectorangle(x,y);
if(((ang+0.125)%0.5) > 0.25) len = fixeddiv(y, sin(ang));
else len = fixeddiv(x, cos(ang));
ang = vectorangle(len, z);
if(((ang+0.125)%0.5) > 0.25) len = fixeddiv(z, sin(ang));
else len = fixeddiv(len, cos(ang));
return len;
}
Script 700 ENTER
{
Thing_ChangeTID(0, PLAYER_TID);
}
ACTOR SoulReaper : Weapon 20701
{
Weapon.SelectionOrder 7
Weapon.YAdjust 10
States
{
Select:
CFLM A 1 A_Raise
Loop
Deselect:
CFLM A 1 A_Lower
Loop
Ready: CFLM AAAABBBBCCCC 1 A_WeaponReady
Loop
Fire:
CFLM A 0 SetPlayerProperty (0, 1, 0)
CFLM A 3 Offset (0, 40) A_PlayWeaponSound("Prepare/SoulReeper")
CFLM D 3 Offset (0, 50) A_SetBlend ("BLACK",0.6,15)
CFLM D 3 Offset (0, 36) A_SetBlend ("BLACK",0.7,15)
CFLM EFEFEFEFEFEFEFEFEFEF 1 A_SetBlend ("BLACK",0.8,15)
CFLM EFEFEFEFEFEFEFEFEFEF 1 A_SetBlend ("BLACK",0.9,15)
CFLM EFEFEFEFEFEFEFEFEFEF 1 A_SetBlend ("BLACK",1.0,300)
CFLM A 0 ACS_Execute(703,0,10,0,0)
CFLM A 0 A_GiveInventory(ColorReplacer,1)
CFLM E 3 A_Refire
CFLM A 0 SetPlayerProperty (0, 0, 0)
CFLM A 0 A_TakeInventory(ColorReplacer,1)
CFLM A 0 ACS_Execute(704,0,0,0,0)
Goto Ready
Hold:
CFLM E 4 A_PlayWeaponSound("Loop/SoulReeper")
CFLM FEFEFEFEE 4
CFLM FEFEFEEFEF 4
CFLM E 4 A_Refire
CFLM A 0 SetPlayerProperty (0, 0, 0)
CFLM A 0 A_SetBlend ("BLACK",1.0,300)
CFLM A 0 A_TakeInventory(ColorReplacer,1)
CFLM G 2 Offset (0, 40)
CFLM G 2 A_PlayWeaponSound("End/SoulReeper")
CFLM A 0 ACS_Execute(704,0,0,0,0)
Goto Ready
}
}
Теперь как это должно работать.
1) С самого начала игроку присваивается номер 666 (скрипт 700).
2) Как только появляется душа, ей сразу же присваивается номер 667 (701 скрипт), она стопориться и ставится в состоянии Idle (704 скрипт).
3) Оружие при активации вызывает 703 скрипт, который должен пробудить душу и дать возможность ей двигаться. Первое работает, второе - никак. Соответственно, по окончании каста срабатывает 704 скрипт, и все души "засыпают".
4) Душа постоянно проверяет расстояние до игрока, если оно меньше заданного, она должна исчезнуть, у игрока должно сложиться полное впечатление, что он ее взял. Скрипт 708 не работает вообще, хотя должен.
Сам мод: http://webfile.ru/5343794.
Вопрос, почему не работает скрипт 708? Или какое существует другое решение проблемы, изложенной в п.4?
Arsenikum
Зачем все усложнять? Пусть душа будет враждебным монстром (фактически) (параметр MONSTER). Тогда при просыпании она полетит к игроку, при попытке атаковать (Melee) дает инвентарь (A_GiveToTarget) и исчезает.
Ну и соответствующие флаги (я уже не помню их, так что ищи).
Делается просто - у души делаем в цикле FaceTarget и Recoil который основывается на скорости актора. Скорость меняем через оружие-призывалку. При приближении как сказал bed.intruder пусть предмет идет в стейт Melee и дает предмет причем это должно занимать 0 тиков
Просмотрел код, сейчас он излишне сложен. Во первых, надо переносить всё взаимодействие в один скрипт и что делать, выбирать по параметрам вызова этого скрипта, так будет удобнее и компактнее, да и отладка сведётся к print(s:"script 703, params",i:param1,s:", ",i:param2...)
Вообщем, тут надо просто отладивать, выводить при помощи a_logint, print как можно больше информации и смотреть, где именно скрипт не вызывается, или вызывается, но работает некорректно. И естейственно, везде где только можно, надо использовать в качестве TID 0 как указатель на текущую душу, которая вызвала скрипт, ведь их по идее может быть несколько.
A_JumpIfCloser выглядит предпочтительней использования скрипта. Только вот скрипт все равно будет - GiveInventory работает только для активатора, в данном случае для души, а надо - для игрока.