Игра

Эффекты

Временный эффект — то, что игра рисует на мгновение и забывает: луч, ударная волна, взрыв, искры, свет, кровь. Каждый эффект — функция effects, её настройки — аргументы эффекта, а второй аргумент говорит, кто его видит.

const 
shock
=
server
.
precache
("sprites/shockwave.spr");
const
trail
=
server
.
precache
("sprites/laserbeam.spr");
function blast(
here
: number[]) {
effects
.
beamCylinder
({
at
:
here
,
radius
: 385,
sprite
:
shock
,
life
: 0.4,
width
: 60,
color
: "#0096ff",
alpha
: 200 }, {
near
:
here
});
effects
.
sparks
({
at
:
here
});
} function thrown(
grenade
: Entity,
thrower
: Player) {
effects
.
beamFollow
({
entity
:
grenade
,
sprite
:
trail
,
life
: 1,
width
: 5,
color
: "#0096ff" }, {
to
:
thrower
});
}

Спрайты и модели

Эффект рисует спрайт или модель, которые игра прекэшировала. server.precache возвращает их как Resource, и именно его принимают sprite и model эффекта:

const 
shock
=
server
.
precache
("sprites/shockwave.spr"); // на верхнем уровне файла
server
.
addEventListener
("precache", () => {
const
gibs
=
server
.
precache
("models/glassgibs.mdl"); // или в событии "precache"
});

Файл, запрошенный на верхнем уровне плагина, прекэшируется, когда грузится карта; в событии "precache" — сразу. Плагин, перезагруженный посреди карты, снова выполняет свой верхний уровень: файл второй раз не прекэшируется, а Resource находит индекс, который ему дала карта.

resource.path — путь, который ему дали, resource.index — индекс, который принимает натив (0, пока файл не прекэширован).

Только пока грузится карта
Игра прекэширует файл, только пока грузится карта. Запрошенный позже — в команде, в "init" — файл, который не прекэшировал ни один плагин, отмечается строкой в консоли, а эффект, который его рисует, не отправляется и тоже пишет строку.

Кто видит

Второй аргументКто видит эффект
не заданвсе
{ near: point }игроки, которым видна эта точка
{ to: player }только этот игрок

Эффект отправляется так, как игра отправляет свои: игрок, чьё соединение его потеряло, просто его не увидит.

Единицы

  • Время — life — в секундах: life: 0.4.
  • Цвет — шестнадцатеричная запись CSS, "#0096ff" или "#09f"; alpha — яркость, от 0 до 255.
  • Точки, размеры и скорости — в единицах мира, как entity.origin.
  • Несколько размеров — собственные числа эффекта, от 0 до 255, и описание каждой настройки их объясняет: толщина луча width (10 — одна единица), его дрожание noise (100 — одна единица), размер спрайта scale (10 — его собственный размер).
  • palette — цвет палитры игры, от 0 до 255: красный цвет крови — 247.

Эффекты

Сначала обязательные настройки; у остальных есть значения по умолчанию.

ФункцияЧто рисуетНастройки
beamPointsлуч между двумя точкамиstart, end, sprite, life, width; color, alpha, noise, frame, frameRate, speed
beamEntityPointлуч от сущности к точкеstart (сущность), end и настройки луча
beamEntitiesлуч между двумя сущностямиstart, end (сущности) и настройки луча
beamRingкольцо луча, диаметр — две сущностикак у beamEntities
beamCylinderцилиндр, растущий до radius, — ударная волнаat, radius и настройки луча
beamDiskдиск, растущий до radiusкак у beamCylinder
beamTorusкольцо, повёрнутое к зрителю, растущее до radiusкак у beamCylinder
beamFollowслед за движущейся сущностьюentity, sprite, life, width; color, alpha
beamSpriteлуч со спрайтом на концеstart, end, sprite, endSprite
lightningмолния между двумя точкамиstart, end, sprite, life, width; noise
killBeamsубирает лучи сущностиentity
explosionвзрыв: спрайт, свет, частицы, звукat, sprite; scale, frameRate, additive, lights, sound, particles
tarExplosionвспышка тёмных частицat
particleExplosionвспышка частиц цветов палитрыat; palette, colors
smokeклуб дымаat, sprite; scale, frameRate
implosionтрассеры, слетающиеся в точкуat, radius, count, life
gunshotпопадание пулиat
sparksискры, падающие из точкиat
armorRicochetпуля от брониat; scale
lavaSplash, teleportвсплеск частицat
tracerтрассер от точки к точкеstart, end
showLineлиния частиц на 30 секундstart, end
streakSplashсноп трассеров в заданном направленииat, direction, count, speed; randomness, palette
spriteсветящийся спрайт, проигрывается один разat, sprite; scale, alpha
glowSpriteсветящийся спрайт, который держитсяat, sprite, life; scale, alpha
spriteTrailсветящиеся спрайты, разлетающиеся с линииstart, end, sprite, count, life; scale, speed, randomness
spriteSprayбрызги спрайтовat, velocity, sprite, count, speed; noise
largeFunnelворонка спрайтовat, sprite; reverse
fizzпузыри внутри браш-сущностиentity, sprite, density
bubbles, bubbleTrailпузыри из коробки, с линииstart, end, height, sprite, count, speed
dynamicLightсвет на мир вокруг точкиat, radius, life; color, decay
entityLightсвет на сущности, освещает только сущностиentity, at, radius, life; color, decay
lineцветная линияstart, end, life; color
boxрёбра коробкиmins, maxs, life; color
blood, bloodStreamбрызги, струя кровиat, direction, speed; palette
bloodSpriteкровь, как игра рисует попаданиеat, spray, drop; scale, palette
modelброшенная модель, которая отскакивает, — гильзаat, velocity, model, life; yaw, sound
explodeModelосколки модели во все стороныat, speed, model, count, life
breakModelосколки из коробки — что-то разбилосьat, size, velocity, model, count, life; randomness, material, smoke, transparent
projectileмодель, летящая как гвоздьat, velocity, model, life; owner
sprayроссыпь моделей или спрайтовat, direction, model, count, speed; noise, renderMode
playerSpritesспрайты из тела игрокаplayer, sprite, count; variance
particleBurstвспышка частиц одного цветаat, radius, life; palette
fireFieldквадрат огненных спрайтовat, radius, sprite, count, life; rise, blend, loop, flat
playerAttachmentмодель над игроком, которая ходит с нимplayer, model, life; offset
killPlayerAttachmentsубирает прикреплённые к игроку моделиplayer

Настройки луча — sprite, life и width, затем color (белый), alpha (255), noise (0, прямой), frame и frameRate (анимация спрайта) и speed (как быстро спрайт бежит вдоль него). Описание каждой настройки — в редакторе — даёт её диапазон и значение по умолчанию.

Текст на экране — это player.showHud. Декали — дырки от пули, рисунка на стене — среди эффектов пока нет: она отправляется нативами, message_begin и write_* (ограничения).