VladGuardian Да, с самим брайтмапом всё в порядке, если ты про него. Альфа канал я всегда вычищаю. Проблему решил, она вообще близко не в текстурах. Тег warp не дает брайтмапу работать
Какие причины могут быть столь странного поведения редактора?
Заменял replaces ом этого actor, но он либо не заменяется, либо если конкретно его вставлять в редактор, то вот что получается
Никто не отвечает, так что буду предполагать -- задам наводящие вопросы: какие управляющие файлы с кодом подключены? Decorate, ACS, ZScript, MAPINFO/GAMEINFO? Проверь, нет ли конфликтов здесь (MAPINFO) и здесь (Decorate). Не стоит ли галка в меню ресурсов (F2) "Exclude this resource pack from testing"? И в конфигурации Doom Builder (F6), в строке параметров запуска тестирования, не убрано ли "-file %f" (насчёт именно такого типа после знака процента не уверен, но нечто подобное по-любому должно быть)?
Галочка не стояла, поставил - тоже не сработало, в параметрах стоит вот это: -iwad "%WP" -skill "%S" -file "%AP" "%F" +map %L %NM
Тег у него уникальный, код такой:
Скрытый текст:
actor Cardinal 1325
{
Health 4500
Speed 6
Radius 24
Height 112
PainChance 50
Mass 700
Meleedamage 10
SeeSound "cyber/sight"
PainSound "brain/pain"
DeathSound "cyber/death"
Missiletype "Cardinal_Rocket"
MissileHeight 72
MONSTER
+NORADIUSDMG
+NOGRAVITY
+FLOATBOB
+FLOAT
bloodcolor green
Obituary "%o was blessed by the dark cardinal."
States
{
Spawn:
CARD AB 4 Bright A_Look
Loop
See:
CARD AABBAABBAABB 2 Bright A_Chase
loop
Missile:
CARD A 0 A_jump(10,6)
CARD A 0 A_jump(100,7)
CARD C 4 Bright A_FaceTarget
CARD D 5 Bright A_CustomMissile("Cardinal_Rocket", 72, -30, 0)
CARD C 4 Bright A_FaceTarget
CARD D 5 Bright A_CustomMissile("Cardinal_Rocket", 72, -30, 0)
Goto See
CARD C 4 Bright A_FaceTarget
CARD D 5 Bright A_CustomMissile("pain_gernade", 72, -30, 0)
Goto See
CARD C 4 Bright A_FaceTarget
CARD D 5 Bright A_CustomMissile("CardinalPlasma", 72, -30, 0)
CARD C 4 Bright A_FaceTarget
CARD D 5 Bright A_CustomMissile("CardinalPlasma", 72, -30, 0)
CARD C 4 Bright A_FaceTarget
CARD D 5 Bright A_CustomMissile("CardinalPlasma", 72, -30, 0)
CARD C 4 Bright A_FaceTarget
CARD D 5 Bright A_CustomMissile("CardinalPlasma", 72, -30, 0)
CARD C 4 Bright A_FaceTarget
CARD D 5 Bright A_CustomMissile("CardinalPlasma", 72, -30, 0)
CARD C 4 Bright A_FaceTarget
CARD D 5 Bright A_CustomMissile("CardinalPlasma", 72, -30, 0)
Goto See
Pain:
CARD A 4 Bright
CARD A 0 Bright A_custommissile("DeathBall",72,0,0,2,0)
CARD A 0 Bright A_custommissile("DeathBall",72,0,20,2,0)
CARD A 0 Bright A_custommissile("DeathBall",72,0,40,2,0)
CARD A 0 Bright A_custommissile("DeathBall",72,0,60,2,0)
CARD A 0 Bright A_custommissile("DeathBall",72,0,80,2,0)
CARD A 0 Bright A_custommissile("DeathBall",72,0,100,2,0)
CARD A 0 Bright A_custommissile("DeathBall",72,0,120,2,0)
CARD A 0 Bright A_custommissile("DeathBall",72,0,140,2,0)
CARD A 0 Bright A_custommissile("DeathBall",72,0,160,2,0)
CARD A 0 Bright A_custommissile("DeathBall",72,0,180,2,0)
CARD A 0 Bright A_custommissile("DeathBall",72,0,200,2,0)
CARD A 0 Bright A_custommissile("DeathBall",72,0,220,2,0)
CARD A 0 Bright A_custommissile("DeathBall",72,0,240,2,0)
CARD A 0 Bright A_custommissile("DeathBall",72,0,260,2,0)
CARD A 0 Bright A_custommissile("DeathBall",72,0,280,2,0)
CARD A 0 Bright A_custommissile("DeathBall",72,0,300,2,0)
CARD A 0 Bright A_custommissile("DeathBall",72,0,320,2,0)
CARD A 0 Bright A_custommissile("DeathBall",72,0,340,2,0)
Goto See
Death:
CARD E 8 Bright
CARD F 8 Bright A_Scream
CARD G 8 Bright A_NoBlocking
CARD H 8 Bright
CARD I 8 Bright A_Explode
CARD J 8 Bright
CARD K 8 Bright
CARD L 8 Bright
Stop
}
}
//====================
ACTOR Cardinal_Rocket
{
Game Doom
SpawnID 127
Radius 11
Height 8
Speed 20
Damage 24
Projectile
+RANDOMIZE
+DEHEXPLOSION
+ROCKETTRAIL
SeeSound "weapons/rocklf"
DeathSound "weapons/rocklx"
States
{
Spawn:
CROC AB 4 Bright
Loop
Death:
CROC C 8 Bright A_Explode
CROC D 6 Bright
CROC E 4 Bright
Stop
}
}
//====================
ACTOR pain_gernade
{
Game Doom
SpawnID 127
Radius 11
Height 8
Speed 20
Damage 5
Projectile
+DoomBounce
-NoGravity
scale .25
translation "168 : 191 = 112 : 127"
SeeSound "weapons/rocklf"
DeathSound "caco/death"
States
{
Spawn:
HEAD A 2 Bright A_CustomMissile("faintGhost1", 0, 0, 0)
Loop
Death:
HEAD GHIJ 8
HEAD k 8 A_SpawnItem("Fire", 0, 0)
HEAD L -1
Stop
}
}
//====================
ACTOR Fire
{
+NOBLOCKMAP
+NOTELEPORT
+NOGRAVITY
RenderStyle Add
Alpha 0.9
States
{
Spawn:
FIRE ABCD 6 Bright
FIRE E 6 Bright A_SpawnItem("paingasm", 0, 0)
FIRE FGH 6 Bright
Stop
}
}
//====================
actor paingasm 10004
{
Game Doom
SpawnID 19
Health 500
Radius 31
Height 56
Mass 400
Speed 25
PainChance 128
Monster
bloodcolor blue
+FLOAT +NOGRAVITY
AttackSound "imp/melee"
SeeSound "caco/sight"
PainSound "caco/pain"
DeathSound "caco/death"
ActiveSound "caco/active"
Obituary "you were removed from life by a paingasm"
HitObituary "your face got tore off by a paingasm"
translation "168:191=112:127"
RenderStyle Translucent
Alpha 0.5
States
{
Spawn:
HEAD A 10 A_Look
Loop
See:
HEAD A 3 A_Chase
HEAD A 0 A_CustomMissile("faintGhost2", 0, 0, 0)
Loop
Missile:
HEAD B 5 A_FaceTarget
HEAD C 5 A_FaceTarget
HEAD D 5 BRIGHT A_CustomMissile("painball", 24, 0, 0)
Goto See
Melee:
HEAD B 4 A_FaceTarget
HEAD C 4 A_FaceTarget
HEAD D 4 A_FaceTarget
HEAD C 4 A_SargAttack
HEAD B 4 A_FaceTarget
HEAD a 4 A_FaceTarget
Goto See
Pain:
HEAD E 3
HEAD E 3 A_Pain
HEAD F 6
Goto See
Death:
HEAD G 8
HEAD H 8 A_Scream
HEAD I 8
HEAD J 8
HEAD K 8 A_NoBlocking
HEAD L -1 A_SetFloorClip
Stop
}
}
//====================
ACTOR faintGhost1
{
Radius 1
Height 1
Speed 0
Damage 0
Mass 100
translation "168 : 191 = 112 : 127"
RenderStyle Translucent
Alpha 0.9
PROJECTILE
scale .25
States
{
Spawn:
TNT1 A 0 A_FaceTarget
TNT1 A 0 Thing_ChangeTid(0,390)
HEAD A 2 A_fadeout(0.05)
loop
}
}
//====================
ACTOR faintGhost2 : faintGhost1
{
scale 1
States
{
Spawn:
TNT1 A 0 A_FaceTarget
TNT1 A 0 Thing_ChangeTid(0,390)
HEAD A 2 A_fadeout(0.05)
loop
}
}
//====================
ACTOR faintGhost3 : faintGhost1
{
scale 1
States
{
Spawn:
TNT1 A 0 A_FaceTarget
TNT1 A 0 Thing_ChangeTid(0,390)
CARD AB 2 A_fadeout(0.05)
loop
}
}
//====================
ACTOR painball : BaronBall
{
translation "112 : 127 = 192 : 207"
States
{
Spawn:
BAL7 AB 4 BRIGHT
Loop
Death:
BAL7 CDE 6 BRIGHT
Stop
}
}
//====================
actor DeathBall : BaronBall
{
Damage 1
+SEEKERMISSILE
scale .8
States
{
Spawn:
BAL7 A 4 BRIGHT A_Tracer
BAL7 A 0 BRIGHT A_SpawnItem("BallTail", 0, 0)
BAL7 B 4 BRIGHT A_Tracer
BAL7 A 0 BRIGHT A_SpawnItem("BallTail", 0, 0)
Loop
Death:
BAL7 CDE 6 BRIGHT
Stop
}
}
//====================
ACTOR BallTail : faintGhost1
{
scale .6
States
{
Spawn:
TNT1 A 0 A_FaceTarget
TNT1 A 0 Thing_ChangeTid(0,390)
BAL7 AB 2 A_fadeout(0.05)
loop
}
}
//====================
ACTOR CardinalPlasma
{
Radius 11
Height 8
Speed 20
Damage 16
Projectile
+FLOATBOB
SeeSound "imp/attack"
DeathSound ""
scale 1.0
States
{
Spawn:
CRTA J 1 Bright A_SpawnItem("plasmaTail", 0, 0)
Loop
Death:
TNT1 A 0 A_FaceTarget
TNT1 A 0 Thing_ChangeTid(0,390)
CRTA J 2 A_fadeout(0.05)
Stop
}
}
//====================
ACTOR plasmaTail
{
Radius 1
Height 1
Speed 0
Damage 0
Mass 100
+FLOATBOB
PROJECTILE
scale .25
scale 1.0
States
{
Spawn:
TNT1 A 0 A_FaceTarget
TNT1 A 0 Thing_ChangeTid(0,390)
CRTA IHGFEDCBABCDEFGHIJ 2 BRIGHT A_fadeout(0.05)
loop
}
}
Идея данного кода в том, что заспавненый дружелюбный демон при некоторых условиях передаёт "живому" спавнеру Token, при получении которого он переходит в состояние, из которого отбирает у мастера этот же Token, а потом его убивает.
Токен явно прописан как Ammo, чтобы во время теста за его количеством было удобно следить.
Суть проблемы заключается в том, что Token у игрока не отнимается, но игрок умирает, что является индикатором того, что он всё ещё счается мастром, но токены у него через указатель не убавляются.
Вызывается демонспавнер через
TNT1 A 0 A_SpawnItemEx("DemonDogSpawner",1,0,10,10,0,0,0,SXF_SETMASTER)
от его изменения с Ammo на Inventory ничего, что ожидаемо, не меняется
Скрытый текст:
actor DemonSpawner
{
Radius 11
Height 8
Speed 20
-NOGRAVITY
States
{
Spawn:
TNT1 A 10
TNT1 A 0 A_SpawnItemEx("FriendlyDemon",0,0,0,0,0,0,0,SXF_SETMASTER)
Death:
TNT1 A 1 A_JumpIfInventory("Token",1,"Death1")
loop
Death1:
TNT1 A 0 A_TakeInventory("Token",100,AAPTR_MASTER)
TNT1 A 0 A_KillMaster
Stop
}
Вот код самого флендлидемона, из него видно, что способ передачи токена его мастеру такой же, но, почему-то, рабочий:
Скрытый текст:
actor FriendlyDemon:Demon replaces Demon
{
gravity 100000000
+Friendly
//+NoBlockmap
States
{
Spawn:
TNT1 A 1
TNT1 A 0 A_SetGravity(1)
goto See
Death:
SARG I 8
SARG J 8 A_Scream
SARG K 4
SARG L 4 A_NoBlocking
SARG M 4
TNT1 A 0 A_GiveInventory("Token",1,AAPTR_MASTER)
SARG N -1
Stop
}
}
Первая идея -- а попробуй в начале каждого Death-стейта у "DemonSpawner" "TNT1 A 0" прописать. Это известная ошибка в Decorate -- первый фрейм с нулевой длиной пропускается.
States {
Spawn:
TNT1 A 10
TNT1 A 0 A_SpawnItemEx("FriendlyDemon",0,0,0,0,0,0,0,SXF_SETMASTER)
Death:
TNT1 A 0
TNT1 A 1 A_JumpIfInventory("Token",1,"Death1")
Loop
Death1:
TNT1 A 0
TNT1 A 0 A_TakeInventory("Token",100,AAPTR_MASTER)
TNT1 A 0 A_KillMaster
Stop
}
в начале каждого Death-стейта у "DemonSpawner" "TNT1 A 0" прописать.
Не помогло почему-то.
Так же прописал попробовал прописать килл мастер в первый фрейм с нулевой длительностью как указано ниже - он сработал
Попробовал дать тому фрейму ненулевую длительность, учитывая что без киллмастера функция в стейте одна, жто никак не повлияет на результат, но и это не возымело эффекта.
Тут киллМастер работает:
Скрытый текст:
States {
Spawn:
TNT1 A 10
TNT1 A 0 A_SpawnItemEx("FriendlyDemon",0,0,0,0,0,0,0,SXF_SETMASTER)
Death:
TNT1 A 1 A_JumpIfInventory("Token",1,"Death1")
Loop
Death1:
TNT1 A 0 A_KillMaster
TNT1 A 0 A_TakeInventory("Token",100,AAPTR_MASTER)
TNT1 A 0
Stop
}
Тут тэйкинвентори не работает:
Скрытый текст:
States {
Spawn:
TNT1 A 10
TNT1 A 0 A_SpawnItemEx("FriendlyDemon",0,0,0,0,0,0,0,SXF_SETMASTER)
Death:
TNT1 A 0
TNT1 A 1 A_JumpIfInventory("Token",1,"Death1")
Loop
Death1:
TNT1 A 0
TNT1 A 1 A_TakeInventory("Token",100,AAPTR_MASTER)
Stop
}
Landsberg https://zdoom.org/wiki/A_TakeInventory Если верить точной документации функции (вот почему я топлю за точное документирование), то конструкция выглядит, как:
A_TakeInventory (string type [, int amount [, int flags [, pointer giveto]]])
Значит AAPTR_MASTER у тебя идёт не в поле пойнтера, а в поле флага. А это неверно.
По логике парсера должно быть как-то так: A_TakeInventory("Token",100,0,AAPTR_MASTER)
Привет всем. Пытался понять сам как сделать активацию скрипта, если игрока заметил actor встроенными средствами редактора (Slade). Так как я маппер, то ничего не вышло =D
Вопрос: есть ли универсальный способ, желательно простой, сработать некий скрипт, если игрока заметил actor ???
Исходя из статей я понял что, мне придётся создавать каждый раз новый актор под такую ситуацию. Мне это не подходит, поскольку на каждой карте таких ситуаций уже от 3 до 15.
Попробую объяснить, есть ли универсальный способ для всех таких ситуаций, в котором только переменные нужно подставлять. Приведу пример. В одном из чужих проектов выдрал скрипт и переделал:
script 701 (int atag0) { thingsound(atag0, "Metal/Sound35", 127); }
На карте этот скрипт можно вешать на любую линию с разными TID и воспроизводимый звук будет ссылаться всегда на нужный актор, а не на один и тот же, при том что скрипт один(универсальный).
Так вот мне уже стало интересно, возможно ли вообще создать что-то подобное (универсальное, чтобы не плодить гору акторов) для ситуации где воспроизведение звука идёт не через пересечение линии, а через то, когда другой актор заметил игрока? Некая камера с таргетом что ли.
Всем привет. Никто не разбирается в бесплатных программах для создания шрифтов ttf ? Я бы хотел импортировать более качественный, четкий современнный русский шрифт в старую игру unreal tournament... Но такие шрифты не работают и показывают крякозябры..Может что то надо в программе отредактировать для совместимости?
UT прекрасно читает текстовые файлы в старой кодировке 1251 , но не отображает текст в кодировке юникода...
Старые русские шрифты 1992 -1995 года как правило все подходят, но при увеличении такого шрифта зачастую теряются некоторые его элементы
Исходя из статей я понял что, мне придётся создавать каждый раз новый актор под такую ситуацию. Мне это не подходит, поскольку на каждой карте таких ситуаций уже от 3 до 15.
Попробую объяснить, есть ли универсальный способ для всех таких ситуаций, в котором только переменные нужно подставлять.
1. Создаётся невидимый актор-монстр писикак, он молчит и ничего не делает. Заметив игрока он переходит на стейт See, оттуда сразу на Death и исчезает.
2. Где-то на карте есть неприметный заныканный спецсектор. Допустим, там щель в стене и свечка стоит. А на самом деле там сидит невидимый писикак. Сектор имеет номерной tag.
3. Со старта карты работает зацикленный скрипт.
script 1 OPEN
if ThingCountNameSector("Pisikak", 0, tag)<1
{
Сделать любую требуемую хургаду;
terminate;
}
Delay(35);
restart;
4. Когда игрок проходит мимо спецсектора, писикак замечает игрока и исчезает. Скрипт замечает исчезновение писикака в спецсекторе и запускает все нужные события. Громко включает сигнализацию, вызывает ментов и.т.п.
Итого на все случаи жизни нам нужен один универсальный писикак, а всё остальное делается добавлением на карту новых спецсекторов и клонированием скриптов по вышеуказанному шаблону, где мы подставляем только tag спецсектора и пишем требуемые события.
Чтобы писикак нас видел, но издали не слышал, спецсектор надлежит огородить линиями с флагом SOUNDBLOCK. А можно наоборот запихать писикака в тайную комнатку, где он игрока не видит, а только слышит. Тогда можно делать на картах ситуации, которые надо проходить по стелсу, а если шумишь - приезжают менты.
Используется atag0 в которой записан TID актора, на котором на карте воспроизводится звук. А это как я понял нельзя прописать в скрипте с OPEN параметром, пробовал, ну или не так пробовал))) не шарю эх.
Если хочешь это же прописать в OPEN, то знай, что скрипты типа special : OPEN/ENTER/UNLOADING/и т.д. - не понимают параметров.
(за исключением скрипта DISCONNECT, но это исключение)
https://zdoom.org/wiki/Script_types#OPEN
Попробуй вместо (int atag0) юзать фиксированное число (константу). Если тебя устраивает такой выход.
Определяются константы так:
(в начале программы, до начала всех скриптов)
#define VAL 3131
#define STR_err "err"
#define Pi 3.14
P.S. Рекомендую, вместо магических чисел - 1000, 701 (как в твоем коде) - лучше использовать константы.
Во-первых, это облегчает чтение кода.
Во-вторых, избавляет от потенциальных ошибок.
В-третьих, облегчает модифицирование кода.
Представь, что тебе нужно изменить сто-пяцот значений по всему коду, скажем 701 -> 702.
С помощью определения константы, это изменение будет происходить только в одном месте (одной строке). Оцени красоту игры.