Welcome to U.A.C.
login / register 
Status: Guest
Архивы форума | iddqd.ru
Wolf 3D
ПравилаПравила ПоискПоиск
18+
Тема для новичков. Вопросы по маппингу/моддингу - любые!-2 Пред.  1, 2, 3 ... 6, 7, 8 ... 36, 37, 38  След.
   Список разделов - Местечко мапперов и моддеров - Тема для новичков. Вопросы по маппингу/моддингу - любые!-2Ответить
АвторСообщение
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +808
Ссылка на пост №241 Отправлено: 26.08.19 02:32:30
Liaslia пишет:
Что хотелось бы? Вырезать этот зум вместе с прицелом так,чтобы было возможно использовать его отдельно и с любым оружием,назначив активацию на произвольную кнопку ( не альтернативной атаки) Пробовал по разному- не хочет работать.Кто нибудь может помочь?Буду вам благодарен.
А в чём проблема-то? Открой вад, скопируй код и всех делов.
И если уже пробовал то почему не выложил код ружжа?
1 9 1
Romeo7662
Recruit
Next rank: Recruit after 4 points
6

Doom Rate: 2

Posts quality: +3
Ссылка на пост №242 Отправлено: 26.08.19 13:29:19
Доброго времени суток, прошу прощение если подобный вопрос задавали ранние, предоставляется ли возможным сделать модификацию для дума превращающую игру в МОБА? А главный вопрос как заставить монстров идти по отведённому пути и сражаться друг с другом? Возможно ли это технически?
Mostcus
- UAC Commissar -
Next rank: = UAC Commissar = after 295 pointsМодератор форумаАдмин сайта
6005

Doom Rate: 2.47

Posts quality: +1467
Ссылка на пост №243 Отправлено: 26.08.19 13:48:19
Romeo7662 пишет:
Возможно ли это технически?

Мне кажется, что если у тебя возникают настолько простые вопросы на уровне проектирования, то и от уровня реализации ничего хорошего ждать не стоит.

Рейтинг сообщения: -1, отметил(и): YURA_111, alekv, JSO x, Void Weaver, Romeo7662
1 2 1
Romeo7662
Recruit
Next rank: Recruit after 4 points
6

Doom Rate: 2

Posts quality: +3
Ссылка на пост №244 Отправлено: 26.08.19 13:52:41
Mostcus пишет:
Мне кажется, что если у тебя возникают настолько простые вопросы на уровне проектирования, то и от уровня реализации ничего хорошего ждать не стоит.
Лол, название темы прочитай пожалуйста внимательно. Это пустое сообщение не дающие ответ на мой вопрос.

Рейтинг сообщения: +2, отметил(и): Mostcus, YURA_111, JSO x, Void Weaver
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +808
Ссылка на пост №245 Отправлено: 26.08.19 14:18:19
Romeo7662 пишет:
предоставляется ли возможным сделать модификацию для дума превращающую игру в МОБА?
Да.

Romeo7662 пишет:
А главный вопрос как заставить монстров идти по отведённому пути и сражаться друг с другом?
Это два разных вопроса и далеко не самых важных.
1. Тащить монстров по заданному маршруту можно через маппинг-скриптовую конфигурацию PatrolPoint + Thing_SetGoal Подробнее здесь и по ссылкам оттуда.
2. По умолчанию монстры разных типов и так могут участвовать в инфайтинге, так что тебе стоит обрисовать задачу более конкретно.

Рейтинг сообщения: +2, отметил(и): JSO x, Romeo7662
1 9 1
FoxPlays
= Sergeant Major =
Next rank: UAC Sergeant Major after 36 points
644

Doom Rate: 2.14

Posts quality: +371
Ссылка на пост №246 Отправлено: 26.08.19 14:24:17
Romeo7662 пишет:
предоставляется ли возможным сделать модификацию для дума превращающую игру в МОБА?


Конечно, могу привести пример такой как - вад показанный на одном ютуб видео :) Помню вроде было больше информации про такой вад.
Можешь посмотреть, что находится внутри этого вада, его возможно скачать на форуме здума.
Работает это так - каждый монстр это новый PlayerClass, в пример игрока импа:

Скрытый текст:


actor ImpPlayer : MorphedPlayer
{
player.morphweapon "ImpFire"
player.startitem "ImpFire"
player.displayname "Imp"
player.viewheight 48
obituary "%o was burned by %k."
hitobituary "%o was clawed open by %k."
health 60
radius 20
height 56
mass 100
speed 0.25
painchance 200
seesound "imp/sight"
painsound "imp/pain"
deathsound "imp/death"
activesound "imp/active"
+FLOORCLIP
states
{
Spawn:
TROO AB 10
loop
See:
TROO AABBCCDD 3
loop
Melee:
Missile:
TROO EF 8
TROO G 6
goto Spawn
Pain:
TROO H 2
TROO H 2 A_Pain
goto Spawn
Death:
TROO I 8
TROO J 8 A_Scream
TROO K 6
TROO L 6 A_NoBlocking
TROO M -1
stop
XDeath:
TROO N 5
TROO O 5 A_XScream
TROO P 5
TROO Q 5 A_NoBlocking
TROO RST 5
TROO U -1
stop
Raise:
TROO ML 8
TROO KJI 6
goto Spawn
}
}



То-есть каждый монстр-игрок это просто тот-же игрок, но со своими параметрами, атаками и спрайтами, про это можно прочитать на здум вики :o


Только сейчас заметил что написано не - "превратить игрока в моба", а "превратить игру в мобу" :x


как заставить монстров идти по отведённому пути


При помощи Patrol Point актора. Проведи этими акторами дорогу до куда пойдёт монстр и внутри их (в параметрах, в редакторе карт) проставить всем нужные им параметры. Чтобы монстр пошёл по сделанной дороге, нужно это уложить в ACS скрипт. Примерно так:


script "название скрипта" (void)
{
Thing_Activate(тид монстра);
Thing_SetGoal(тид монстра,финальная точка дороги для монстра,0,1);
}


Не помню, обязателен ли Thing_Activate, но можешь ещё попробовать без него :D

Thing_SetGoal - говорит монстру, что ему нужно идти по дороге

Чтобы этот скрипт работал - нужно его вызвать, если нужно чтобы он активировался после прохождения определённого лайндефа на карте, то установи лайндефу экшн с названием - Script Execute. Лайндефу установи нужные экшну параметры и галочку на When Player walks over (всё расписано внутри редактора карт, что делает каждый параметр).

После этого всё должно работать :pc:


и сражаться друг с другом?


Да, тоже можно, при помощи - Thing_Hate (им устанавливается цель для убийства монстру)

Рейтинг сообщения: +2, отметил(и): JSO x, Romeo7662
1 1 1
Romeo7662
Recruit
Next rank: Recruit after 4 points
6

Doom Rate: 2

Posts quality: +3
Ссылка на пост №247 Отправлено: 26.08.19 14:25:16
Void Weaver
Благодарю, тогда как заставить сражаться монстров одного типа? И какие главные трудности по вашему мнению могут возник при реализации подобного мода?

Добавлено спустя 1 минуту 36 секунд:

FoxPlays
:ogo: Спасибо)

Рейтинг сообщения: +1, отметил(и): FoxPlays
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +808
Ссылка на пост №248 Отправлено: 26.08.19 14:37:11
Способов масса: скриптом по Thing_Hate, на декоре через A_CheckProximity, или на декоре же по применению снарядов с +HITTARGET.
----
Сам выбор сего жанра как такового это одна сплошная трудность от и до.

Рейтинг сообщения: +1, отметил(и): Romeo7662
1 9 1
N00b
Chief Petty Officer
Next rank: Chief Petty Officer after 18 points
922

Doom Rate: 2.15

Posts quality: +384
Ссылка на пост №249 Отправлено: 26.08.19 14:46:12
Liaslia
Void Weaver

Если я правильно понял, товарищ Liaslia требует сделать примерно такую же активацию, как бросок гранаты в брутале, а не просто добавить стейты конкретному оружию (например, снайперке). Я попробовал накодить сырую версию.
Вот это нужно поместить в wad в ламп ZSCRIPT или в pk3 в файл zscript.txt, при этом выдрать в этот же архив спрайты ZOOMA0 и ZOOMB0 из этого вашего "DUMP-3-weapons.pk3":
Скрытый текст:

version "4.0.0"

//modified kodi's code from https://forum.zdoom.org/viewtopic.php?p=969747

class RequestedScope : custominventory
{
	double currzoom;
	bool dir, stop_, restoresprite;
	statelabel currstate;
	PSprite ReadySprite;
   default
   {
      Inventory.Amount 1;
      inventory.maxamount 1;
      +INVENTORY.ALWAYSPICKUP;
      +INVENTORY.AUTOACTIVATE;
   }
   
   states
   {   
      use:
         TNT1 A 0
         {
            statelabel nextstate = "remove";
            let ownr = doomplayer(invoker.owner);
            if (ownr)                           
            {
               nextstate = "startoverlay";
            }
         return resolvestate(nextstate);
         }
         stop;
      
      remove:
         stop;
      
      startoverlay:
         TNT1 A 0
         {
            A_Overlay(2,"noscope");
			invoker.currstate = "noscope";
         }
         wait;
		 
      noscope:
	  TNT1 A 1;
	  goto decide;
	  
	  scopeready:
	  ZOOM A 1;
	  goto decide;
	  
	  shoot:
      ZOOM B 1 bright;
      goto decide;
	  
	  decide:
	  TNT1 A 0 {
		statelabel nextstate = invoker.currstate;
		let player = self.player;
		if (!player || !player.ReadyWeapon /*|| ...*/) {
			return ResolveState("noscope");
		}
		//player.ReadyWeapon.FOVScale = 1 / zoom;
		if (getplayerinput(INPUT_BUTTONS) & BT_ZOOM) {
			double currzoom = 1.0 / player.ReadyWeapon.FOVScale;
			if (invoker.dir) currzoom *= 1.05;
			else currzoom /= 1.05;
			if (currzoom > 12.0) { currzoom = 12.0; invoker.stop_ = 1; }
			else if (currzoom < 1.0) { currzoom = 1.0; invoker.stop_ = 1; }
			player.ReadyWeapon.FOVScale = 1.0 / currzoom;
		} else {
			if (invoker.stop_) {
				invoker.stop_ = 0;
				invoker.dir = !invoker.dir;
			}
		}
		//find a way to 
		if (!invoker.stop_ && (player.ReadyWeapon.FOVScale == 1.0 || player.ReadyWeapon.FOVScale == 0.0)) {
			nextstate = "noscope";
		} else {
			nextstate = "scopeready";
			if (getplayerinput(INPUT_BUTTONS) & BT_ATTACK) {
				nextstate = "shoot";
			}
		}
		
		invoker.currstate = nextstate;
		return ResolveState(nextstate);
	  }
      //never reaches this line
      Spawn:
         TNT1 A -1;
         Stop;
   }
   
   override void PostBeginPlay() {
		dir = 1;
		stop_ = 0;
		restoresprite = 0;
		ReadySprite = null;
   }
}



Для теста набрать в консоли "give requestedscope". Использует стандартный бинд кнопки zoom (если честно, не вспомню ни одного серьёзного мода (Complex Doom разве что?), где биндился бы Zoom, а не Altfire). Увеличение плавное от 1.0 до 12.0, при этом экспоненциальное, а не линейное, как в моде. Оружие запоминает уровень зума.
Текущие проблемы:
1. Из бензопилы и кулака также можно прицеливаться (исправляется легко проверками класса оружия).
2. При прицеливании не убирается спрайт пушки (возился с этими psprite-ами, возился, костыли городил --- не получилось, может, другой кто подсобит).
3. Поведение не совсем такое, как в моде (там красный прицел, когда винтовка перезаряжается, а у меня --- когда нажата кнопка выстрела; это косметический эффект, его можно при желании исправить проверкой стейта пушки).
4. Спрайты некрасивые, и их неплохо было бы подвинуть вниз.
Наиболее важная --- вторая.

Romeo7662
Пока писал пост, другие ответили. Ничего нового не прибавлю. Удачи! :o

---
Покойся с миром, старая тема. Да будет HDD на сервере тебе пухом.

Рейтинг сообщения: +3, отметил(и): JSO x, Void Weaver, Romeo7662
1 2
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +808
Ссылка на пост №250 Отправлено: 26.08.19 14:57:39
Гуд.
Я кстати недавно выкладывал тут аналогичную целиковую снайперку но на декоре. :) Правда там через пару постов прикручена возможность вызова оверлэя удара с ноги, а не самой снайперки как таковой.

ВТФ из psprite? Это какой-то зскриптовый термин? Я всё чаще и чаще вижу упоминание сабжа.
1 9 1
Liaslia
Marine
Next rank: Marine 1st class after 4 points
26

Doom Rate: 2

Ссылка на пост №251 Отправлено: 26.08.19 20:59:20
Void Weaver
N00b2015
Приветствую,уважаемые!Спасибо за ответы.
Дело в том,что само ружьё мне не нужно.А нужна именно оптика от него. Для использования зума с любым оружием.Можно конечно использовать обычный алиас зума.Но хотелось бы сделать красиво.А знаний по написанию кода увы,маловато.

N00b2015 Вы верно поняли.( только не "требую" а прошу,кто я нафиг такой чтобы требовать то?))))
Спасибо за труд.Всё сделал,как сказали,но вот что получилось.
Скрытый текст:



Добавлено спустя 12 минут 20 секунд:

Вообще идея то в чём?Когда играешь в Думец на мобильном устройстве, дисплей явно маловат.И попасть в какого-нибудь импа или ревенанта засевшего чёрт знает где,уже нелегко.Не во всех модах есть оружие с оптикой,да и часто находишь его под конец прохождения,когда уже не особо и нужно оно.Хотел сделать именно оптику.Скажем,вроде монокуляра.А та пушка из Dump привлекла интересной реализацией зума.
N00b
Chief Petty Officer
Next rank: Chief Petty Officer after 18 points
922

Doom Rate: 2.15

Posts quality: +384
Ссылка на пост №252 Отправлено: 27.08.19 17:18:53
Liaslia
УМВР на gz3.8.2_legacy. Может, что-то не так пошло. Вот готовый архив, я там спрайты поменял (на поле советского бинокля вместо прицела крестом), костылём заставил спрайты убираться и назначил выдачу этого предмета с помощью ACS при заходе игрока. Теперь всё должно работать.
Это штука, которая будет работать с любым оружием (если запустится :oops:)
Бинд Zoom я выбрал руководствуясь тем, что он почти нигде не используется. Если это неудобно, замени в 65 строчке BT_ZOOM на нужную клавишу, напр. BT_USER1 (см. таблицу в разделе статьи про GetPlayerInput для списка биндов по умолчанию, а если они все использованы, скажи, и я могу написать keyconf).
Ах да, максимальное увеличение 12.0 в строчке №69 тоже можно менять (там два вхождения!), но только до 50.0, как с помощью A_ZoomFactor (видимо, где-то в коде ещё ограничение стоит).
Void Weaver
Вот что-то об этом говорят. Граф пишет, что PSprite есть один слой изображения оружия на HUD.
---
Edit. Пофиксил малость (первая версия не работала с некоторыми модами, меняющими класс игрока), заменил zoom на user1, заменил увеличение на 20.0.

Рейтинг сообщения: +1, отметил(и): Void Weaver
1 2
Liaslia
Marine
Next rank: Marine 1st class after 4 points
26

Doom Rate: 2

Ссылка на пост №253 Отправлено: 27.08.19 22:35:27
N00b2015
Спасибо вам и извините уж за хлопоты,однако,увы...Ни первый ни второй вариант не заработали.Division by zero.
Вот.
Скрытый текст:

Насчёт назначения кнопок,хотя не в этом загвоздка,конечно,может просто прописать дополнительное значение в кейконфиг? Проще,наверное.И забиндить можно любую кнопку.

Добавлено спустя 2 минуты 18 секунд:

Скрин второй.
Скрытый текст:

N00b
Chief Petty Officer
Next rank: Chief Petty Officer after 18 points
922

Doom Rate: 2.15

Posts quality: +384
Ссылка на пост №254 Отправлено: 28.08.19 09:49:25
Liaslia
Так пока не за что "спасибо" говорить, раз не работает! :o
Попробуй вот так. Понял, где /0. Очень странно, что на той же версии у меня (правда, я на компе, а ещё gzdoom чистый) эта ошибка не вылезала. Наверное, дело в настройках.
Liaslia пишет:
прописать дополнительное значение в кейконфиг

Это было бы проще, если бы у меня какой-то ACS-ный скрипт вызывался по этой кнопке. У меня сделано по-другому. Если тебе неудобно биндить user1, я могу попробовать это переписать.

Edit. Новая версия (фиксы совместимости, user3).

Рейтинг сообщения: +1, отметил(и): Void Weaver
1 2
Liaslia
Marine
Next rank: Marine 1st class after 4 points
26

Doom Rate: 2

Ссылка на пост №255 Отправлено: 28.08.19 10:49:40
N00b2015
Благодарность в первую очередь за внимание и желание помочь.Оно сейчас редкость так то...Но теперь уже и за результат не грех сказать спасибо!) С оригинальным Doom 2 всё отменно заработало!
Скрытый текст:

А вот при попытке запустить с модами в консоли сообщение о неизвестном типе
айтема.
Скрытый текст:

По поводу запуска,наверно всё же есть отличия гоззы в Delta Touch и чистой на ПК.Встречал пару модов которые не желали работать в Дельте,но на компе у людей работали нормально. По назначению кнопок, User1 используется в одном моде.Если нетрудно,поменяй на User3.

Добавлено спустя 4 часа 56 минут 33 секунды:

N00b2015
Супер!Громадное спасибо и низкий поклон,Мастер! :cool2:
Doomgay1999
- Corporal -
Next rank: = Corporal = after 4 points
96

Doom Rate: 2

Posts quality: +1
Ссылка на пост №256 Отправлено: 28.08.19 21:28:22
А я могу как-то вытащить из Sega Saturn уровни? Мне просто интересно.
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +808
Ссылка на пост №257 Отправлено: 29.08.19 00:39:52
Doomgay1999 пишет:
А я могу как-то вытащить из Sega Saturn уровни? Мне просто интересно.
Да. Каждая мапа хранится в отдельном ваде в директории
All the maps are stored in the /MAPDIRXXX directory with the IWAD header included.
В самом JIMSDOOM.WAD, содержатся ресурсы и часть графики типа тайтлов, спрайтов кнопок и др. Детали по остальным ресурсам вада здесь.
1 9 1
Doomgay1999
- Corporal -
Next rank: = Corporal = after 4 points
96

Doom Rate: 2

Posts quality: +1
Ссылка на пост №258 Отправлено: 29.08.19 02:55:00
Void Weaver
Где мне скачать Jimsdoom.wad?
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +808
Ссылка на пост №259 Отправлено: 29.08.19 04:45:23
Очевидно там же где ты собирался брать Sega Saturn. Например можно с нашего сайта.

Добавлено спустя 1 день 19 часов 14 минут 8 секунд:

Актору без тида нужно получить Radius его TRACER'а. Написал следующий скрипт:
Script "GetTracerRadius" (void)
{
Thing_ChangeTID(0,UniqueTID());
Delay(1);
SetActivator(ActivatorTID(),AAPTR_TRACER);
SetResultValue(GetActorProperty(0,APROP_Radius));
}
Он работает, но имеется делэй, ибо без него текущий код вешает игру. Вопрос: можно ли как-то оптимизировать код, в частности избавиться от делэя?

Решено:
Script "GetTracerRadius" (void)
{
Thing_ChangeTID(0,UniqueTID());
SetActivator(ActivatorTID(),AAPTR_TRACER);
SetResultValue(GetActorProperty(0,APROP_Radius)>>16);
}
1 9 1
MelaDoZer
Recruit
Next rank: Marine after 6 points
14

Doom Rate: 2

Posts quality: +13
Ссылка на пост №260 Отправлено: 05.09.19 21:36:11
Всем здравствуйте! Долго был в рид-онли, но наконец-то решился зарегистрироваться.
Совсем недавно появилось несколько по ZScript'у. Я вообще с этим делом слабо дружу, но пытаюсь разобраться. Помогите, пожалуйста!
1. У меня есть следующий код, задача которого заключается в добавлении актёров на уровень. Однако, мне нужно и удалить одного монстра, прям как Thing_Remove в ACS, но по индексу, а не по Thing ID. Например, вот этого 101 шотган-гая. Мне кажется что это совсем простая задача, но добраться до решения всё не выходит. Не понимаю, как обратиться именно к этому актёру, такие дела.


Скрытый текст:

class Doom_MapHashesChecker_Monsters play
{
	static void Doom_CheckMapHashes_Monsters()
	{																
		if(level.GetChecksum() == 'B49F7A6C519757D390D52667DB7D8793') // - Ultimate Doom E1M1: Hangar
		{
			UltimateDoomMonsters.UltimateDoomE1M1Monsters();
		}
	}
}


class UltimateDoomMonsters play
{
    static void UltimateDoomE1M1Monsters()	//B49F7A6C519757D390D52667DB7D8793 - Ultimate Doom E1M1: Hangar
    {
		int skill_level;
		skill_level = G_SkillPropertyInt(SKILLP_ACSReturn);
		
		if (skill_level >= 3)
		{
			actor Zombieman1;
			Zombieman1 = Actor.Spawn("Zombieman", (1368.0,-2520.0,0), ALLOW_REPLACE);
			Zombieman1.Angle = 225.0;
			Zombieman1.bAmbush = True;
		}
	}
}



2. Может, возможно заменить одного конкретного актёра на другого, как в первом вопросе? Того же сержанта с индексом 101 на импа, например.
3. Самый, наверное, специфический вопрос. Возможно ли ZScript'ом менять геометрию уровня до той же его загрузки, например? Не на уровне ACS'а, конечно, нужна возможность добавлять вертексы, рисовать новые сектора. Я сам подозреваю, что нет, но надежда у меня все ещё есть, так как на вики сказано о "Map data access (and partial control)".
Я не могу редактировать сами карты (и они в стандартном Думовском формате, не написал раньше), поэтому пытаюсь всё сделать скриптами, да и весь остальной код у меня написан ZScript'ом.
YURA_111
UAC Sergeant Major
Next rank: Chief Petty Officer after 82 points
768

Doom Rate: 1.98

Posts quality: +137
Ссылка на пост №261 Отправлено: 06.09.19 22:36:02
MelaDoZer пишет:
Может, возможно заменить одного конкретного актёра на другого, как в первом вопросе? Того же сержанта с индексом 101 на импа, например.


Может RandomSpawner? ( https://zdoom.org/wiki/Classes:RandomSpawner )
Правда в этом случае заменяются все монстры этого класса на уровне и в игре.
MelaDoZer
Recruit
Next rank: Marine after 6 points
14

Doom Rate: 2

Posts quality: +13
Ссылка на пост №262 Отправлено: 07.09.19 03:41:37
YURA_111 пишет:
Может RandomSpawner? ( https://zdoom.org/wiki/Classes:RandomSpawner )
Правда в этом случае заменяются все монстры этого класса на уровне и в игре.



Увы, не могу как раз так сделать, не такая цель :( Но спасибо!
Просто пытаюсь, как в пример, заменить одного конкретного сержанта на E1M1 (индекс 90) на пулемётчика, как было в Playstation Doom на сложности Ultra-Violence. Заспаунить монстра легко, как и повернуть его и присвоить флаги, а вот как удалять определённый thing c карты ZScript'ом мне пока непонятно :) По идее, если бы я знал как удалить монстра, то я бы смог написать функцию для эдакой замены (и получился бы ответ на мой второй вопрос, хех).

В ACS лезть не хочется, а то придётся как-то код разрывать. Есть у меня ACS-библиотека, которая на OPEN удаляет thing'и с тегами, но я вообще хотел про неё забыть и не использовать больше :D Должен быть какой-то способ...
ZZYZX
- UAC Commissar -
Next rank: = UAC Commissar = after 16 pointsМодератор форума
6284

Doom Rate: 1.65

Posts quality: +1633
Ссылка на пост №263 Отправлено: 07.09.19 03:52:39
Destroy() от объекта, чтобы удалить.

Только я не уверен, как найти актора именно по индексу из карты, а не по тэгу. И сохраняется ли эта информация вообще при загрузке. Известно что именно для акторов дум херит довольно много информации, в том числе UDMF-свойства от акторов, например (именно поэтому нельзя получить "comment" у актора, даже если он был — "не реализовано"). Индекс, вероятно, не сохраняется тоже, во всяком случае я его не нашёл.

Есть код в LevelCompatibility, но этот код вызывается не в любое время, а между загрузками карты. И да, там есть доступ к индексу тхинга. Только нормальному человеку это использовать невозможно никак, это встроенный файл в гздуме.

Предлагаю искать монстра по X/Y и типу.

Рейтинг сообщения: +3, отметил(и): JSO x, Void Weaver, MelaDoZer
2 2 1
MelaDoZer
Recruit
Next rank: Marine after 6 points
14

Doom Rate: 2

Posts quality: +13
Ссылка на пост №264 Отправлено: 07.09.19 06:05:20
ZZYZX пишет:
олько я не уверен, как найти актора именно по индексу из карты, а не по тэгу. И сохраняется ли эта информация вообще при загрузке. Известно что именно для акторов дум херит довольно много информации, в том числе UDMF-свойства от акторов, например (именно поэтому нельзя получить "comment" у актора, даже если он был — "не реализовано"). Индекс, вероятно, не сохраняется тоже, во всяком случае я его не нашёл.

Есть код в LevelCompatibility, но этот код вызывается не в любое время, а между загрузками карты. И да, там есть доступ к индексу тхинга. Только нормальному человеку это использовать невозможно никак, это встроенный файл в гздуме.


Да, я как-то давно читал, что LevelCompatibility недоступен для наследования (вроде так, поправьте если что, я могу неправильно термины применять :D).
Однако, у меня получилось. Вычитал на форуме ZDoom'а, что его можно юзать. Я не заметил как это изменили в GZDoom, выходит. Вот пример (да и вдруг кому нужно будет):
Скрытый текст:

class UltimateDoomMonsters : LevelCompatibility
{
    protected void Apply(Name checksum, String mapname)
    {
	if ('B49F7A6C519757D390D52667DB7D8793' == checksum) // - Ultimate Doom E1M1: Hangar
		{
			SetThingFlags(114, 0);
		}
	}
}


Это убирает Bloody mess 1 напротив старта. Как на скрине:
Скрытый текст:



Однако, теперь какие-то проблемы со спауном монстров в этом коде и GZDoom просто крашится, по ошибкам пусто (просто уровень загружается, да и всё). Ну это не так уж и страшно, с этим можно ещё разобраться (думаю это из-за самой функции Apply, тут уж придётся поделить).
Спасибо большое, я бы даже не копал в направлении LevelCompatibility, если бы не напомнили :) Думал, что нужно ждать обновления гоззы.
Впрочем, надо ещё разобраться с архитектурой, насколько её можно изменять :)

Рейтинг сообщения: +1, отметил(и): Void Weaver
Толик
Recruit
Next rank: Marine after 2 points
18

Doom Rate: 1.64

Posts quality: +9
Ссылка на пост №265 Отправлено: 09.09.19 22:13:39
ZZYZX пишет:
Известно что именно для акторов дум херит довольно много информации, в том числе UDMF-свойства от акторов, например (именно поэтому нельзя получить "comment" у актора, даже если он был — "не реализовано"). Индекс, вероятно, не сохраняется тоже, во всяком случае я его не нашёл.

Откуда инфа?

MelaDoZer пишет:
Вычитал на форуме ZDoom'а, что его можно юзать

Можно чексумму получить и просто так с помощью levellocals.getchecksum() и потом в worldloded/worldthingspawned/etc ивенте поменять монстра если его координаты, тип и чексума карты совпадают с заданными.
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +808
Ссылка на пост №266 Отправлено: 10.09.19 07:25:36
Имеется актор с набором спрайтов
СПРТ АБВГДЕ 1
и этим спрайтам в редакторе выставлен определённый оффсет (как для монстра).

Также имеется другой актор с тем же набором спрайтов
СПРТ АБВГДЕ 1
но для этого актора нужен совершенно иной оффсет (как для снаряда).

Вопрос: можно ли в пределах одного вада иметь одинаковый набор спрайтов с разными оффсетами, и если да то как это сделать?
Конечно можно тупо переименовать второй набор спрайтов, но их довольно много + будет дубликат ресурсов, и поэтому такой вариант только если не найдётся других решений.
1 9 1
Герр Смертоносец
= Warrant Officer =
Next rank: - 2nd Lieutenant - after 127 points
1163

Doom Rate: 1.34

Posts quality: +1036
Ссылка на пост №267 Отправлено: 10.09.19 16:18:07
Void Weaver пишет:
Вопрос: можно ли в пределах одного вада иметь одинаковый набор спрайтов с разными оффсетами, и если да то как это сделать?

Нормальный принудительный оффсет "СПРТ А 1 Offset(x, y)" работает только для HUD-пушек. С какого лешего эту фичу не стали распространять на все спрайты - сие тайна великая есть.
Теоретически единственный обходной путь (и только по вертикали) - шаманить с A_SetFloatBobPhase, благо что амплитуду можно задать произвольно. Второй обходной путь - это делать актора невидимым и спавнить самоварпящихся призраков с NOINTERACTION-флагов, но это уже совсем троллейбус из хлеба.
Что характерно - а вот для моделей такой путь есть! Ибо всё прописывается в MODELDEF, и можно на одну модель запилить сколько угодно комбинацией. Впрочем, я много раз говорил, что Z-порты являются одной большой насмешкой над универсальностью. :oops:

Рейтинг сообщения: +1, отметил(и): Void Weaver
5
ZZYZX
- UAC Commissar -
Next rank: = UAC Commissar = after 16 pointsМодератор форума
6284

Doom Rate: 1.65

Posts quality: +1633
Ссылка на пост №268 Отправлено: 10.09.19 17:11:05
Толик
Из исходников гздума, очевидно, не сам придумал
2 2 1
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +808
Ссылка на пост №269 Отправлено: 10.09.19 17:48:46
Герр Смертоносец пишет:
Нормальный принудительный оффсет "СПРТ А 1 Offset(x, y)" работает только для HUD-пушек. С какого лешего эту фичу не стали распространять на все спрайты - сие тайна великая есть.
Мне куда более "доставило" что помимо кейворда есть ещё и A_WeaponOffset и A_OverlayOffset, которые разумеется не пашут на акторах кроме волын и кинвентори.

Герр Смертоносец пишет:
Второй обходной путь - это делать актора невидимым и спавнить самоварпящихся призраков с NOINTERACTION-флагов, но это уже совсем троллейбус из хлеба.
Ну ты, блин, кулибин! В общем-то мне как раз и нужно смещение по вертикали, пожалуй закинусь хлебцем. :crazy:
EDIT:
Работает идеально!
1 9 1
Толик
Recruit
Next rank: Marine after 2 points
18

Doom Rate: 1.64

Posts quality: +9
Ссылка на пост №270 Отправлено: 10.09.19 22:24:59
ZZYZX пишет:
Из исходников гздума

Ссылочку.
Неужели граф парсер для удмфа написать не в состоянии?
ZZYZX
- UAC Commissar -
Next rank: = UAC Commissar = after 16 pointsМодератор форума
6284

Doom Rate: 1.65

Posts quality: +1633
Ссылка на пост №271 Отправлено: 10.09.19 23:35:02
Толик
Мне не нравятся откровенные докапывания, но вот:
https://github.com/coelckers/gzdoom/blob/master/src/playsim/p_mobj.cpp#L5203
Функция по ссылке осуществляет создание актора из FMapThing.
FMapThing определён тут:
https://github.com/coelckers/gzdoom/blob/master/src/doomdata.h#L356
А читается из удмф тут:
https://github.com/coelckers/gzdoom/blob/master/src/maploader/udmf.cpp#L471

Понятие "индекс тхинга" там вообще отсутствует. Не нужно это было никому. Оно есть только в массиве converted чётотам, именно на этом уровне работает обработка совместимости.
Более того, код настолько древний, что там встречаются выражения в духе "The fields of the mapthing should already be in host byte order". Такие комментарии характерны для софта который читал данные сразу в структуру.

Подозреваю что те же UDMF-комментарии у тхинга нельзя прочитать по той же причине — их банально никто не сохраняет, читая из карты.
А чтобы их можно было прочитать, необходимо сначала запихать их в FMapThing, а потом в актора.
2 2 1
Толик
Recruit
Next rank: Marine after 2 points
18

Doom Rate: 1.64

Posts quality: +9
Ссылка на пост №272 Отправлено: 11.09.19 21:25:04
Мне было просто интересно глянуть на реализацию.
И да, это действительно наследие ренди. Граф его не трогает потому что работает.
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +808
Ссылка на пост №273 Отправлено: 11.09.19 22:35:13
Можно ли задать спрайту такое вращение?
1 9 1
ZZYZX
- UAC Commissar -
Next rank: = UAC Commissar = after 16 pointsМодератор форума
6284

Doom Rate: 1.65

Posts quality: +1633
Ссылка на пост №274 Отправлено: 12.09.19 00:28:10
Можно, но придётся добавлять +WALLSPRITE / +FLATSPRITE / +FLOORSPRITE (или как там их) и вертеть спрайт руками в любую сторону )
2 2 1
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +808
Ссылка на пост №275 Отправлено: 12.09.19 08:38:25
WALLSPRITE и FLATSPRITE не совместимы друг с другом, а насчёт "вертеть руками" хотелось бы подробней. Потому что на зфоруме один чел посоветовал что-то не менее расплывчатое:
Wouldn't this, in effect, be the same as simply decreasing the y-scale of the actor while increasing it's z-pos?

Если что то речь идёт о кастомных спрайтах снаряда, которые я хотел бы заставить вращаться в полёте в стиле KnightAxe еретиковских Кнайтов.
Мб. как-то через SpriteAngle?
---
1. Как записать чтобы что-то происходило только когда некая переменная кратна 10? Так: If(user_var%10==0)?
2. Как записать 256-маску шанса по проценту от текущих хп?
Т. е. нужно что-то типа A_JumpIf([если Health=100% то шанс 0, если Health=50% то 128, если Health=1% то 256],"state")
1 9 1
JSO x
- 2nd Lieutenant -
Next rank: = 2nd Lieutenant = after 36 points
1404

Doom Rate: 2.27

Posts quality: +789
Ссылка на пост №276 Отправлено: 12.09.19 09:27:29
1) Да, так. И на "user_var == 0" действие тоже будет выполняться.

2) На Decorate -- "A_JumpIf( 256 - health / GetSpawnHealth() * 256, "state" )". На ZScript -- то же самое, но лучше с использованием переменной "StartHealth".

Рейтинг сообщения: +1, отметил(и): Void Weaver
2 8 1
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +808
Ссылка на пост №277 Отправлено: 12.09.19 10:33:52
2) То что надо! Я правильно понимаю что прямая пропорция будет "A_Jump( health / GetSpawnHealth() * 256, "state" )",
а отсчёт с половины хп будет "A_Jump(256 - health / GetSpawnHealth()/2 * 256, "state" )" или "-256" просчитается не корректно и для маски с 50% надо писать предварительное условие типа:

If(Health<GetSpawnHealth/2)
{
Return A_Jump(256-Health/GetSpawnHealth/2*256,"state");
}
Else
{
Return state("");
}
1 9 1
ZZYZX
- UAC Commissar -
Next rank: = UAC Commissar = after 16 pointsМодератор форума
6284

Doom Rate: 1.65

Posts quality: +1633
Ссылка на пост №278 Отправлено: 12.09.19 14:39:02
Void Weaver пишет:
WALLSPRITE и FLATSPRITE не совместимы друг с другом, а насчёт "вертеть руками" хотелось бы подробней. Потому что на зфоруме один чел посоветовал что-то не менее расплывчатое:

Тебе посоветовали пытаться добиться эффекта вращения спрайта вокруг своей оси используя X/YScale :)

А вообще какая картинка, такой и ответ. Я нифига не понял в какую сторону последний кадр должен крутиться.
2 2 1
VladGuardian
- UAC Commissar -
Next rank: = UAC Commissar = after 277 points
6023

Doom Rate: 1.33

Posts quality: +2227
Ссылка на пост №279 Отправлено: 12.09.19 14:52:05
Void Weaver пишет:
Можно ли задать спрайту такое вращение?

Опыт трёхмерных афинных преобразований говорит нам, что вращение объекта вокруг произвольного вектора (ex,ey,ez),
представимо в виде комбинации двух вращений вокруг осей OX + OY (или вокруг OX + OZ, неважно)
В приложении к этим вашим декорейтам / зскриптам - не знаю, так как я несколько отстал от жизни.

Немного оффтоп:
Когда-то давно (около 15-20 лет назад) я для себя написал функцию вращения точки вокруг оси (Q1, Q2) на угол angle.
Она реально работает, хотя скорее всего, с точки зрения скорости выполнения она не столь эффективна, как прямые преобразования матрицы движения...
Скрытый текст:

void Cxyz::Rotate(float angle, const Cxyz& Q1, const Cxyz& Q2)
{
  // копии: Q1,Q2 нельзя изменять
  Cxyz R1=Q1,R2=Q2;

  R1=P0; R2-=R1; (*this)-=R1;

  // вычисляем нужный угол
  float angle_xoz=0, angle_yoz=0;
  if (R2.z-R1.z!=0 || R2.x-R1.x!=0)
    angle_xoz = -ATAN2(R2.x-R1.x, R2.z-R1.z);

  R1.RotateY(angle_xoz);
  R2.RotateY(angle_xoz);
  this->RotateY(angle_xoz);

  // вычисляем нужный угол
  if (R2.z-R1.z!=0 || R2.y-R1.y!=0)
    angle_yoz = ATAN2(R2.y-R1.y, R2.z-R1.z);

  this->RotateX(angle_yoz);
  this->RotateZ(angle);
  this->RotateX(-angle_yoz);
  this->RotateY(-angle_xoz);
  (*this)+=R1;
}


Рейтинг сообщения: +1, отметил(и): Mostcus
4 17 23
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +808
Ссылка на пост №280 Отправлено: 12.09.19 15:10:52
ZZYZX пишет:
Тебе посоветовали пытаться добиться эффекта вращения спрайта вокруг своей оси используя X/YScale :)
Ну я приблизительно так и понял, но абсолютно не понимаю как это реализовать, поскольку столь же не въезжаю как это должно помочь.

ZZYZX пишет:
А вообще какая картинка, такой и ответ. Я нифига не понял в какую сторону последний кадр должен крутиться.
Ну как сумел, хотя дорисовка третьей оси могла бы наверное сделать пикчу более информативной.
Попробую "на пальцах".
Представь спрайт монстра (но в моём случае снаряда), например импа, обращённого к игроку "лицом". Ну а теперь надо придать такое вращение чтобы поворот совершался в центре спрайта (пузе), так чтобы в следующем кадре "ноги" импа оторвались от земли а "голова" наоборот наклонилась к земле в сторону зрителя.
И ещё один.
Помните старый советский настольный футбол с футболистами на осях? :ha: Ну вот такое вращение мне и нужно. В нормальной геометрии это вроде как вращение вокруг Х?


VladGuardian
Еяпп, то проблема как раз в том что гозза (по крайней мере декор) тупо не предоставляет возможности вращения по второй оси. Либо я об этом не в курсе, что и пытаюсь выяснить.
1 9 1
Страница 7 из 38Перейти наверх Пред.  1, 2, 3 ... 6, 7, 8 ... 36, 37, 38  След.
   Список разделов - Местечко мапперов и моддеров - Тема для новичков. Вопросы по маппингу/моддингу - любые!-2