При хостинг поддержке Интернет-сообщества VBIOS CS-Mapping.com.ua
Вернуться   CS-Mapping.com.ua > Forum > Картостроение > Туториалы > Туториалы по Counter-Strike 1.6
Ник
Пароль
Регистрация Правила форума FAQ Пользователи Администрация Календарь Поиск За 24 часа Пометить все разделы прочитанными

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.12.2008, 15:02  #1
Rockon
Rockon
Старшина
Регистрация: 06.08.2006
Адрес: Питер
Возраст: 29
Сообщения: 467


По умолчанию Создание своего *.fgd

Это копи паст. Искал долго. Хочу выложить тут, ибо иногда надо, а нет. Если есть претензии с оформлением - пишите тут пожалуйста, позже исправлю, как время будет.
Итак:

1.Начнём с самого простого.

Итак, что же такое FGD файл и с чем его едят? Любой человек, который когда-либо работал с Worldcraft (да, и вообще с какой либо другой мапперской утилитой ) знает что такое Entities. Для не просвещённых Entity - это специальные объекты, которые помогают манипулировать вашим компьютерным миром (наглядный пример: допустим, вы хотите создать какой либо объект, который при действии на него внешнего мира (взрыв бомбы, атака со стороны игрока и т.п.) ломался. Для этого вы создаёте объект при помощи браша (или префаба), но сколько по нему не стреляй, сколько по нему не лупи, толку это никакого не даст. Так вот, для того чтобы он ломался, нужно его выделить и на панели управления нажать to Entity, у вас появиться меню, в котором вы можете выбрать нужную вам ентитю, в нашем случае func_breakable и установить нужные вам опции). Ну так вот, не будем отклоняться от темы, итак:

FGD файл - это такой файл, в котором содержатся все необходимые Entities для создания данного мода, карт для этого мода или целостной игры.

Надеюсь вам понятно моё толкование данного термина. Так что если вы хотите создать свой мод (а именно на создателей модов ориентирован данный туториал), то, пожалуй, это одна из первых вещей, с которых надо начинать; так же для начала надо продумать сценарий.

2.Создание файла.

Итак, когда продуман сценарий и все энтити, можно браться за дело. Кстати все энтити подразделяются на два класса:

SolidClass - энтити, создаваемые из брашей,
PointClass - энтити - точечные объекты.

Вид энтить нужно обязательно разделять, иначе ничего не получится. Для начала создайте текстовый файл. И приступаем:

Begin *.fgd file after the line.
---------------------------------------------------------------------------------
//
//<здесь нужно указать имя мода> game definition file (.fgd)
//Version <здесь можно написать версию мода>
//For <вид и версия маппинговой утилит(ы)> and <версия Half-Life>
//
//by <автор>
//

//Worldspawn
//
@SolidClass = worldspawn : "World entity"
[

message(string) : "Map Description / Title"
skyname(string) : "environment map (cl_skyname)"
light(integer) : "Default light level"
WaveHeight(string) : "Default Wave Height"
MaxRange(string) : "Max viewable distance" : "4096"
]

Теперь создаём классы (т.е. вводим переменные, которые будут у нас выявляться в Properties)
Надпись "@BaseClass = <>" означает то, что вы вводите новую переменную. Тут указаны Основные переменные, представленные в CS, но вы можете их изменять и добавлять свои.

//
//BaseClasses
//

@BaseClass = Angles
[
angles(string) : "Pitch Yaw Roll (Y Z X)" : "0 0 0"
]

@BaseClass = Targetname
[
targetname(target_source) : "Name"
]
@BaseClass = Target
[
target(target_destination) : "Target"
]

@BaseClass base(Target) = Targetx
[
delay(string) : "Delay before trigger" : "0"
killtarget(target_destination) : "KillTarget"
]

@BaseClass = RenderFxChoices
[
renderfx(choices) :"Render FX" : 0 =
[
0: "Normal"
1: "Slow Pulse"
2: "Fast Pulse"
3: "Slow Wide Pulse"
4: "Fast Wide Pulse"
9: "Slow Strobe"
10: "Fast Strobe"
11: "Faster Strobe"
12: "Slow Flicker"
13: "Fast Flicker"
5: "Slow Fade Away"
6: "Fast Fade Away"
7: "Slow Become Solid"
8: "Fast Become Solid"
14: "Constant Glow"
15: "Distort"
16: "Hologram (Distort + fade)"
]
]

@BaseClass base(RenderFxChoices) = RenderFields
[
rendermode(choices) : "Render Mode" : 0 =
[
0: "Normal"
1: "Color"
2: "Texture"
3: "Glow"
4: "Solid"
5: "Additive"
]
renderamt(integer) : "FX Amount (1 - 255)"
rendercolor(color255) : "FX Color (R G B)" : "0 0 0"
]

@BaseClass size(-16 -16 -36, 16 16 36) color(0 255 0) base(Angles) = PlayerClass []

@BaseClass size(-16 -16 -16, 16 16 16) base(Angles) = gibshooterbase
[
targetname (target_source) : "Name"
m_iGibs(integer) : "Number of Gibs" : 3
delay(string) : "Delay between shots" : "0"
m_flVelocity(integer) : "Gib Velocity" : 200
m_flVariance(string) : "Course Variance" : "0.15"
m_flGibLife(string) : "Gib Life" : "4"
spawnflags(Flags) =
[
1 : "Repeatable" : 0
]
]

@BaseClass = Light
[
_light(color255) : "Brightness" : "255 255 128 200"
style(Choices) : "Appearance" : 0 =
[
0 : "Normal"
10: "Fluorescent flicker"
2 : "Slow, strong pulse"
11: "Slow pulse, noblack"
5 : "Gentle pulse"
1 : "Flicker A"
6 : "Flicker B"
3 : "Candle A"
7 : "Candle B"
8 : "Candle C"
4 : "Fast strobe"
9 : "Slow strobe"
]
pattern(string) : "Custom Appearance"
]

@BaseClass base(Targetname) = Breakable
[
target(target_destination) : "Target on break"
health(integer) : "Strength" : 1
material(choices) :"Material type" : 0 =
[
0: "Glass"
1: "Wood"
2: "Metal"
3: "Flesh"
4: "Cinder Block"
5: "Ceiling Tile"
6: "Computer"
7: "Unbreakable Glass"
8: "Rocks"
]
explosion(choices) : "Gibs Direction" : 0 =
[
0: "Random"
1: "Relative to Attack"
]
delay(string) : "Delay before fire" : "0"
gibmodel(studio) : "Gib Model" : ""
spawnobject(choices) : "Spawn On Break" : 0 =
[
0: "Nothing"
]
explodemagnitude(integer) : "Explode Magnitude (0=none)" : 0
]

@BaseClass base(Targetname, RenderFields, Angles) = Door
[
killtarget(target_destination) : "KillTarget"
speed(integer) : "Speed" : 100
master(string) : "Master"
movesnd(choices) : "Move Sound" : 0 =
[
0: "No Sound"
1: "Servo (Sliding)"
2: "Pneumatic (Sliding)"
3: "Pneumatic (Rolling)"
4: "Vacuum"
5: "Power Hydraulic"
6: "Large Rollers"
7: "Track Door"
8: "Snappy Metal Door"
9: "Squeaky 1"
10: "Squeaky 2"
]
stopsnd(choices) : "Stop Sound" : 0 =
[
0: "No Sound"
1: "Clang with brake"
2: "Clang reverb"
3: "Ratchet Stop"
4: "Chunk"
5: "Light airbrake"
6: "Metal Slide Stop"
7: "Metal Lock Stop"
8: "Snappy Metal Stop"
]
wait(integer) : "delay before close, -1 stay open " : 4
lip(integer) : "Lip"
dmg(integer) : "Damage inflicted when blocked" : 0
message(string) : "Message if triggered"
target(target_destination) : "Target"
delay(integer) : "Delay before fire"
netname(string) : "Fire on Close"
health(integer) : "Health (shoot open)" : 0
spawnflags(flags) =
[
1 : "Starts Open" : 0
4 : "Don't link" : 0
8: "Passable" : 0
32: "Toggle" : 0
256:"Use Only" : 0
]
locked_sound(choices) : "Locked Sound" : 0 =
[
0: "None"
2: "Access Denied"
8: "Small zap"
10: "Buzz"
11: "Buzz Off"
12: "Latch Locked"
]
unlocked_sound(choices) : "Unlocked Sound" : 0 =
[
0: "None"
1: "Big zap & Warmup"
3: "Access Granted"
4: "Quick Combolock"
5: "Power Deadbolt 1"
6: "Power Deadbolt 2"
7: "Plunger"
8: "Small zap"
9: "Keycard Sound"
10: "Buzz"
13: "Latch Unlocked"
]
locked_sentence(choices) : "Locked Sentence" : 0 =
[
0: "None"
1: "Gen. Access Denied"
2: "Security Lockout"
3: "Blast Door"
4: "Fire Door"
5: "Chemical Door"
6: "Radiation Door"
7: "Gen. Containment"
8: "Maintenance Door"
9: "Broken Shut Door"
]
unlocked_sentence(choices) : "Unlocked Sentence" : 0 =
[
0: "None"
1: "Gen. Access Granted"
2: "Security Disengaged"
3: "Blast Door"
4: "Fire Door"
5: "Chemical Door"
6: "Radiation Door"
7: "Gen. Containment"
8: "Maintenance area"
]
_minlight(string) : "Minimum light level"
]

@BaseClass base(Targetname, Target, RenderFields, Angles) = BaseTank
[
spawnflags(flags) =
[
1 : "Active" : 0
16: "Only Direct" : 0
32: "Controllable" : 0
]

yawrate(string) : "Yaw rate" : "30"
yawrange(string) : "Yaw range" : "180"
yawtolerance(string) : "Yaw tolerance" : "15"
pitchrate(string) : "Pitch rate" : "0"
pitchrange(string) : "Pitch range" : "0"
pitchtolerance(string) : "Pitch tolerance" : "5"
barrel(string) : "Barrel Length" : "0"
barrely(string) : "Barrel Horizontal" : "0"
barrelz(string) : "Barrel Vertical" : "0"
spritesmoke(sprite) : "Smoke Sprite" : ""
spriteflash(sprite) : "Flash Sprite" : ""
spritescale(string) : "Sprite scale" : "1"
rotatesound(sound) : "Rotate Sound" : ""
firerate(string) : "Rate of Fire" : "1"
bullet_damage(string) : "Damage Per Bullet" : "0"
persistence(string) : "Firing persistence" : "1"
firespread(choices) : "Bullet accuracy" : 0 =
[
0: "Perfect Shot"
1: "Small cone"
2: "Medium cone"
3: "Large cone"
4: "Extra-large cone"
]
minRange(string) : "Minmum target range" : "0"
maxRange(string) : "Maximum target range" : "0"
_minlight(string) : "Minimum light level"
]

@BaseClass = PlatSounds
[
movesnd(choices) : "Move Sound" : 0 =
[
0: "No Sound"
1: "big elev 1"
2: "big elev 2"
3: "tech elev 1"
4: "tech elev 2"
5: "tech elev 3"
6: "freight elev 1"
7: "freight elev 2"
8: "heavy elev"
9: "rack elev"
10: "rail elev"
11: "squeek elev"
12: "odd elev 1"
13: "odd elev 2"
]
stopsnd(choices) : "Stop Sound" : 0 =
[
0: "No Sound"
1: "big elev stop1"
2: "big elev stop2"
3: "freight elev stop"
4: "heavy elev stop"
5: "rack stop"
6: "rail stop"
7: "squeek stop"
8: "quick stop"
]
volume(string) : "Sound Volume 0.0 - 1.0" : "0.85"
]

@BaseClass base(Targetname, RenderFields, PlatSounds) = Trackchange
[
height(integer) : "Travel altitude" : 0
spawnflags(flags) =
[
1: "Auto Activate train" : 0
2: "Relink track" : 0
8: "Start at Bottom" : 0
16: "Rotate Only" : 0
64: "X Axis" : 0
128: "Y Axis" : 0
]
rotation(integer) : "Spin amount" : 0
train(target_destination) : "Train to switch"
toptrack(target_destination) : "Top track"
bottomtrack(target_destination) : "Bottom track"
speed(integer) : "Move/Rotate speed" : 0
]

@BaseClass base(Target, Targetname) = Trigger
[
killtarget(target_destination) : "Kill target"
netname(target_destination) : "Target Path"
style(integer) : "Style" : 32
master(string) : "Master"
sounds(choices) : "Sound style" : 0 =
[
0 : "No Sound"
]
delay(string) : "Delay before trigger" : "0"
message(string) : "Message (set sound too)"
spawnflags(flags) =
[
4: "Pushables": 0
]
]

@BaseClass = ZhltLightFlags
[
zhlt_lightflags(choices) :"Light Flags (Zhlt 2.2+)" : 0 =
[
0: "Normal"
1: "Embedded Fix"
2: "Opaque (Blocks Light)"
3: "Opaque + Embedded Fix"
]
]

Ну вот, вроде бы с переменными покончено. Теперь можно приступить к созданию непосредственно энтить. Если вы хотите создать энтити, которы уже существуют в HL или же каких-нибудь модов для неё, просто откройте их fgd файлы, выделите нужную вам энтитю и копируйте её в ваш файл.

Итак, PointClass. Не буду долго возиться, а просто на одном наглядном примере объясню что к чему.

//
// Cyclers (в эту категорию относятся энтити типа Cycler_Sprite.
//
@PointClass base(Targetname, Angles) = cycler_sprite : "Sprite Cycler"
[
model(sprite) : "Sprite"
framerate(integer) : "Frames per second" : 10
renderfx(choices) :"Render FX" : 0 =
[
0: "Normal"
1: "Slow Pulse"
2: "Fast Pulse"
3: "Slow Wide Pulse"
4: "Fast Wide Pulse"
9: "Slow Strobe"
10: "Fast Strobe"
11: "Faster Strobe"
12: "Slow Flicker"
13: "Fast Flicker"
5: "Slow Fade Away"
6: "Fast Fade Away"
7: "Slow Become Solid"
8: "Fast Become Solid"
14: "Constant Glow"
15: "Distort"
16: "Hologram (Distort + fade)"
]
rendermode(choices) : "Render Mode" : 0 =
[
0: "Normal"
1: "Color"
2: "Texture"
3: "Glow"
4: "Solid"
5: "Additive"
]
renderamt(integer) : "FX Amount (1 - 255)"
rendercolor(color255) : "FX Color (R G B)" : "0 0 0"
]

Короче, всё наглядно до ужаса, создаётся энтитя в скобках вводятся основные переменные, которые мы указывали выше, при желании вводятся свои. Значения в скобках после переменной указаны в конце туториала.

Дальше задействованы Env_энтити, создаются они так же как и вышеуказанные. Для этого надо всего лишь перед их созданием написать:

//
//Environmental effects
//

<....>

Вот и всё ,только не забывайте менять классы при создании например:
@PointClass = <>
@SolidClass = <>

И далее

Func -энтити:

//
// Function entities
//

<...>

Info-Энтити

//
// Info entities
//

<...>

И специальные энтити:

//
// <название игры> specific entities
//

<...>

А так же:

//
// Miscellaneous entities
//

<...>

Всё файл готов.

---------------------------------------------------------------------------------
End of file.

3.Константы - указатели.

Эти константы являются как раз теми самыми надписями, которые мы видели в скобках после задания объекта/опции.
Итак:

(string) - эта константа означает, что в данная опция является строковой (значение в виде текстовой строки)
(integer) - означает, что значение параметра - числовое
(choises) - означает, что имеются несколько вариантов для выбора
(flags) - означает, что опция будет находится во "флагах"
(sprite) - означает использование спрайтов
(model) - означает использование моделей

Так же, как это ни удивительно, но и переменные могут использоваться в качестве констант, а некоторые даже превращаться в полноценные энтити (например door).
================================================================================ ===
Да,кстати не забудьте, что не все игры, созданные на одном движке, поддерживают некоторые энтит, так допустим Counter-Strike не поддерживает энтити типа monster_, которые задают в HL различны NPC или же ваших врагов, хоть вы пихайте эту энтитю в cstrike.fgd толку от того, что вы её поставите не будет никакого!!! Просто CS поддерживает только Multiplayer режим.
Rockon вне форума Ответить с цитированием
Старый 18.12.2008, 15:05  #2
Гега
Гега
Папаша!!!
Регистрация: 29.10.2007
Адрес: Эстония-Финляндия
Возраст: 32
Сообщения: 2,466


По умолчанию

Напиши источник например- взято с Source-inside.ru
Указано в правилах форума.

Последний раз редактировалось Гега, 18.12.2008 в 15:15.
Гега вне форума Ответить с цитированием
Старый 18.12.2008, 15:26  #3
Rockon
Rockon
Старшина
Регистрация: 06.08.2006
Адрес: Питер
Возраст: 29
Сообщения: 467


По умолчанию

та я и на полигоне нашёл такую статью уже. Взято с какого то сайта левого
Там тоже был копи паст)
Так что первоисточник не известен к сожалению =\
Rockon вне форума Ответить с цитированием
Старый 18.12.2008, 15:41  #4
Киккер
Киккер
No smoking!
Регистрация: 18.10.2008
Адрес: за горами
Возраст: 22
Сообщения: 1,231
Замечания: 6


По умолчанию

Спс. до этого не читал.
Киккер вне форума Ответить с цитированием
Старый 18.12.2008, 16:36  #5
FiEctro
FiEctro
Регистрация: 28.07.2006
Адрес: Эквестрия
Возраст: 26
Сообщения: 16,406


По умолчанию

//
//<здесь нужно указать имя мода> game definition file (.fgd)
//Version <здесь можно написать версию мода>
//For <вид и версия маппинговой утилит(ы)> and <версия Half-Life>
//
//by <автор>
//

Это не обязательно, они за знаком коментария.
FiEctro вне форума Ответить с цитированием
Старый 18.12.2008, 16:41  #6
w00t
w00t
Майор
Регистрация: 03.03.2008
Адрес: Украина
Сообщения: 1,048
Замечания: 4


По умолчанию

поствь в [КОД] , а то трудно читать =\

Maximan, подумав, добавил 18.12.2008 в 16:42
или в офтоп(спойлер типо)

Последний раз редактировалось w00t, 18.12.2008 в 16:42.
w00t вне форума Ответить с цитированием
Старый 18.12.2008, 16:50  #7
Rockon
Rockon
Старшина
Регистрация: 06.08.2006
Адрес: Питер
Возраст: 29
Сообщения: 467


По умолчанию

поправлю попозже)
Вы скажите: ни у кого не завалялось исходников от ZLHT 3.4 - с офицального сайта не скачать..
Rockon вне форума Ответить с цитированием
Старый 18.12.2008, 16:58  #8
TwisteR
TwisteR
Регистрация: 24.07.2006
Адрес: Киев
Сообщения: 4,043


По умолчанию

Где то у меня лежали исходники предыдущей версии, я думал, что добавил их в архив с линуксовым портом, оказалось — нет. Так что сорри за предыдущую ссылку =(

Последний раз редактировалось TwisteR, 18.12.2008 в 17:12.
TwisteR вне форума Ответить с цитированием
Старый 18.12.2008, 17:58  #9
Rockon
Rockon
Старшина
Регистрация: 06.08.2006
Адрес: Питер
Возраст: 29
Сообщения: 467


По умолчанию

чорт, кто тут модератор?)
Мне нужны исходнички от последних версий)
Rockon вне форума Ответить с цитированием
Старый 16.04.2011, 10:02  #10
Nuclear
Nuclear
v0.4 beta Build 6403
Регистрация: 13.02.2011
Адрес: Странное место
Возраст: 17
Сообщения: 750
Замечания: 2


По умолчанию

Это статья с Полигона
Nuclear вне форума Ответить с цитированием
Старый 17.09.2011, 13:46  #11
Endym
Endym
ёкай
Регистрация: 17.05.2011
Возраст: 23
Сообщения: 154
Замечания: 2


По умолчанию

[ Цитата ] Так же, как это ни удивительно, но и переменные могут использоваться в качестве констант, а некоторые даже превращаться в полноценные энтити (например door).
Правильно ли я тебя понял, что я могу добавить энтити "door", указать в ней ключ для выбора моделей, и после этого в игре любая модель двери будет действовать через эту энтитю, как настоящая "func_door"? Можно ли вообще так сделать? Тогда можно еще, например, func_tank-у приделать путь для моделей, а в редакторе "забыть" галочку, которая разрешает игроку управлять пулеметом, и получим самоуправляемые автоматические турели.

P.S. 2 Rockon:
Если ищешь исходники ZHLT 3.4 F, то вот есть http://www.myupload.dk/showfile/997703a362b.zip/
+нашел http://downloads.ammahls.com/zhlt/Old%20SDK%20Code/

Последний раз редактировалось Endym, 17.09.2011 в 14:33.
Endym вне форума Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 18:48.


Designed by FT-502, TRUP@C. Originally by Ulric Spaak
Hosted by: VBIOS.COM, Powered by: vBulletin
copyright © 2002 - 2017 by CS-Mapping.com.ua Community