Всякое для маппинга и моддинга 2.

Статья была изменена автором.

Данный тутор продолжение тутора Всякое для маппинга и моддинга,

и как там и было, все уровни в UDMF формате

Ну что, не ждали, и всё таки мы разобрали не всё

и нам id-tech 1 изучать ещё много

так что, ловите

ДЛЯ МОДДИНГА

Наклоны, повороты

Хотите изменит наклон\поворот предмета? вам нужен A_SETROLL, A_SETPITCH, A_SETANGLE

A_SETROLL(roll[- + =] число) Наклон влево\вправо,

A_SETPITCH(PITCH[- + =] число) Наклон вверх\вниз,

И кстати, когда вы смотрите вверх вниз вы изменяете pitch игрока,

A_SETANGLE(ANGLE[- + =] число) Поворот вправо\влево,

Так к примеру можно сделать наклон камеры игрока

actor newDoomPlayer : PlayerPawn
{
		Speed 1
		Health 100
		Radius 16
		Height 56
		Mass 100
		PainChance 255
		Player.DisplayName "Marine"
		Player.CrouchSprite "PLYC"
		Player.StartItem "Pistol"
		Player.StartItem "Fist"
		Player.StartItem "Clip", 50
		Player.WeaponSlot 1, "Fist", "Chainsaw"
		Player.WeaponSlot 2, "Pistol"
		Player.WeaponSlot 3, "Shotgun", "SuperShotgun"
		Player.WeaponSlot 4, "Chaingun"
		Player.WeaponSlot 5, "RocketLauncher"
		Player.WeaponSlot 6, "PlasmaRifle"
		Player.WeaponSlot 7, "BFG9000"
		
		Player.ColorRange 112, 127
		Player.Colorset 0, "$TXT_COLOR_GREEN",		0x70, 0x7F,  0x72
		Player.Colorset 1, "$TXT_COLOR_GRAY",		0x60, 0x6F,  0x62
		Player.Colorset 2, "$TXT_COLOR_BROWN",		0x40, 0x4F,  0x42
		Player.Colorset 3, "$TXT_COLOR_RED",		0x20, 0x2F,  0x22
		// Doom Legacy additions
		Player.Colorset 4, "$TXT_COLOR_LIGHTGRAY",	0x58, 0x67,  0x5A
		Player.Colorset 5, "$TXT_COLOR_LIGHTBROWN",	0x38, 0x47,  0x3A
		Player.Colorset 6, "$TXT_COLOR_LIGHTRED",	0xB0, 0xBF,  0xB2
		Player.Colorset 7, "$TXT_COLOR_LIGHTBLUE",	0xC0, 0xCF,  0xC2
	States
	{
	Spawn:
		PLAY A -1 a_setroll(0)
		Loop
	See:
		PLAY AB 2 a_setroll(roll+0.5)
		PLAY A 0 a_setroll(0)
		play CD 2 a_setroll(roll-0.5)
		Loop
	Missile:
		PLAY E 6 a_setpitch(pitch+1)
                play e 0 a_recoil(1) //ну эт уже не наклон а отхождение назад
                PLAY E 6 a_setpitch(pitch-1)
		Goto Spawn
	Melee:
		PLAY F 6 BRIGHT
		Goto Missile
	Pain:
		PLAY G 0 a_recoil(1)
                play g 0 a_setangle(angle+1)
		PLAY G 2 A_Pain
		Goto Spawn
	Death:
		PLAY H 0 A_PlayerSkinCheck("AltSkinDeath")
	Death1:
		PLAY H 10 a_setroll(90)
		PLAY I 10 A_PlayerScream
		PLAY J 10 A_NoBlocking
		PLAY KLM 10
		PLAY N -1
		Stop
	XDeath:
		PLAY O 0 A_PlayerSkinCheck("AltSkinXDeath")
	XDeath1:
		PLAY O 5 
		PLAY P 5 A_XScream
		PLAY Q 5 A_NoBlocking
		PLAY RSTUV 5 a_setroll(roll+90)
		PLAY W -1
		Stop
	AltSkinDeath:
		PLAY H 6 a_setroll(90)
		PLAY I 6 A_PlayerScream
		PLAY JK 6 
		PLAY L 6 A_NoBlocking
		PLAY MNO 6
		PLAY P -1
		Stop
	AltSkinXDeath:
		PLAY Q 5 A_PlayerScream
		PLAY R 0 A_NoBlocking
		PLAY R 5 A_SkullPop
		PLAY STUVWX 5 a_setroll(roll+90)
		PLAY Y -1
		Stop
	}
}

Если что, стейт spawn у игрока это когда он просто стоит, see ты идёшь, melee/missile стрельба, death смэрт, xdeath варш мен, pain когда ударился мизинцем об тумбочку

Но делая такой поворот камеры, будьте осторожны с a_setroll, так как этот параметр игрок не может изменить, то есть повернуть влево\вправо вы можете и посмотреть вверх вниз тож можете но наклонится влево\вправо вы не можете, и roll может изменить только код.

Отпечатка

Так, нам нужна отпечатка после пули

decal имя отпечатки
{
	pic спрайт отпечатки
	x-scale размер по горизонтали
	y-scale размер по вертикали
}

И потклучаем отпечатку к декорэйт

actor подзатыльник
{
  height 8
  radius 6
  damage 5
  speed 20 
  -> DECAL ИМЯ <-
  PROJECTILE
  states
  {
  Spawn:
    BAL1 AB 4 bright
    loop
  Death:
    BAL1 CDE 6 bright
    stop
  }
}
УРА ФИЗИКА! мой не любимый урок

Бочка не отталкивается, оружие не отскакивает при сильном ударе в стену да оно и не подвижно, ну и где реалистичность? Ну так она есть, но её код в предметы не добавлена в дум.

+PUSHABLE													
PushFactor число силы отталкивания

Это нужно для отталкивания.

  +HexenBounce
  +CanBounceWater //отскок от воды, по желанию
  BounceFactor число силы отскока

Это нужно для отскока.

Отскок и отталкивание совсем другие вещи. отталкивание: если в предмет врезался другой актор то предмет оттолкнётся от актора, отскок: если предмет влетел в стену то он отскочит от стены

и то и другое можно впихнуть в один актор

Для маппинга

Итак, я сделал карту со всяким для маппинга и сейчас мы будем её разбирать

День, ночь, день, ночь

Гифка такая не качественная потому что очень сильно сжата до 2мб, увы такие правила сайта.

И под изменением света я имею в виду не тот разноцветный свет а изменение brightness сектора.

И так, давайте сделаем acs script и подключим его к линии

script 1 (VOID)
{
      Light_ChangeToValue(тэг сектора, число brightness);
}

+БОНУС

для рестарта или цикла скрипта acs нужен

Рестарт:

restart;

Цикл:

while (TRUE) 
{
   комманды
}

И цикл тож надо вставить в сам скрипт

Пока пока brightness 🙂

Есть 23 вида dynamic light акторов, но на гифке 3 основных динамических светов

PULSE LIGHT

Медленное перекачивание первого радиуса света до второго радиуса

FLICKER LIGHT

Мигающий свет, но когда он мигает он не пропадает на время а потом включается, а время работает радиус света primary intensity а потом работает радиус secondary intensity. Ну если поставить на какой-то из радиусов 0 то свет будет пропадать а потом светится и так циклически

LIGHT

Ну тут функций и нету, простой динамический свет, чей радиус света можно изменить

Ооо и кстти, у света можно изменять цвет с помощью аргументов актора red, green, blue

и я напишу несколько комбинаций цветов.

ЖЁЛТЫЙ = RED 255, GREEN 255, BLUE 0.

ФИОЛЕТОВЫЙ = RED 255, GREEN 0, BLUE 255.

ОРАНЖЕВЫЙ = RED 255, GREEN 155, BLUE 0.

БИРЮЗОВЫЙ = RED 0, GREEN 255, BLUE 255.

Ну с красным, зелёным и синим понятно, и ещё, чёрный цвет не виден

Изменение флага в acs

Итак, когда мы переходим линию нас атакует три напарника из тутора DECORATE. Создание напарников и в том прикол что это напарник

и то что они не уходят с места это всего лишь линии вокруг них с флагом block monsters

но тут два вопроса

  • Почему они в нас стреляют
  • Почему они только на стейте выстрела

И теперь давайте опять нырнём в acs

script 2 (VOID)
{
	while (TRUE)
	{
	SETACTORFLAG(19, "FRIENDLY", 0);
	SetActorState(19, "Missile2");
	delay(26);
	}
}

И давайте всё это разрежем на кусочки чтобы разглядеть по лучше.

SETACTORFLAG('id актора, "флаг", bool(true(флаг включён) или false(флаг выключен)));
SetActorState(id актора, "стейт");
delay(число тиков); //задержка, ожидание

И вот ответ, а delay нужен что бы стейт доработал до конца а потом опять включился с помощью цикла.

Но самое главное в этой сцене это изменение флага, а SetActorState просто делает стрельбу постоянной (и при этом на столько постоянной что эта команда даже не даёт прокрутится стейту смерти актора, держите в курсе).

Телепорт-телеторт

И когда мы переходим через линию у нас на глазах телепортятся монстры, ну и камера изменяется. Ну камера не к чему, но телепорт.

Итак, сначала мы должны сделать комнату и проход к ней

Но проход надо замаскировать (ну если игрок должен видеть монстров которые будут телепортироваться, то не надо маскировать)

МАСКИРОВКА

Шаг 1: Пол\потолок поднять или опустить до пола\потолка но при этом оставить один пиксель для звука

Шаг 2: Добавить текстуру в слот middle и выровнить её (быстро выровнить можно нажав ctrl+a, ну это уже горячая клавиша редактора карт)

Шаг 3 по желанию: Поставить флаги impossible, block projectiles на линию

МАСКИРОВКА ОКОНЧЕНА

Теперь надо поставить вот такую стенку в комнате

Но главное чтобы эта стена не была до потолка, и наче звук не пройдёт до монстров,

теперь вокруг стены делаем линии с экшином teleport, и ставим телепорту всё то что на картинке

И теперь надо на сектор поставить тег, и в этот сектор поставить точку телепорта

и точке телепорта тоже надо дать тег (точка телепорта должна быть в секторе с тегом на который ссылается телепорт)

и теперь давайте поставим монстров между стенкой которую мы создали ранее

Стойте стойте стойте, у вас не получилось? если у вас не получилось то вы сделали так что бы до монстров не доходил звук, просто они не пойдут на линию телепортации, они просто будут стоять ибо зачем им идти если они звука не слышали тобиж они о вашем присутствие не знают, и если монстры услышат звук или до них дойдёт команда alert monsters то они начнут двигаться и идти тобиж они перейдут через линию телепортации и телепортнуться в точку телепортации (сколько раз я сказал телепортации?).

Мда, и вправду, торт — это ложь!.

вот и сказочке конец

и всем

avatar