first commit
43
tb/fonts/SIL Open Font License.txt
Normal file
@@ -0,0 +1,43 @@
|
||||
Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
BIN
tb/fonts/SourceSansPro-Regular.otf
Normal file
1566
tb/games/Daikatana/Common.fgd
Normal file
117
tb/games/Daikatana/Episode 1.fgd
Normal file
@@ -0,0 +1,117 @@
|
||||
//
|
||||
// Daikatana game definition file (.fgd)
|
||||
// Episode 1 entities
|
||||
// for Trenchbroom
|
||||
// last update: 6 Oct, 2018
|
||||
// Version: 1
|
||||
//
|
||||
// written by Dekonega <dekonega(at)windowslive.com>
|
||||
// email me with improvements and suggestions
|
||||
//
|
||||
|
||||
@include "Common.fgd"
|
||||
|
||||
|
||||
//
|
||||
// Items (Episode 1)
|
||||
//
|
||||
@PointClass base(Appearflags, KeyFlags) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/e1/a1_clcrd.dkm" }) = item_keycard_cell : "E1 prison cell key" []
|
||||
@PointClass base(Appearflags, Sidekickflags) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/e1/a1_ar2.dkm" }) = item_chromatic_armor : "Chromatic armor" []
|
||||
@PointClass base(Appearflags, Sidekickflags) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/e1/a1_ar1.dkm" }) = item_plasteel_armor : "Plasteel armor" []
|
||||
|
||||
|
||||
//
|
||||
// Monsters (Episode 1)
|
||||
//
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-16 -16 -24, 16 16 8) model({ "path": "models/e1/m_croco.dkm" }) = monster_crox : "Crox" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-16 -16 -24, 16 16 40) model({ "path": "models/e1/m_mwsurgeon.dkm" }) = monster_surgeon : "Surgeon" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-16 -16 -24, 16 16 40) model({ "path": "models/e1/m_mwguard.dkm" }) = monster_mishimaguard : "Mishima guard" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-16 -16 -24, 16 16 32) model({ "path": "models/e1/m_MWFaty.dkm" }) = monster_fatworker : "Fat worker" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-16 -16 -24, 16 16 40) model({ "path": "models/e1/m_MWSkny.dkm" }) = monster_skinnyworker : "Skinny worker" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-12 -12 0, 12 12 24) model({ "path": "models/e1/m_proto.dkm" }) = monster_protopod : "Protopod" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-24 -24 -16, 24 24 32) model({ "path": "models/e1/m_dsphere.dkm" }) = monster_deathsphere : "Deathsphere" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-24 -24 -24, 24 24 24) model({ "path": "models/e1/m_cambot.dkm" }) = monster_cambot : "Cambot" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-40 -40 -40, 40 40 48) model({ "path": "models/e1/m_ragemaster.dkm" }) = monster_ragemaster : "Ragemaster" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-24 -24 -16, 24 24 24) model({ "path": "models/e1/m_bboar.dkm" }) = monster_battleboar : "Battle boar" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-16 -16 -24, 16 16 36) model({ "path": "models/e1/m_cryotech.dkm" }) = monster_cryotech : "Cryotech" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-24 -24 -24, 24 24 32) model({ "path": "models/e1/m_psyclaw.dkm" }) = monster_psyclaw : "Psyclaw" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-16 -16 -8, 16 16 8) model({ "path": "models/e1/m_trakatak.dkm" }) = monster_lasergat : "Lasergat" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-32 -32 -40, 32 32 48) model({ "path": "models/e1/m_inmater.dkm" }) = monster_inmater : "Inmater" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-16 -16 -24, 16 16 32) model({ "path": "models/e1/m_prizb.dkm" }) = monster_prisonerb : "Prisoner B" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-16 -16 -24, 16 16 32) model({ "path": "models/e1/m_priza.dkm" }) = monster_prisoner : "Prisoner" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-40 -40 -40, 40 40 56) model({ "path": "models/e1/m_sludgeminion.dkm" }) = monster_sludgeminion : "Sludgeminion" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-16 -16 -8, 16 16 16) model({ "path": "models/e1/m_vermin.dkm" }) = monster_venomvermin : "Venomvermin" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-40 -40 0, 40 40 96) model({ "path": "models/e1/m_tskeet.dkm" }) = monster_thunderskeet : "Thunderskeet" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-16 -16 -8, 16 16 8) model({ "path": "models/e1/m_skeeter.dkm" }) = monster_slaughterskeet : "Roboskeet" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-8 -8 -16, 8 8 16) model({ "path": "models/e1/m_frog.dkm" }) = monster_froginator : "Froginator" []
|
||||
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-16 -16 -16, 16 16 16) model({ "path": "models/e1/a1_rockgun.dkm" }) = monster_rockgat : "Rockgat"
|
||||
[
|
||||
fire_rate(float): "secs between firing default = 0.20" : 0.20
|
||||
range(integer): "attack radius default = 512" : 512
|
||||
basedmg(integer): "dmg done with a hit"
|
||||
rnddmg(integer): "random damage amount added on"
|
||||
health(integer): "health value"
|
||||
]
|
||||
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-8 -8 -8, 8 8 8) model({ "path": "models/global/e_flare.sp2" }) = monster_firefly : "Firefly"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1: "YELLOW" : 0
|
||||
2: "GREEN" : 0
|
||||
4: "BLUE" : 0
|
||||
8: "WHITE" : 0
|
||||
16: "RED" : 0
|
||||
]
|
||||
|
||||
count(integer): "Number of fireflies(Max=10)"
|
||||
distance(integer): "How far the fireflies will fly from point of placement(Max=200)"
|
||||
velocity(integer): "How fast the fireflies will move(Max=200)"
|
||||
scale(float): "How big the fireflies will be<float value>(1 = normal, 0.5 = half, 2 = twice as big)"
|
||||
delta_alpha(float): "frequency of Alpha blending change. <scalar>"
|
||||
alpha_level(float): "Initial Setting for Alpha blending change.<scalar>"
|
||||
]
|
||||
|
||||
|
||||
//
|
||||
// Decorations (Episode 1)
|
||||
//
|
||||
@PointClass base(Appearflags, DecorationFlags) color(1 0 0) size(-8 -8 -32, 8 8 32) = deco_e1 : "Episode 1 decoration"
|
||||
[
|
||||
damage(integer): "damage applied when exploding. Default is 15." : 15
|
||||
scale(float): "Scale of deco. Default 1.0." : 1.0
|
||||
model(string): "choose model # -- see list."
|
||||
mass(float): "*optional* - including this overrides the mass value in decoinfo.txt"
|
||||
frame(integer): "allows you to specify the starting frame for the model."
|
||||
animseq(integer): "allows you to specify an animation sequence for the model"
|
||||
x_speed(integer): "speed to rotate along x axis in degrees per second"
|
||||
y_speed(integer): "speed to rotate along y axis in degrees per second"
|
||||
z_speed(integer): "speed to rotate along z axis in degrees per second"
|
||||
alpha(float): "range 0.0-1.0. Only used if TRANSLUCENT is flagged"
|
||||
spawnname(string): "classname of entity to throw out upon death"
|
||||
movetype(string): "none, toss, bounce, float, overrides value in e1decoinfo.csv" : "none"
|
||||
]
|
||||
|
||||
|
||||
//
|
||||
// Weapons (Episode 1)
|
||||
//
|
||||
@PointClass base(Weapons) model({ "path": ":models/e1/a_tazer.dkm" }) = weapon_disruptor : "Disruptor Glove" []
|
||||
@PointClass base(Weapons) model({ "path": ":models/e1/a_ion.dkm" }) = weapon_ionblaster : "Ion Blaster - ION blaster thingy" []
|
||||
@PointClass base(Weapons) model({ "path": ":models/e1/a_shot.dkm" }) = weapon_shotcycler : "Shotcycler-6" []
|
||||
@PointClass base(Weapons) model({ "path": ":models/e1/a_c4.dkm" }) = weapon_c4viz : "C4 Vizatergo" []
|
||||
@PointClass base(Weapons) model({ "path": ":models/e1/a_swindr.dkm" }) = weapon_sidewinder : "Sidewinder" []
|
||||
@PointClass base(Weapons) model({ "path": ":models/e1/a_shokwv.dkm" }) = weapon_shockwave : "Shockwave" []
|
||||
@PointClass base(Weapons) model({ "path": ":models/e1/a_gashand.dkm" }) = weapon_gashands : "Ultimate Gashands" []
|
||||
@PointClass base(Weapons) model({ "path": ":models/global/a_daikatana.dkm" }) = weapon_daikatana : "Daikatana" []
|
||||
|
||||
|
||||
//
|
||||
// Ammo (Episode 1)
|
||||
//
|
||||
@PointClass base(Ammo) model({ "path": ":models/e1/wa_ion.dkm" }) = ammo_ionpack : "50 ion cells." []
|
||||
@PointClass base(Ammo) model({ "path": ":models/e1/wa_c4.dkm" }) = ammo_c4 : "8 C4 Modules." []
|
||||
@PointClass base(Ammo) model({ "path": ":models/e1/wa_shot6.dkm" }) = ammo_shells : "24 shotcycler shells." []
|
||||
@PointClass base(Ammo) model({ "path": ":models/e1/wa_swindr.dkm" }) = ammo_rockets : "18 rockets." []
|
||||
@PointClass base(Ammo) model({ "path": ":models/e1/wa_shokwv.dkm" }) = ammo_shocksphere : "2 ShockSpheres." []
|
||||
84
tb/games/Daikatana/Episode 2.fgd
Normal file
@@ -0,0 +1,84 @@
|
||||
//
|
||||
// Daikatana game definition file (.fgd)
|
||||
// Episode 2 entities
|
||||
// for Trenchbroom
|
||||
// last update: 6 Oct, 2018
|
||||
// Version: 1
|
||||
//
|
||||
// written by Dekonega <dekonega(at)windowslive.com>
|
||||
// email me with improvements and suggestions
|
||||
//
|
||||
|
||||
@include "Common.fgd"
|
||||
|
||||
|
||||
//
|
||||
// Items (Episode 2)
|
||||
//
|
||||
@PointClass base(Appearflags, Sidekickflags) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/e2/a2_ar2.dkm" }) = item_gold_armor : "Gold armor" []
|
||||
@PointClass base(Appearflags, Sidekickflags) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/e2/a2_ar1.dkm" }) = item_silver_armor : "Silver armor" []
|
||||
@PointClass base(Appearflags, KeyFlags) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/e2/c_runes.dkm" }) = item_rune_s : "Rune S" []
|
||||
@PointClass base(Appearflags, KeyFlags) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/e2/c_runei.dkm" }) = item_rune_i : "Rune I" []
|
||||
@PointClass base(Appearflags, KeyFlags) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/e2/c_runeg.dkm" }) = item_rune_g : "Rune G" []
|
||||
@PointClass base(Appearflags, KeyFlags) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/e2/c_runee.dkm" }) = item_rune_e : "Rune E" []
|
||||
@PointClass base(Appearflags, KeyFlags) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/e2/c_runea.dkm" }) = item_rune_a : "Rune A" []
|
||||
@PointClass base(Appearflags, KeyFlags) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/e2/a2_horn.dkm" }) = item_horn : "Horn" []
|
||||
@PointClass base(Appearflags, KeyFlags) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/e2/a2_drachma.dkm" }) = item_drachma : "Drachma" []
|
||||
@PointClass base(Appearflags, AntidoteFlags) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/global/a_antidote.dkm" }) = item_antidote : "Cures poisonous wound." []
|
||||
|
||||
|
||||
//
|
||||
// Monsters (Episode 2)
|
||||
//
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-32 -32 -24, 32 32 64) model({ "path": "models/e2/m_cyclops.dkm" }) = monster_cyclops : "Cyclops" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-32 -32 -24, 32 32 40) model({ "path": "models/e2/m_medusa.dkm" }) = monster_medusa : "Medusa" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-16 -16 -24, 16 16 32) model({ "path": "models/e2/m_centurion.dkm" }) = monster_centurion : "Centurion" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-16 -16 -24, 16 16 32) model({ "path": "models/e2/m_thief.dkm" }) = monster_thief : "Thief" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-16 -16 -24, 16 16 32) model({ "path": "models/e2/m_cerberus.dkm" }) = monster_cerberus : "Cerberus" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-24 -24 -24, 24 24 56) model({ "path": "models/e2/m_column.dkm" }) = monster_column : "Column" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-20 -20 -24, 20 20 40) model({ "path": "models/e2/m_satyr.dkm" }) = monster_satyr : "Satyr" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-20 -20 -24, 20 20 32) model({ "path": "models/e2/m_ferryman.dkm" }) = monster_ferryman : "Ferryman" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-20 -20 -24, 20 20 40) model({ "path": "models/e2/m_harpy.dkm" }) = monster_harpy : "Harpy" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-40 -40 -24, 40 40 64) model({ "path": "models/e2/m_griffon.dkm" }) = monster_griffon : "Griffon" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-8 -8 -8, 8 8 8) model({ "path": "models/e2/m_spider.dkm" }) = monster_smallspider : "Small spider" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-32 -32 -8, 32 32 24) model({ "path": "models/e2/m_spider.dkm" }) = monster_spider : "Spider" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-16 -16 -24, 16 16 32) model({ "path": "models/e2/m_skeleton.dkm" }) = monster_skeleton : "Skeleton" []
|
||||
|
||||
|
||||
//
|
||||
// Decorations (Episode 2)
|
||||
//
|
||||
@PointClass base(Appearflags, DecorationFlags) color(1 0 0) size(-8 -8 -32, 8 8 32) = deco_e2 : "Episode 2 decoration"
|
||||
[
|
||||
damage(integer): "damage applied when exploding. Default is 15." : 15
|
||||
scale(float): "Scale of deco. Default 1.0." : 1.0
|
||||
model(string): "choose model # -- see list."
|
||||
mass(float): "*optional* - including this overrides the mass value in decoinfo.txt"
|
||||
frame(integer): "allows you to specify the starting frame for the model."
|
||||
animseq(integer): "allows you to specify an animation sequence for the model"
|
||||
x_speed(integer): "speed to rotate along x axis in degrees per second"
|
||||
y_speed(integer): "speed to rotate along y axis in degrees per second"
|
||||
z_speed(integer): "speed to rotate along z axis in degrees per second"
|
||||
alpha(float): "range 0.0-1.0. Only used if TRANSLUCENT is flagged"
|
||||
spawnname(string): "classname of entity to throw out upon death"
|
||||
movetype(string): "none, toss, bounce, float, overrides value in e1decoinfo.csv" : "none"
|
||||
]
|
||||
|
||||
|
||||
//
|
||||
// Weapons (Episode 2)
|
||||
//
|
||||
@PointClass base(Weapons) model({ "path": ":models/e2/a_disk.dkm" }) = weapon_discus : "Discus" []
|
||||
@PointClass base(Weapons) model({ "path": ":models/e2/a_venom.dkm" }) = weapon_venomous : "Venomous" []
|
||||
@PointClass base(Weapons) model({ "path": ":models/e2/a_sflare.dkm" }) = weapon_sunflare : "Sunflare" []
|
||||
@PointClass base(Weapons) model({ "path": ":models/e2/a_hammer.dkm" }) = weapon_hammer : "Hades Hammer" []
|
||||
@PointClass base(Weapons) model({ "path": ":models/e2/a_tri.dkm" }) = weapon_trident : "Trident" []
|
||||
@PointClass base(Weapons) model({ "path": ":models/e2/a_zeus.dkm" }) = weapon_zeus : "Eye of Zeus" []
|
||||
|
||||
|
||||
//
|
||||
// Ammo (Episode 2)
|
||||
//
|
||||
@PointClass base(Ammo) model({ "path": ":models/e2/wa_trident.dkm" }) = ammo_tritips : "30 trident tips." []
|
||||
@PointClass base(Ammo) model({ "path": ":models/e2/wa_venom.dkm" }) = ammo_venomous : "25 cobra venom for Venomous." []
|
||||
@PointClass base(Ammo) model({ "path": ":models/e2/wa_zeus.dkm" }) = ammo_zeus : "1 mystic eye for Zeus." []
|
||||
106
tb/games/Daikatana/Episode 3.fgd
Normal file
@@ -0,0 +1,106 @@
|
||||
//
|
||||
// Daikatana game definition file (.fgd)
|
||||
// Episode 3 entities
|
||||
// for Trenchbroom
|
||||
// last update: 6 Oct, 2018
|
||||
// Version: 1
|
||||
//
|
||||
// written by Dekonega <dekonega(at)windowslive.com>
|
||||
// email me with improvements and suggestions
|
||||
//
|
||||
|
||||
@include "Common.fgd"
|
||||
|
||||
|
||||
//
|
||||
// Items (Episode 3)
|
||||
//
|
||||
@PointClass base(Appearflags, Sidekickflags) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/e3/a3_ar2.dkm" }) = item_black_adamant_armor : "Black adamant armor" []
|
||||
@PointClass base(Appearflags, Sidekickflags) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/e3/a3_ar1.dkm" }) = item_chainmail_armor : "Chainmail armor" []
|
||||
@PointClass base(Appearflags, KeyFlags) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/e3/a_tri.dkm" }) = item_trigon_keystone : "Trigon keystone" []
|
||||
@PointClass base(Appearflags, KeyFlags) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/e3/a_quad.dkm" }) = item_quad_keystone : "Quad keystone" []
|
||||
@PointClass base(Appearflags, KeyFlags) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/e3/a_hex.dkm" }) = item_hex_keystone : "Hex keystone" []
|
||||
@PointClass base(Appearflags, Sidekickflags, KeyFlags) color(0 0.5 0.8) size(-16 -16 0, 16 16 40) model({ "path": "models/e3/a3_bookw.dkm" }) = item_spellbook : "E3 Wyndrax spell book" []
|
||||
@PointClass base(Appearflags, KeyFlags) color(0 0.5 0.8) size(-16 -16 0, 16 16 40) model({ "path": "models/e3/a3_ltkey.dkm" }) = item_wyndrax_key : "E3 wyndrax key" []
|
||||
@PointClass base(Appearflags, KeyFlags) color(0 0.5 0.8) size(-16 -16 0, 16 16 40) model({ "path": "models/e3/a3_crkey.dkm" }) = item_crypt_key : "E3 crypt key" []
|
||||
@PointClass base(Appearflags) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/e3/a_ringlig.dkm" }) = item_ring_of_lightning : "Ring of lightning" []
|
||||
@PointClass base(Appearflags) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/e3/a_ringund.dkm" }) = item_ring_of_undead : "Ring of undead" []
|
||||
@PointClass base(Appearflags) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/e3/a_ring_fire.dkm" }) = item_ring_of_fire : "Ring of fire" []
|
||||
@PointClass base(Appearflags) color(0 0.5 0.8) size(-16 -16 0, 16 16 32) model({ "path": "models/e3/a_chest.dkm" }) = item_wood_chest : "Wooden chest" []
|
||||
@PointClass base(Appearflags, Sidekickflags) color(0 0.5 0.8) size(-16 -16 0, 16 16 32) model({ "path": "models/e3/a_blackchest.dkm" }) = item_black_chest : "Black chest" []
|
||||
@PointClass base(Appearflags, PurifierShard) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/e3/purifier_3.dkm" }) = item_purifier_shard3 : "Purifier shard 3" []
|
||||
@PointClass base(Appearflags, PurifierShard) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/e3/purifier_2.dkm" }) = item_purifier_shard2_5 : "Purifier shard 2.5" []
|
||||
@PointClass base(Appearflags, PurifierShard) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/e3/purifier_2.dkm" }) = item_purifier_shard2_4 : "Purifier shard 2.4" []
|
||||
@PointClass base(Appearflags, PurifierShard) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/e3/purifier_2.dkm" }) = item_purifier_shard2_3 : "Purifier shard 2.3" []
|
||||
@PointClass base(Appearflags, PurifierShard) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/e3/purifier_2.dkm" }) = item_purifier_shard2_2 : "Purifier shard 2.2" []
|
||||
@PointClass base(Appearflags, PurifierShard) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/e3/purifier_2.dkm" }) = item_purifier_shard2_1 : "Purifier shard 2.1" []
|
||||
@PointClass base(Appearflags, PurifierShard) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/e3/purifier_1.dkm" }) = item_purifier_shard1 : "Purifier shard 1" []
|
||||
|
||||
|
||||
//
|
||||
// Monsters (Episode 3)
|
||||
//
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-16 -16 -24, 16 16 36) model({ "path": "models/e3/m_wyndrax.dkm" }) = monster_wyndrax : "Wyndrax" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-20 -20 -24, 20 20 40) model({ "path": "models/e3/m_stavros.dkm" }) = monster_stavros : "Stavros" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-20 -20 -24, 20 20 36) model({ "path": "models/e3/m_nharre.dkm" }) = monster_nharre : "Nharre" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-16 -16 -24, 16 16 32) model({ "path": "models/e3/m_knight2.dkm" }) = monster_knight2 : "Blue Knight" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-16 -16 -24, 16 16 32) model({ "path": "models/e3/m_knight1.dkm" }) = monster_knight1 : "Red Knight" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-20 -20 -24, 20 20 40) model({ "path": "models/e3/m_gharroth.dkm" }) = monster_garroth : "King Gharroth" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-40 -40 -24, 40 40 96) model({ "path": "models/e3/m_dragon.dkm" }) = monster_dragon : "Dragon" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-20 -20 -24, 20 20 16) model({ "path": "models/e3/m_dwarf.dkm" }) = monster_dwarf : "Dwarf" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-16 -16 -24, 16 16 40) model({ "path": "models/e3/m_fletcher.dkm" }) = monster_fletcher : "Fletcher" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-20 -20 -24, 20 20 32) model({ "path": "models/e3/m_lycanthir.dkm" }) = monster_lycanthir : "Lycanthir" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-12 -12 -8, 12 12 8) model({ "path": "models/e3/m_doombat.dkm" }) = monster_doombat : "Doombat" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-16 -16 -24, 16 16 56) model({ "path": "models/e3/m_priest.dkm" }) = monster_priest : "Priest" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-16 -16 -24, 16 16 32) model({ "path": "models/e3/m_buboid.dkm" }) = monster_buboid : "Buboid" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-12 -12 -8, 12 12 8) model({ "path": "models/e3/m_rotworm.dkm" }) = monster_rotworm : "Rotworm" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-16 -16 -16, 16 16 8) model({ "path": "models/e3/m_prat.dkm" }) = monster_plague_rat : "Plague Rat - I broke you!" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-8 -8 -8, 8 8 8) model({ "path": "models/global/e_sflblue.sp2" }) = monster_wisp : "Wisp"
|
||||
[
|
||||
count(integer): "Number of wisps(Max=10)"
|
||||
distance(integer): "How far the wisps will fly from point of placement(Max=200)"
|
||||
velocity(integer): "How fast the wisps will move(Max=200)"
|
||||
scale(float): "How big the wisps will be(1 = normal, 0.5 = half, 2 = twice as big)"
|
||||
delta_alpha(integer): "frequency of Alpha blending change(0-100%) where 0% means no change"
|
||||
alpha_level(integer): "Initial Setting for Alpha blending change(1-100%)"
|
||||
]
|
||||
|
||||
|
||||
//
|
||||
// Decorations (Episode 3)
|
||||
//
|
||||
@PointClass base(Appearflags, DecorationFlags) color(1 0 0) size(-8 -8 -32, 8 8 32) = deco_e3 : "Episode 3 decoration"
|
||||
[
|
||||
damage(integer): "damage applied when exploding. Default is 15." : 15
|
||||
scale(float): "Scale of deco. Default 1.0." : 1.0
|
||||
model(string): "choose model # -- see list."
|
||||
mass(float): "*optional* - including this overrides the mass value in decoinfo.txt"
|
||||
frame(integer): "allows you to specify the starting frame for the model."
|
||||
animseq(integer): "allows you to specify an animation sequence for the model"
|
||||
x_speed(integer): "speed to rotate along x axis in degrees per second"
|
||||
y_speed(integer): "speed to rotate along y axis in degrees per second"
|
||||
z_speed(integer): "speed to rotate along z axis in degrees per second"
|
||||
alpha(float): "range 0.0-1.0. Only used if TRANSLUCENT is flagged"
|
||||
spawnname(string): "classname of entity to throw out upon death"
|
||||
movetype(string): "none, toss, bounce, float, overrides value in e1decoinfo.csv" : "none"
|
||||
]
|
||||
|
||||
|
||||
//
|
||||
// Weapons (Episode 3)
|
||||
//
|
||||
@PointClass base(Weapons) model({ "path": ":models/e3/a_claw.dkm" }) = weapon_silverclaw : "Silverclaw" []
|
||||
@PointClass base(Weapons) model({ "path": ":models/e3/a_bolter.dkm" }) = weapon_bolter : "Bolter" []
|
||||
@PointClass base(Weapons) model({ "path": ":models/e3/a_bal.dkm" }) = weapon_ballista : "Ballista" []
|
||||
@PointClass base(Weapons) model({ "path": ":models/e3/a_stav.dkm" }) = weapon_stavros : "Stave of Stavros" []
|
||||
@PointClass base(Weapons) model({ "path": ":models/e3/a_wyndrx.dkm" }) = weapon_wyndrax : "Wyndrax's Wisp" []
|
||||
@PointClass base(Weapons) model({ "path": ":models/e3/a_nmare.dkm" }) = weapon_nightmare : "Nharre's Nightmare" []
|
||||
|
||||
|
||||
//
|
||||
// Ammo (Episode 3)
|
||||
//
|
||||
@PointClass base(Ammo) model({ "path": ":models/e3/wa_bolt.dkm" }) = ammo_bolts : "50 crossbow bolts." []
|
||||
@PointClass base(Ammo) model({ "path": ":models/e3/wa_stav.dkm" }) = ammo_stavros : "2 lava rocks." []
|
||||
@PointClass base(Ammo) model({ "path": ":models/e3/wa_bal.dkm" }) = ammo_ballista : "10 Ballista logs." []
|
||||
@PointClass base(Ammo) model({ "path": ":models/e3/we_wisp.dkm" }) = ammo_wisp : "Wyndrax ammo." []
|
||||
86
tb/games/Daikatana/Episode 4.fgd
Normal file
@@ -0,0 +1,86 @@
|
||||
//
|
||||
// Daikatana game definition file (.fgd)
|
||||
// Episode 4 entities
|
||||
// for Trenchbroom
|
||||
// last update: 6 Oct, 2018
|
||||
// Version: 1
|
||||
//
|
||||
// written by Dekonega <dekonega(at)windowslive.com>
|
||||
// email me with improvements and suggestions
|
||||
//
|
||||
|
||||
@include "Common.fgd"
|
||||
|
||||
|
||||
//
|
||||
// Items (Episode 4)
|
||||
//
|
||||
@PointClass base(Appearflags, Sidekickflags) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/e4/a4_ar2.dkm" }) = item_ebonite_armor : "Ebonite armor" []
|
||||
@PointClass base(Appearflags, Sidekickflags) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/e4/a4_ar1.dkm" }) = item_kevlar_armor : "Kevlar armor" []
|
||||
@PointClass base(Appearflags, KeyFlags) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/e4/a4_clcgr.dkm" }) = item_control_card_green : "Green control card" []
|
||||
@PointClass base(Appearflags, KeyFlags) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/e4/a4_clcyl.dkm" }) = item_control_card_yellow : "Yellow control card" []
|
||||
@PointClass base(Appearflags, KeyFlags) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/e4/a4_clcbl.dkm" }) = item_control_card_blue : "Blue control card" []
|
||||
@PointClass base(Appearflags) color(0 0.5 0.8) size(-16 -16 -24, 16 16 8) model({ "path": "models/e4/a_saltp.dkm" }) = item_saltpeter : "Saltpeter for e4m1 explosives." []
|
||||
@PointClass base(Appearflags) color(0 0.5 0.8) size(-16 -16 -24, 16 16 8) model({ "path": "models/e4/a_charcoal.dkm" }) = item_charcoal : "Charcoal for e4m1 explosives." []
|
||||
@PointClass base(Appearflags) color(0 0.5 0.8) size(-16 -16 -24, 16 16 8) model({ "path": "models/e4/a_sulphur.dkm" }) = item_sulphur : "Sulphur pouch for e4m1 explosives." []
|
||||
@PointClass base(Appearflags) color(0 0.5 0.8) size(-16 -16 -24, 16 16 8) model({ "path": "models/e4/a_bottle.dkm" }) = item_bottle : "Bottle for e4m1 explosives." []
|
||||
@PointClass base(Appearflags) color(0 0.5 0.8) size(-16 -16 -16, 16 16 16) model({ "path": "models/e4/a_envsuit.dkm" }) = item_envirosuit : "60 seconds of air and protection from harmful liquids." []
|
||||
|
||||
|
||||
//
|
||||
// Monsters (Episode 4)
|
||||
//
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-16 -16 -24, 16 16 32) model({ "path": "models/e4/m_kage.dkm" }) = monster_kage : "Kage Mishima" []
|
||||
@PointClass base(AppearFlags, MonsterFlags) color(1 0.5 0) size(-16 -16 -8, 16 16 16) model({ "path": "models/e4/m_shark.dkm" }) = monster_shark : "Shark" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-16 -16 -24, 16 16 32) model({ "path": "models/e4/m_rocketmp.dkm" }) = monster_rocketmp : "Rocket MP" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-16 -16 -24, 16 16 32) model({ "path": "models/e4/m_sgirl.dkm" }) = monster_sealgirl : "SEAL Girl" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-16 -16 -24, 16 16 32) model({ "path": "models/e4/m_sealcap.dkm" }) = monster_sealcaptain : "SEAL Captain" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-16 -16 -24, 16 16 32) model({ "path": "models/e4/m_scomndo.dkm" }) = monster_sealcommando : "SEAL Commando" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-24 -24 -24, 24 24 24) model({ "path": "models/e4/m_labmonkey.dkm" }) = monster_labmonkey : "Lab Monkey" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-16 -16 -24, 16 16 32) model({ "path": "models/e4/m_uzi.dkm" }) = monster_uzigang : "Uzi Gang Member" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-20 -20 -24, 20 20 32) model({ "path": "models/e4/m_chgang.dkm" }) = monster_chaingang : "Chaingun Gang Member" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-16 -16 -24, 16 16 32) model({ "path": "models/e4/m_rockgang.dkm" }) = monster_rocketdude : "Rocket Dude" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-16 -16 -24, 16 16 32) model({ "path": "models/e4/m_femgang.dkm" }) = monster_femgang : "Female Gang Member" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-16 -16 -24, 16 16 40) model({ "path": "models/e4/m_wpris.dkm" }) = monster_whiteprisoner : "White prisoner" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-16 -16 -24, 16 16 40) model({ "path": "models/e4/m_bpris.dkm" }) = monster_blackprisoner : "Black prisoner" []
|
||||
@PointClass base(Appearflags, MonsterFlags) color(1 0.5 0) size(-8 -8 -16, 8 8 8) model({ "path": "models/e4/m_piperat.dkm" }) = monster_piperat : "Pipe rat - I broke you!" []
|
||||
|
||||
|
||||
//
|
||||
// Decorations (Episode 4)
|
||||
//
|
||||
@PointClass base(Appearflags, DecorationFlags) color(1 0 0) size(-8 -8 -32, 8 8 32) = deco_e4 : "Episode 4 decoration"
|
||||
[
|
||||
damage(integer): "damage applied when exploding. Default is 15." : 15
|
||||
scale(float): "Scale of deco. Default 1.0." : 1.0
|
||||
model(string): "choose model # -- see list."
|
||||
mass(float): "*optional* - including this overrides the mass value in decoinfo.txt"
|
||||
frame(integer): "allows you to specify the starting frame for the model."
|
||||
animseq(integer): "allows you to specify an animation sequence for the model"
|
||||
x_speed(integer): "speed to rotate along x axis in degrees per second"
|
||||
y_speed(integer): "speed to rotate along y axis in degrees per second"
|
||||
z_speed(integer): "speed to rotate along z axis in degrees per second"
|
||||
alpha(float): "range 0.0-1.0. Only used if TRANSLUCENT is flagged"
|
||||
spawnname(string): "classname of entity to throw out upon death"
|
||||
movetype(string): "none, toss, bounce, float, overrides value in e1decoinfo.csv" : "none"
|
||||
]
|
||||
|
||||
//
|
||||
// Weapons (Episode 4)
|
||||
//
|
||||
@PointClass base(Weapons) model({ "path": ":models/e4/a_glock.dkm" }) = weapon_glock : "Glock - Glock Pistol of Love"[]
|
||||
@PointClass base(Weapons) model({ "path": ":models/e4/a_slugger.dkm" }) = weapon_slugger : "Slugger" []
|
||||
@PointClass base(Weapons) model({ "path": ":models/e4/a_kcore.dkm" }) = weapon_kineticore : "Kineticore" []
|
||||
@PointClass base(Weapons) model({ "path": ":models/e4/a_ripgun.dkm" }) = weapon_ripgun : "Ripgun - Pulse Rifle" []
|
||||
@PointClass base(Weapons) model({ "path": ":models/e4/a_nova.dkm" }) = weapon_novabeam : "Novabeam" []
|
||||
@PointClass base(Weapons) model({ "path": ":models/e4/a_mmaser.dkm" }) = weapon_metamaser : "Metamaser" []
|
||||
|
||||
//
|
||||
// Ammo (Episode 4)
|
||||
//
|
||||
@PointClass base(Ammo) model({ "path": ":models/e4/wa_glock.dkm" }) = ammo_bullets : "A loaded magazine for the glock." []
|
||||
@PointClass base(Ammo) model({ "path": ":models/e4/wa_rip.dkm" }) = ammo_slugger : "15 slugs." []
|
||||
@PointClass base(Ammo) model({ "path": ":models/e4/wa_rip2.dkm" }) = ammo_cordite : "4 cordite grenades." []
|
||||
@PointClass base(Ammo) model({ "path": ":models/e4/wa_kcore.dkm" }) = ammo_kineticore : "50 freeze things." []
|
||||
@PointClass base(Ammo) model({ "path": ":models/e4/wa_slug.dkm" }) = ammo_ripgun : "50 Rip-Ups (tm)." []
|
||||
@PointClass base(Ammo) model({ "path": ":models/e4/wa_nova.dkm" }) = ammo_novabeam : "50 nova cell units." []
|
||||
334
tb/games/Daikatana/GameConfig.cfg
Normal file
@@ -0,0 +1,334 @@
|
||||
{
|
||||
"version": 3,
|
||||
"name": "Daikatana",
|
||||
"icon": "Icon.png",
|
||||
"fileformats": [ { "format": "Daikatana" } ],
|
||||
"filesystem": {
|
||||
"searchpath": "data",
|
||||
"packageformat": { "extension": "pak", "format": "dkpak" }
|
||||
},
|
||||
"textures": {
|
||||
"package": { "type": "directory", "root": "textures" },
|
||||
"format": { "extension": "wal", "format": "wal" },
|
||||
"attribute": "_tb_textures"
|
||||
},
|
||||
"entities": {
|
||||
"definitions": [ "Episode 1.fgd", "Episode 2.fgd", "Episode 3.fgd", "Episode 4.fgd" ],
|
||||
"defaultcolor": "0.6 0.6 0.6 1.0",
|
||||
"modelformats": [ "dkm" ]
|
||||
},
|
||||
"tags": {
|
||||
"brush": [
|
||||
{
|
||||
"name": "Weather",
|
||||
"attribs": [ "transparent" ],
|
||||
"match": "classname",
|
||||
"pattern": "effect*"
|
||||
},
|
||||
{
|
||||
"name": "Trigger",
|
||||
"attribs": [ "transparent" ],
|
||||
"match": "classname",
|
||||
"pattern": "trigger*",
|
||||
"texture": "trigger"
|
||||
}
|
||||
],
|
||||
"brushface": [
|
||||
{
|
||||
"name": "Clip",
|
||||
"attribs": [ "transparent" ],
|
||||
"match": "contentflag",
|
||||
"flags": [ "playerclip", "monsterclip", "NPC clip" ]
|
||||
},
|
||||
{
|
||||
"name": "Skip",
|
||||
"attribs": [ "transparent" ],
|
||||
"match": "surfaceflag",
|
||||
"flags": [ "skip" ]
|
||||
},
|
||||
{
|
||||
"name": "Hint",
|
||||
"attribs": [ "transparent" ],
|
||||
"match": "surfaceflag",
|
||||
"flags": [ "hint" ]
|
||||
},
|
||||
{
|
||||
"name": "Detail",
|
||||
"match": "contentflag",
|
||||
"flags": [ "detail" ]
|
||||
},
|
||||
{
|
||||
"name": "Liquid",
|
||||
"match": "contentflag",
|
||||
"flags": [ "lava", "slime", "water" ]
|
||||
},
|
||||
{
|
||||
"name": "Sound",
|
||||
"match": "surfaceflag",
|
||||
"flags": [ "wood", "metal", "stone", "glass", "ice", "snow", "puddle", "sand" ]
|
||||
}
|
||||
]
|
||||
},
|
||||
"faceattribs": {
|
||||
"surfaceflags": [
|
||||
{
|
||||
"name": "light",
|
||||
"description": "1 - Emit light from the surface, brightness is specified in the 'value' field"
|
||||
}, // 1
|
||||
{
|
||||
"name": "fullbright",
|
||||
"description": "2 - Fullbright"
|
||||
}, // 2
|
||||
{
|
||||
"name": "sky",
|
||||
"description": "4 - The surface is sky, the texture will not be drawn, but the background sky box is used instead"
|
||||
}, // 4
|
||||
{
|
||||
"name": "warp",
|
||||
"description": "8 - The surface warps (like water textures do)"
|
||||
}, // 8
|
||||
{
|
||||
"name": "trans33",
|
||||
"description": "16 - The surface is 33% transparent"
|
||||
}, // 16
|
||||
{
|
||||
"name": "trans66",
|
||||
"description": "32 - The surface is 66% transparent"
|
||||
}, // 32
|
||||
{
|
||||
"name": "flowing",
|
||||
"description": "64 - The texture wraps in a downward 'flowing' pattern (warp must also be set)"
|
||||
}, // 64
|
||||
{
|
||||
"name": "nodraw",
|
||||
"description": "128 - Used for non-fixed-size brush triggers and clip brushes"
|
||||
}, // 128
|
||||
{
|
||||
"name": "hint",
|
||||
"description": "256 - Hint"
|
||||
}, // 256
|
||||
{
|
||||
"name": "skip",
|
||||
"description": "512 - Skip"
|
||||
}, // 512
|
||||
{
|
||||
"name": "wood",
|
||||
"description": "1024 - Wood"
|
||||
}, // 1024
|
||||
{
|
||||
"name": "metal",
|
||||
"description": "2048 - Metal"
|
||||
}, // 2048
|
||||
{
|
||||
"name": "stone",
|
||||
"description": "4096 - Stone"
|
||||
}, // 4096
|
||||
{
|
||||
"name": "glass",
|
||||
"description": "8192 - Glass"
|
||||
}, // 8192
|
||||
{
|
||||
"name": "ice",
|
||||
"description": "16384 - Ice"
|
||||
}, // 16384
|
||||
{
|
||||
"name": "snow",
|
||||
"description": "32768 - Snow"
|
||||
}, // 32768
|
||||
{
|
||||
"name": "mirror",
|
||||
"description": "65536 - Mirror"
|
||||
}, // 65536
|
||||
{
|
||||
"name": "holy ground",
|
||||
"description": "131072 - Holy Grond"
|
||||
}, // 131072
|
||||
{
|
||||
"name": "alphachan",
|
||||
"description": "262144 - Alphachan"
|
||||
}, // 262144
|
||||
{
|
||||
"name": "midtexture",
|
||||
"description": "524288 - Midtexture (Used together with Clear and Nodraw.)"
|
||||
}, // 524288
|
||||
{
|
||||
"name": "puddle",
|
||||
"description": "1048576 - Puddle"
|
||||
}, // 1048576
|
||||
{
|
||||
"name": "water surge",
|
||||
"description": "2097152 - Water Surge"
|
||||
}, // 2097152
|
||||
{
|
||||
"name": "big water surge",
|
||||
"description": "4194304 - Big Water Surge"
|
||||
}, // 4194304
|
||||
{
|
||||
"name": "bullet light",
|
||||
"description": "8388608 - Bullet Light"
|
||||
}, // 8388608
|
||||
{
|
||||
"name": "fog",
|
||||
"description": "16777216 - Fog"
|
||||
}, // 16777216
|
||||
{
|
||||
"name": "sand",
|
||||
"description": "33554432 - Sand"
|
||||
}, // 33554432
|
||||
{
|
||||
"name": "4000000",
|
||||
"description": "67108864 - 4000000"
|
||||
}, // 67108864
|
||||
{
|
||||
"name": "8000000",
|
||||
"description": "134217728 - 8000000"
|
||||
}, // 134217728
|
||||
{
|
||||
"name": "10000000",
|
||||
"description": "268435456 - 10000000"
|
||||
}, // 268435456
|
||||
{
|
||||
"name": "20000000",
|
||||
"description": "536870912 - 20000000"
|
||||
}, // 536870912
|
||||
{
|
||||
"name": "40000000",
|
||||
"description": "1073741824 - 40000000"
|
||||
}, // 1073741824
|
||||
{
|
||||
"name": "80000000",
|
||||
"description": "-2147483648 - 80000000 (Yes, this is a negative value)"
|
||||
} // 2147483648
|
||||
],
|
||||
"contentflags": [
|
||||
{
|
||||
"name": "solid",
|
||||
"description": "1 - Default for all brushes"
|
||||
}, // 1
|
||||
{
|
||||
"name": "window",
|
||||
"description": "2 - Brush is a window (not really used)"
|
||||
}, // 2
|
||||
{
|
||||
"name": "aux",
|
||||
"description": "4 - Unused by the Dk's engine?"
|
||||
}, // 4
|
||||
{
|
||||
"name": "lava",
|
||||
"description": "8 - The brush is lava"
|
||||
}, // 8
|
||||
{
|
||||
"name": "slime",
|
||||
"description": "16 - The brush is slime"
|
||||
}, // 16
|
||||
{
|
||||
"name": "water",
|
||||
"description": "32 - The brush is water"
|
||||
}, // 32
|
||||
{
|
||||
"name": "mist",
|
||||
"description": "64 - The brush is non-solid"
|
||||
}, // 64
|
||||
{
|
||||
"name": "clear",
|
||||
"description": "128 - clear"
|
||||
}, // 128
|
||||
{
|
||||
"name": "notsolid",
|
||||
"description": "256 - notsolid"
|
||||
}, // 256
|
||||
{
|
||||
"name": "noshoot",
|
||||
"description": "512 - noshoot"
|
||||
}, // 512
|
||||
{
|
||||
"name": "fog",
|
||||
"description": "1024 - fog"
|
||||
}, // 1024
|
||||
{
|
||||
"name": "nitro",
|
||||
"description": "2048 - nitro"
|
||||
}, // 2048
|
||||
{
|
||||
"name": "1000",
|
||||
"description": "4096 - 1000"
|
||||
}, // 4096
|
||||
{
|
||||
"name": "2000",
|
||||
"description": "8192 - 2000"
|
||||
}, // 8192
|
||||
{
|
||||
"name": "4000",
|
||||
"description": "16384 - 4000"
|
||||
}, // 16384
|
||||
{
|
||||
"name": "8000",
|
||||
"description": "32768 - 8000"
|
||||
}, // 32768
|
||||
{
|
||||
"name": "playerclip",
|
||||
"description": "65536 - Player cannot pass through the brush (other things can)"
|
||||
}, // 65536
|
||||
{
|
||||
"name": "monsterclip",
|
||||
"description": "131072 - Monster cannot pass through the brush (player and other things can)"
|
||||
}, // 131072
|
||||
{
|
||||
"name": "current_0",
|
||||
"description": "262144 - Brush has a current in direction of 0 degrees"
|
||||
}, // 262144
|
||||
{
|
||||
"name": "current_90",
|
||||
"description": "524288 - Brush has a current in direction of 90 degrees"
|
||||
}, // 524288
|
||||
{
|
||||
"name": "current_180",
|
||||
"description": "1048576 - Brush has a current in direction of 180 degrees"
|
||||
}, // 1048576
|
||||
{
|
||||
"name": "current_270",
|
||||
"description": "2097152 - Brush has a current in direction of 270 degrees"
|
||||
}, // 2097152
|
||||
{
|
||||
"name": "current_up",
|
||||
"description": "4194304 - Brush has a current in the up direction"
|
||||
}, // 4194304
|
||||
{
|
||||
"name": "current_dn",
|
||||
"description": "8388608 - Brush has a current in the down direction"
|
||||
}, // 8388608
|
||||
{
|
||||
"name": "origin",
|
||||
"description": "16777216 - Special brush used for specifying origin of rotation for rotating brushes"
|
||||
}, // 16777216
|
||||
{
|
||||
"name": "monster",
|
||||
"description": "33554432 - Purpose unknown"
|
||||
}, // 33554432
|
||||
{
|
||||
"name": "corpse",
|
||||
"description": "67108864 - Purpose unknown"
|
||||
}, // 67108864
|
||||
{
|
||||
"name": "detail",
|
||||
"description": "134217728 - Detail"
|
||||
}, // 134217728
|
||||
{
|
||||
"name": "translucent",
|
||||
"description": "268435456 - Use for opaque water that does not block vis"
|
||||
}, // 268435456
|
||||
{
|
||||
"name": "ladder",
|
||||
"description": "536870912 - Brushes with this flag allow a player to move up and down a vertical surface"
|
||||
}, // 536870912
|
||||
{
|
||||
"name": "NPC clip",
|
||||
"description": "1073741824"
|
||||
}, // 1073741824
|
||||
{
|
||||
"name": "80000000",
|
||||
"description": "-2147483648 - (Yes, this is a negative value)"
|
||||
} // 2147483648
|
||||
]
|
||||
}
|
||||
}
|
||||
BIN
tb/games/Daikatana/Icon.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
tb/games/Daikatana/colormap.bmp
Normal file
|
After Width: | Height: | Size: 81 KiB |
32
tb/games/Generic/GameConfig.cfg
Normal file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
version: 3,
|
||||
name: "Generic",
|
||||
icon: "Icon.png",
|
||||
"fileformats": [
|
||||
{ "format": "Standard", "initialmap": "initial_standard.map" },
|
||||
{ "format": "Valve", "initialmap": "initial_valve.map" },
|
||||
{ "format": "Quake2", "initialmap": "initial_quake2.map" }
|
||||
],
|
||||
"filesystem": {
|
||||
"searchpath": ".",
|
||||
"packageformat": { "extension": "pak", "format": "idpak" }
|
||||
},
|
||||
"textures": {
|
||||
"package": { "type": "directory", "root": "textures" },
|
||||
"format": { "extensions": ["jpg", "jpeg", "tga", "png"], "format": "image" },
|
||||
"attribute": "_tb_textures"
|
||||
},
|
||||
"entities": {
|
||||
"definitions": [ "Generic.fgd" ],
|
||||
"defaultcolor": "0.6 0.6 0.6 1.0",
|
||||
"modelformats": [ "bsp, mdl, md2" ]
|
||||
},
|
||||
"tags": {
|
||||
"brush": [],
|
||||
"brushface": []
|
||||
},
|
||||
"faceattribs": {
|
||||
"surfaceflags": [],
|
||||
"contentflags": []
|
||||
}
|
||||
}
|
||||
5
tb/games/Generic/Generic.fgd
Normal file
@@ -0,0 +1,5 @@
|
||||
@SolidClass = worldspawn : "World entity" []
|
||||
|
||||
@baseclass size(-16 -16 -24, 16 16 32) color(0 255 0) = PlayerClass []
|
||||
|
||||
@PointClass base(PlayerClass) = info_player_start : "Player 1 start" []
|
||||
BIN
tb/games/Generic/Icon.png
Normal file
|
After Width: | Height: | Size: 3.5 KiB |
24
tb/games/Hexen2/GameConfig.cfg
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"version": 3,
|
||||
"name": "Hexen 2",
|
||||
"icon": "Icon.png",
|
||||
"fileformats": [
|
||||
{ "format": "Hexen2" },
|
||||
{ "format": "Valve" }
|
||||
],
|
||||
"filesystem": {
|
||||
"searchpath": "data1",
|
||||
"packageformat": { "extension": "pak", "format": "idpak" }
|
||||
},
|
||||
"textures": {
|
||||
"package": { "type": "file", "format": { "extension": "wad", "format": "wad2" } },
|
||||
"format": { "extension": "D", "format": "idmip" },
|
||||
"palette": "gfx/palette.lmp",
|
||||
"attribute": "wad"
|
||||
},
|
||||
"entities": {
|
||||
"definitions": [ "Hexen2.fgd" ],
|
||||
"defaultcolor": "0.6 0.6 0.6 1.0",
|
||||
"modelformats": [ "mdl", "bsp" ]
|
||||
}
|
||||
}
|
||||
1907
tb/games/Hexen2/Hexen2.fgd
Normal file
BIN
tb/games/Hexen2/Icon.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
tb/games/Hexen2/palette.lmp
Normal file
66
tb/games/Quake/GameConfig.cfg
Normal file
@@ -0,0 +1,66 @@
|
||||
{
|
||||
"version": 3,
|
||||
"name": "Quake",
|
||||
"icon": "Icon.png",
|
||||
"fileformats": [
|
||||
{ "format": "Standard" },
|
||||
{ "format": "Valve" }
|
||||
],
|
||||
"filesystem": {
|
||||
"searchpath": "id1",
|
||||
"packageformat": { "extension": "pak", "format": "idpak" }
|
||||
},
|
||||
"textures": {
|
||||
"package": { "type": "file", "format": { "extension": "wad", "format": "wad2" } },
|
||||
"format": { "extension": "D", "format": "idmip" },
|
||||
"palette": "gfx/palette.lmp",
|
||||
"attribute": "wad"
|
||||
},
|
||||
"entities": {
|
||||
"definitions": [ "Quake.fgd", "Quoth2.fgd", "Rubicon2.def", "Teamfortress.fgd" ],
|
||||
"defaultcolor": "0.6 0.6 0.6 1.0",
|
||||
"modelformats": [ "mdl", "bsp" ]
|
||||
},
|
||||
"tags": {
|
||||
"brush": [
|
||||
{
|
||||
"name": "Detail",
|
||||
"attribs": [],
|
||||
"match": "classname",
|
||||
"pattern": "func_detail*"
|
||||
},
|
||||
{
|
||||
"name": "Trigger",
|
||||
"attribs": [ "transparent" ],
|
||||
"match": "classname",
|
||||
"pattern": "trigger*",
|
||||
"texture": "trigger" // set this texture when tag is enabled
|
||||
}
|
||||
],
|
||||
"brushface": [
|
||||
{
|
||||
"name": "Clip",
|
||||
"attribs": [ "transparent" ],
|
||||
"match": "texture",
|
||||
"pattern": "clip"
|
||||
},
|
||||
{
|
||||
"name": "Skip",
|
||||
"attribs": [ "transparent" ],
|
||||
"match": "texture",
|
||||
"pattern": "skip"
|
||||
},
|
||||
{
|
||||
"name": "Hint",
|
||||
"attribs": [ "transparent" ],
|
||||
"match": "texture",
|
||||
"pattern": "hint*"
|
||||
},
|
||||
{
|
||||
"name": "Liquid",
|
||||
"match": "texture",
|
||||
"pattern": "\**"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
BIN
tb/games/Quake/Icon.png
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
588
tb/games/Quake/Quake.fgd
Normal file
@@ -0,0 +1,588 @@
|
||||
//
|
||||
// Quake game definition file (.fgd)
|
||||
// for Worldcraft 1.6 and above
|
||||
//
|
||||
// written by autolycus / autolycus@planetquake.com
|
||||
// email me with improvements and suggestions
|
||||
//
|
||||
|
||||
// Modified by CZG : grawert@online.no : http://www.planetquake.com/greyvoid/
|
||||
// further modified by various authors
|
||||
|
||||
//
|
||||
// worldspawn
|
||||
//
|
||||
|
||||
@SolidClass = worldspawn : "World entity"
|
||||
[
|
||||
message(string) : "Text on entering the world"
|
||||
worldtype(choices) : "Ambience" : 0 =
|
||||
[
|
||||
0 : "Medieval"
|
||||
1 : "Metal (runic)"
|
||||
2 : "Base"
|
||||
]
|
||||
sounds(integer) : "CD track to play" : 0
|
||||
light(integer) : "Ambient light"
|
||||
_sunlight(integer) : "Sunlight"
|
||||
_sun_mangle(string) : "Sun mangle (Yaw pitch roll)"
|
||||
]
|
||||
|
||||
//
|
||||
// base marker definitions
|
||||
//
|
||||
|
||||
@baseclass = Angle [ angle(integer) : "Direction" ]
|
||||
|
||||
@baseclass = Appearflags [
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
256 : "Not on Easy" : 0
|
||||
512 : "Not on Normal" : 0
|
||||
1024 : "Not on Hard" : 0
|
||||
2048 : "Not in Deathmatch" : 0
|
||||
]
|
||||
]
|
||||
|
||||
@baseclass = Targetname [ targetname(target_source) : "Name" ]
|
||||
@baseclass = Target [
|
||||
target(target_destination) : "Target"
|
||||
killtarget(target_destination) : "Killtarget"
|
||||
]
|
||||
|
||||
|
||||
|
||||
//
|
||||
// player starts, deathmatch, coop, teleport
|
||||
//
|
||||
|
||||
@baseclass base(Appearflags) size(-16 -16 -24, 16 16 32)
|
||||
color(0 255 0) model({ "path": ":progs/player.mdl" }) = PlayerClass []
|
||||
|
||||
@PointClass base(PlayerClass) = info_player_start : "Player 1 start" []
|
||||
@PointClass base(PlayerClass) = info_player_coop : "Player cooperative start" []
|
||||
@PointClass base(PlayerClass) = info_player_start2 : "Player episode return point" []
|
||||
@PointClass base(PlayerClass) = info_player_deathmatch : "Deathmatch start" []
|
||||
@PointClass size(-32 -32 0, 32 32 64) base(PlayerClass, Targetname) = info_teleport_destination : "Teleporter destination" []
|
||||
@PointClass color(200 150 150) = info_null : "info_null (spotlight target)"
|
||||
[
|
||||
targetname(target_source) : "Name"
|
||||
]
|
||||
|
||||
@PointClass base(Appearflags, Target, Targetname) color(200 150 150) = info_notnull : "Wildcard entity" // I love you
|
||||
[
|
||||
use(string) : "self.use"
|
||||
think(string) : "self.think"
|
||||
nextthink(integer) : "nextthink"
|
||||
noise(string) : "noise"
|
||||
touch(string) : "self.touch"
|
||||
]
|
||||
@PointClass base(Appearflags) = info_intermission : "Intermission camera"
|
||||
[
|
||||
mangle(string) : "Camera angle (Pitch Yaw Roll)"
|
||||
]
|
||||
|
||||
//
|
||||
// items
|
||||
//
|
||||
@baseclass base(Appearflags, Target, Targetname) = Item
|
||||
[
|
||||
message(string) : "Message"
|
||||
target(string) : "Target"
|
||||
killtarget(string) : "Killtarget"
|
||||
delay(integer) : "Delay"
|
||||
]
|
||||
@baseclass size(0 0 0, 32 32 56) color(80 0 200) base(Item) = Ammo
|
||||
[
|
||||
spawnflags(flags) =
|
||||
[
|
||||
1 : "Large box" : 0
|
||||
]
|
||||
]
|
||||
|
||||
@PointClass
|
||||
base(Ammo)
|
||||
model(
|
||||
{{
|
||||
spawnflags & 1 -> ":maps/b_batt1.bsp",
|
||||
":maps/b_batt0.bsp"
|
||||
}}
|
||||
) =
|
||||
item_cells : "Thunderbolt ammo" []
|
||||
|
||||
@PointClass
|
||||
base(Ammo)
|
||||
model(
|
||||
{{
|
||||
spawnflags & 1 -> ":maps/b_rock1.bsp",
|
||||
":maps/b_rock0.bsp"
|
||||
}}
|
||||
) =
|
||||
item_rockets : "Rockets" []
|
||||
|
||||
@PointClass
|
||||
base(Ammo)
|
||||
model(
|
||||
{{
|
||||
spawnflags & 1 -> ":maps/b_shell1.bsp",
|
||||
":maps/b_shell0.bsp"
|
||||
}}
|
||||
) = item_shells : "Shells" []
|
||||
|
||||
@PointClass
|
||||
base(Ammo)
|
||||
model(
|
||||
{{
|
||||
spawnflags & 1 -> ":maps/b_nail1.bsp",
|
||||
":maps/b_nail0.bsp"
|
||||
}}
|
||||
) = item_spikes : "Nailgun/Perforator ammo" []
|
||||
|
||||
@PointClass
|
||||
size(0 0 0, 32 32 56)
|
||||
base(Appearflags)
|
||||
model(
|
||||
{{
|
||||
spawnflags & 2 -> ":maps/b_bh100.bsp",
|
||||
spawnflags & 1 -> ":maps/b_bh10.bsp",
|
||||
":maps/b_bh25.bsp"
|
||||
}}
|
||||
) =
|
||||
item_health : "Health pack"
|
||||
[
|
||||
spawnflags(flags) =
|
||||
[
|
||||
1 : "Rotten" : 0
|
||||
2 : "Megahealth" : 0
|
||||
]
|
||||
]
|
||||
|
||||
@PointClass size(-16 -16 -24, 16 16 32) base(Item, Appearflags) model({ "path": ":progs/suit.mdl" }) =
|
||||
item_artifact_envirosuit : "Environmental protection suit" []
|
||||
@PointClass size(-16 -16 -24, 16 16 32) base(Item, Appearflags) model({ "path": ":progs/quaddama.mdl" }) =
|
||||
item_artifact_super_damage : "Quad damage" []
|
||||
@PointClass size(-16 -16 -24, 16 16 32) base(Item, Appearflags) model({ "path": ":progs/invulner.mdl" }) =
|
||||
item_artifact_invulnerability : "Pentagram of Protection" []
|
||||
@PointClass size(-16 -16 -24, 16 16 32) base(Item, Appearflags) model({ "path": ":progs/invisibl.mdl" }) =
|
||||
item_artifact_invisibility : "Ring of Shadows" []
|
||||
|
||||
@PointClass size(-16 -16 0, 16 16 56) base(Item, Appearflags) model({ "path": ":progs/armor.mdl", "skin": 2 }) =
|
||||
item_armorInv : "Red armor (200%)" []
|
||||
@PointClass size(-16 -16 0, 16 16 56) base(Item, Appearflags) model({ "path": ":progs/armor.mdl", "skin": 1 }) =
|
||||
item_armor2 : "Yellow armor (150%)" []
|
||||
@PointClass size(-16 -16 0, 16 16 56) base(Item, Appearflags) model({ "path": ":progs/armor.mdl" }) =
|
||||
item_armor1 : "Green armor (100%)" []
|
||||
@PointClass size(-16 -16 -24, 16 16 32) base(Item, Appearflags) model({ "path": ":progs/w_s_key.mdl" }) =
|
||||
item_key1 : "Silver key" []
|
||||
@PointClass size(-16 -16 -24, 16 16 32) base(Item, Appearflags) model({ "path": ":progs/w_g_key.mdl" }) =
|
||||
item_key2 : "Gold key" []
|
||||
@PointClass size(-16 -16 -24, 16 16 32) base(Item, Appearflags) model({ "path": ":progs/end1.mdl" }) =
|
||||
item_sigil : "Sigil"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Episode 1" : 1
|
||||
2 : "Episode 2" : 0
|
||||
4 : "Episode 3" : 0
|
||||
8 : "Episode 4" : 0
|
||||
]
|
||||
]
|
||||
|
||||
//
|
||||
// weapons
|
||||
//
|
||||
|
||||
@baseclass size(-16 -16 0, 16 16 56) color(0 0 200) base(Item, Appearflags) = Weapon []
|
||||
|
||||
@PointClass base(Weapon) model({ "path": ":progs/g_shot.mdl" }) = weapon_supershotgun : "Double-barrelled shotgun" []
|
||||
@PointClass base(Weapon) model({ "path": ":progs/g_nail.mdl" }) = weapon_nailgun : "Nailgun" []
|
||||
@PointClass base(Weapon) model({ "path": ":progs/g_nail2.mdl" }) = weapon_supernailgun : "Super nailgun" []
|
||||
@PointClass base(Weapon) model({ "path": ":progs/g_rock.mdl" }) = weapon_grenadelauncher : "Grenade launcher" []
|
||||
@PointClass base(Weapon) model({ "path": ":progs/g_rock2.mdl" }) = weapon_rocketlauncher : "Rocket launcher" []
|
||||
@PointClass base(Weapon) model({ "path": ":progs/g_light.mdl" }) = weapon_lightning : "Thunderbolt" []
|
||||
|
||||
//
|
||||
// monsters
|
||||
//
|
||||
|
||||
@baseclass base(Angle, Appearflags, Target, Targetname) color(220 0 0) = Monster
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Ambush" : 0
|
||||
]
|
||||
]
|
||||
|
||||
@PointClass base(Monster) size(-16 -16 -24, 16 16 40) model({ "path": ":progs/soldier.mdl" }) = monster_army : "Grunt" []
|
||||
@PointClass base(Monster) size(-32 -32 -24, 32 32 40) model({ "path": ":progs/dog.mdl" }) = monster_dog : "Nasty Doggie" []
|
||||
@PointClass base(Monster) size(-32 -32 -24, 32 32 64) model({ "path": ":progs/ogre.mdl" }) = monster_ogre : "Ogre" []
|
||||
@PointClass base(Monster) size(-32 -32 -24, 32 32 64) model({ "path": ":progs/ogre.mdl" }) = monster_ogre_marksman : "Ogre marksman" []
|
||||
@PointClass base(Monster) size(-16 -16 -24, 16 16 40) model({ "path": ":progs/knight.mdl" }) = monster_knight : "Knight" []
|
||||
@PointClass base(Monster) size(-16 -16 -24, 16 16 40) model({ "path": ":progs/hknight.mdl" }) = monster_hell_knight : "Hell knight" []
|
||||
@PointClass base(Monster) size(-16 -16 -24, 16 16 40) model({ "path": ":progs/wizard.mdl" }) = monster_wizard : "Scrag" []
|
||||
@PointClass base(Monster) size(-32 -32 -24, 32 32 64) model({ "path": ":progs/demon.mdl" }) = monster_demon1 : "Fiend" []
|
||||
@PointClass base(Monster) size(-32 -32 -24, 32 32 64) model({ "path": ":progs/shambler.mdl" }) = monster_shambler : "Shambler" []
|
||||
@PointClass base(Monster) size(-128 -128 -24, 128 128 256) model({ "path": ":progs/boss.mdl" }) = monster_boss : "Chthon" []
|
||||
@PointClass base(Monster) size(-16 -16 -24, 16 16 40) model({ "path": ":progs/enforcer.mdl" }) = monster_enforcer : "Enforcer" []
|
||||
@PointClass base(Monster) size(-32 -32 -24, 32 32 64) model({ "path": ":progs/shalrath.mdl" }) = monster_shalrath : "Vore" []
|
||||
@PointClass base(Monster) size(-16 -16 -24, 16 16 24) model({ "path": ":progs/tarbaby.mdl" }) = monster_tarbaby : "Spawn" []
|
||||
@PointClass base(Monster) size(-16 -16 -24, 16 16 24) model({ "path": ":progs/fish.mdl" }) = monster_fish : "Rotfish" []
|
||||
@PointClass base(Monster) size(-16 -16 -24, 16 16 32) model({ "path": ":progs/oldone.mdl" }) = monster_oldone : "Shub-Niggurath" []
|
||||
@PointClass base(Monster) size(-16 -16 -24, 16 16 32) model({ "path": ":progs/zombie.mdl" }) = monster_zombie : "Zombie"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Crucified" : 0
|
||||
2 : "Ambush" : 0
|
||||
]
|
||||
]
|
||||
|
||||
//
|
||||
// lights
|
||||
//
|
||||
|
||||
@baseclass color(255 255 40) = Light [
|
||||
light(integer) : "Brightness" : 300
|
||||
wait(integer) : "Fade distance multiplier" : 1
|
||||
delay(choices) : "Attenuation" =
|
||||
[
|
||||
0 : "Linear falloff (Default)"
|
||||
1 : "Inverse distance falloff"
|
||||
2 : "Inverse distance squared"
|
||||
3 : "No falloff"
|
||||
4 : "Local minlight"
|
||||
5 : "Inverse distance squared B"
|
||||
]
|
||||
mangle(string) : "Spotlight angle"
|
||||
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"
|
||||
]
|
||||
]
|
||||
|
||||
@PointClass size(-8 -8 -8, 8 8 8) base(Light, Target, Targetname) =
|
||||
light : "Invisible light source"
|
||||
[
|
||||
spawnflags(Flags) = [ 1 : "Start off" : 0 ]
|
||||
]
|
||||
@PointClass size(-8 -8 -8, 8 8 8) base(Light, Target, Targetname) =
|
||||
light_fluoro : "Fluorescent light"
|
||||
[
|
||||
spawnflags(Flags) = [ 1 : "Start off" : 0 ]
|
||||
]
|
||||
@PointClass size(-8 -8 -8, 8 8 8) base(Light, Target, Targetname) =
|
||||
light_fluorospark : "Sparking fluorescent light"
|
||||
[
|
||||
spawnflags(Flags) = [ 1 : "Start off" : 0 ]
|
||||
]
|
||||
@PointClass size(-8 -8 -8, 8 8 8) base(Appearflags, Light, Target, Targetname) =
|
||||
light_globe : "Globe light"
|
||||
[
|
||||
spawnflags(Flags) = [ 1 : "Start off" : 0 ]
|
||||
]
|
||||
@PointClass size(-8 -8 -12, 8 8 20) base(Appearflags, Light, Target, Targetname) model({ "path": ":progs/flame2.mdl" }) =
|
||||
light_flame_large_yellow : "Large yellow flame"
|
||||
[
|
||||
spawnflags(Flags) = [ 1 : "Start off" : 0 ]
|
||||
]
|
||||
@PointClass size(-4 -4 -12, 4 4 20) base(Appearflags, Light, Target, Targetname) model({ "path": ":progs/flame2.mdl" }) =
|
||||
light_flame_small_yellow : "Small yellow flame"
|
||||
[
|
||||
spawnflags(Flags) = [ 1 : "Start off" : 0 ]
|
||||
]
|
||||
@PointClass size(-4 -4 -12, 4 4 20) base(Appearflags, Light, Target, Targetname) model({ "path": ":progs/flame2.mdl" }) =
|
||||
light_flame_small_white : "Small white flame"
|
||||
[
|
||||
spawnflags(Flags) = [ 1 : "Start off" : 0 ]
|
||||
]
|
||||
@PointClass size(-4 -4 -12, 4 4 20) base(Appearflags, Light, Target, Targetname) model({ "path": ":progs/flame.mdl" }) =
|
||||
light_torch_small_walltorch : "Small walltorch" []
|
||||
|
||||
//
|
||||
// misc
|
||||
//
|
||||
|
||||
@SolidClass base(Appearflags) = func_illusionary : "Static nonsolid model" []
|
||||
|
||||
@PointClass base(Appearflags) color(0 150 220) = air_bubbles : "Air bubbles" []
|
||||
@PointClass base(Appearflags, Targetname) =
|
||||
event_lightning : "Chthon's lightning" []
|
||||
@PointClass base(Appearflags) model({ "path": ":progs/lavaball.mdl" }) = misc_fireball : "Small fireball"
|
||||
[ speed(integer) : "Speed" : 40 ]
|
||||
@PointClass base(Appearflags) size(0 0 0, 32 32 64) model({ "path": ":maps/b_explob.bsp" }) = misc_explobox : "Large exploding container" []
|
||||
@PointClass base(Appearflags) size(0 0 0, 32 32 32) model({ "path": ":maps/b_exbox2.bsp" }) = misc_explobox2 : "Small exploding container" []
|
||||
@PointClass base(Appearflags) size(-8 -8 -8, 8 8 8) model({ "path": ":progs/teleport.mdl" }) = misc_teleporttrain : "Flying teleporter destination"
|
||||
[
|
||||
target(string) : "First stop target"
|
||||
targetname(target_source) : "Name"
|
||||
]
|
||||
@PointClass base(Appearflags, Targetname) color(220 150 150) = trap_spikeshooter : "Triggered shooter"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Spike" : 0
|
||||
2 : "Laser" : 0
|
||||
]
|
||||
]
|
||||
@PointClass base(Appearflags) color(220 150 150) = trap_shooter : "Continuous shooter"
|
||||
[
|
||||
nextthink(integer) : "Delay before first spike"
|
||||
wait(integer) : "Delay between spikes"
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Spike" : 0
|
||||
2 : "Laser" : 0
|
||||
]
|
||||
]
|
||||
|
||||
@SolidClass = func_group : "Group of brushes for in-editor use" []
|
||||
@SolidClass = func_detail : "Group of brushes for certain compilers" []
|
||||
@SolidClass = func_detail_illusionary : "func_detail variant with no collision (players / monsters / gunfire) and doesn't split world faces." []
|
||||
@SolidClass = func_detail_wall : "func_detail variant that doesn't split world faces." []
|
||||
|
||||
//
|
||||
// ambient sounds
|
||||
//
|
||||
|
||||
@PointClass base(Appearflags) color(150 0 150) = ambient_drip : "Dripping sound" []
|
||||
@PointClass base(Appearflags) color(150 0 150) = ambient_drone : "Engine/machinery sound" []
|
||||
@PointClass base(Appearflags) color(150 0 150) = ambient_comp_hum : "Computer background sounds" []
|
||||
@PointClass base(Appearflags) color(150 0 150) = ambient_flouro_buzz : "Fluorescent buzzing sound" []
|
||||
@PointClass base(Appearflags) color(150 0 150) = ambient_light_buzz : "Buzzing sound from light" []
|
||||
@PointClass base(Appearflags) color(150 0 150) = ambient_suck_wind : "Wind sound" []
|
||||
@PointClass base(Appearflags) color(150 0 150) = ambient_swamp1 : "Frogs croaking" []
|
||||
@PointClass base(Appearflags) color(150 0 150) = ambient_swamp2 : "Frogs croaking B" []
|
||||
@PointClass base(Appearflags) color(150 0 150) = ambient_thunder : "Thunder sound" []
|
||||
|
||||
//
|
||||
// moving things
|
||||
//
|
||||
|
||||
|
||||
@SolidClass base(Angle, Appearflags, Targetname, Target) = func_door : "Basic door"
|
||||
[
|
||||
speed(integer) : "Speed" : 100
|
||||
sounds(choices) : "Sound" : 0 =
|
||||
[
|
||||
0: "Silent"
|
||||
1: "Stone"
|
||||
2: "Machine"
|
||||
3: "Stone Chain"
|
||||
4: "Screechy Metal"
|
||||
]
|
||||
wait(string) : "Wait before close" : "3"
|
||||
lip(integer) : "Lip" : 8
|
||||
dmg(integer) : "Damage inflicted when blocked" : 2
|
||||
message(string) : "Message if touched"
|
||||
health(integer) : "Health (shootable)" : 0
|
||||
spawnflags(flags) =
|
||||
[
|
||||
1 : "Starts Open" : 0
|
||||
4 : "Don't link" : 0
|
||||
8 : "Gold Key required" : 0
|
||||
16: "Silver Key required" : 0
|
||||
32: "Toggle" : 0
|
||||
]
|
||||
]
|
||||
|
||||
@SolidClass base(Appearflags, Targetname, Target) = func_door_secret : "Secret door"
|
||||
[
|
||||
angle(integer) : "Direction of second move"
|
||||
t_width(integer) : "First move length"
|
||||
t_length(integer) : "Second move length"
|
||||
dmg(integer) : "Damage when blocked" : 2
|
||||
wait(string) : "Wait before close" : "2"
|
||||
sounds(choices) : "Sounds" : 3 =
|
||||
[
|
||||
1: "Medieval"
|
||||
2: "Metal"
|
||||
3: "Base"
|
||||
]
|
||||
message(string) : "Message"
|
||||
spawnflags(flags) =
|
||||
[
|
||||
1 : "Open once" : 0
|
||||
2 : "Move left first" : 0
|
||||
4 : "Move down first" : 0
|
||||
8 : "Not shootable" : 0
|
||||
16 : "Always shootable" : 0
|
||||
]
|
||||
]
|
||||
|
||||
@SolidClass base(Appearflags, Targetname) = func_wall : "Wall, starts animation when triggered (if supporting texture)" []
|
||||
|
||||
|
||||
@SolidClass base(Angle, Appearflags, Targetname) = func_button : "Button"
|
||||
[
|
||||
speed(integer) : "Speed" : 40
|
||||
lip(integer) : "Lip" : 4
|
||||
target(target_source) : "Target"
|
||||
health(integer) : "Health (shootable)"
|
||||
sounds(choices) : "Sounds" =
|
||||
[
|
||||
0 : "Steam metal"
|
||||
1 : "Wooden clunk"
|
||||
2 : "Metallic clink"
|
||||
3 : "In-out"
|
||||
]
|
||||
wait(string) : "Wait before reset" : "1"
|
||||
delay(string) : "Delay before trigger"
|
||||
message(string) : "Message"
|
||||
]
|
||||
|
||||
@SolidClass base(Appearflags, Targetname) = func_train : "Moving platform"
|
||||
[
|
||||
sounds(choices) : "Sound" : 1 =
|
||||
[
|
||||
0: "Silent"
|
||||
1: "Ratchet Metal"
|
||||
]
|
||||
speed(integer) : "Speed (units per second)" : 64
|
||||
target(target_source) : "Target to start at"
|
||||
dmg(integer) : "Damage on block" : 2
|
||||
]
|
||||
|
||||
@PointClass base(Appearflags, Targetname) size(16 16 16) color(0 255 255) =
|
||||
path_corner : "Waypoint for platforms and monsters"
|
||||
[
|
||||
target(target_source) : "Next target"
|
||||
wait(integer) : "Wait" : 0
|
||||
]
|
||||
|
||||
@SolidClass base(Appearflags, Targetname) = func_plat : "Elevator"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Low trigger volume" : 0
|
||||
]
|
||||
speed(integer) : "Speed" : 150
|
||||
height(integer) : "Travel altitude (can be negative)" : 0
|
||||
sounds(choices) : "Sound" : 1 =
|
||||
[
|
||||
0: "None"
|
||||
1: "Base fast"
|
||||
2: "Chain Slow"
|
||||
]
|
||||
]
|
||||
|
||||
@SolidClass base(Appearflags) = func_episodegate : "Episode Gate"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Episode 1" : 1
|
||||
2 : "Episode 2" : 0
|
||||
4 : "Episode 3" : 0
|
||||
8 : "Episode 4" : 0
|
||||
]
|
||||
]
|
||||
|
||||
@SolidClass base(Appearflags) = func_bossgate : "Boss gate" []
|
||||
|
||||
//
|
||||
// triggers
|
||||
//
|
||||
|
||||
@baseclass base(Appearflags, Target, Killarget, Targetname) = Trigger
|
||||
[
|
||||
sounds(choices) : "Sound style" : 0 =
|
||||
[
|
||||
0 : "None"
|
||||
1 : "Secret sound"
|
||||
2 : "Beep beep"
|
||||
3 : "Large switch"
|
||||
]
|
||||
delay(string) : "Delay before trigger" : "0"
|
||||
message(string) : "Message"
|
||||
]
|
||||
|
||||
@SolidClass base(Trigger) = trigger_changelevel : "Trigger: Change level"
|
||||
[
|
||||
map(string) : "Next map"
|
||||
target(target_destination) : "Target"
|
||||
spawnflags(flags) =
|
||||
[
|
||||
1: "No intermission" : 0
|
||||
]
|
||||
]
|
||||
|
||||
@SolidClass base(Trigger) = trigger_once : "Trigger: Activate once"
|
||||
[
|
||||
health(integer) : "Health (shootable)"
|
||||
spawnflags(flags) = [ 1: "Not touchable" : 0 ]
|
||||
]
|
||||
@SolidClass base(Trigger) = trigger_multiple : "Trigger: Activate multiple"
|
||||
[
|
||||
wait(string) : "Wait before reset" : "0.2"
|
||||
health(integer) : "Health (shootable)"
|
||||
spawnflags(flags) = [ 1: "Not touchable" : 0 ]
|
||||
]
|
||||
@SolidClass base(Trigger) = trigger_onlyregistered : "Trigger: Registered only"
|
||||
[
|
||||
spawnflags(flags) = [ 1: "Not touchable" : 0 ]
|
||||
]
|
||||
@SolidClass base(Trigger) = trigger_secret : "Trigger: Secret"
|
||||
[
|
||||
sounds(choices) : "Sound" : 1 =
|
||||
[
|
||||
1 : "Secret sound"
|
||||
2 : "Beep beep"
|
||||
]
|
||||
spawnflags(flags) = [ 1: "Not touchable" : 0 ]
|
||||
]
|
||||
|
||||
@SolidClass base(Appearflags, Target, Targetname) = trigger_teleport : "Trigger: Teleporter"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Player only" : 0
|
||||
2 : "Silent" : 0
|
||||
]
|
||||
]
|
||||
|
||||
@SolidClass base(Appearflags) = trigger_setskill : "Trigger: Set skill"
|
||||
[
|
||||
message(choices) : "Skill to change to" : 1 =
|
||||
[
|
||||
0 : "Easy"
|
||||
1 : "Medium"
|
||||
2 : "Hard"
|
||||
3 : "Nightmare!"
|
||||
]
|
||||
]
|
||||
@PointClass base(Trigger) = trigger_relay : "Trigger: Relay"
|
||||
[
|
||||
]
|
||||
@SolidClass base(Angle, Appearflags, Targetname) = trigger_monsterjump : "Trigger: Monster jump"
|
||||
[
|
||||
speed(integer) : "Jump Speed" : 200
|
||||
height(integer) : "Jump Height" : 200
|
||||
]
|
||||
@PointClass base(Appearflags, Target, Targetname) = trigger_counter : "Trigger: Counter"
|
||||
[
|
||||
spawnflags(flags) = [ 1: "No Message" : 0 ]
|
||||
count(integer) : "Count before trigger" : 2
|
||||
delay (integer) : "Delay"
|
||||
message(string) : "Message"
|
||||
]
|
||||
@SolidClass base(Angle, Appearflags, Targetname) = trigger_push : "Trigger: Push"
|
||||
[
|
||||
spawnflags(flags) = [ 1: "Push once" : 0 ]
|
||||
speed(integer) : "Speed" : 1000
|
||||
]
|
||||
@SolidClass base(Appearflags, Targetname) = trigger_hurt : "Trigger: Hurt"
|
||||
[
|
||||
dmg(integer) : "Damage per second" : 5
|
||||
]
|
||||
@PointClass size(16 16 16) = misc_noisemaker : "Debug entity: continuously plays enforcer sounds" []
|
||||
@PointClass size(16 16 16) = viewthing : "Debug entity: fake player model" []
|
||||
1569
tb/games/Quake/Quoth2.fgd
Normal file
1442
tb/games/Quake/Rubicon2.def
Normal file
1070
tb/games/Quake/Teamfortress.fgd
Normal file
207
tb/games/Quake2/GameConfig.cfg
Normal file
@@ -0,0 +1,207 @@
|
||||
{
|
||||
"version": 3,
|
||||
"name": "Quake 2",
|
||||
"icon": "Icon.png",
|
||||
"fileformats": [ { "format": "Quake2" } ],
|
||||
"filesystem": {
|
||||
"searchpath": "baseq2",
|
||||
"packageformat": { "extension": "pak", "format": "idpak" }
|
||||
},
|
||||
"textures": {
|
||||
"package": { "type": "directory", "root": "textures" },
|
||||
"format": { "extension": "wal", "format": "wal" },
|
||||
"palette": "pics/colormap.pcx",
|
||||
"attribute": "_tb_textures"
|
||||
},
|
||||
"entities": {
|
||||
"definitions": [ "Quake2.fgd" ],
|
||||
"defaultcolor": "0.6 0.6 0.6 1.0",
|
||||
"modelformats": [ "md2" ]
|
||||
},
|
||||
"tags": {
|
||||
"brush": [
|
||||
{
|
||||
"name": "Trigger",
|
||||
"attribs": [ "transparent" ],
|
||||
"match": "classname",
|
||||
"pattern": "trigger*",
|
||||
"texture": "trigger"
|
||||
}
|
||||
],
|
||||
"brushface": [
|
||||
{
|
||||
"name": "Clip",
|
||||
"attribs": [ "transparent" ],
|
||||
"match": "texture",
|
||||
"pattern": "clip"
|
||||
},
|
||||
{
|
||||
"name": "Skip",
|
||||
"attribs": [ "transparent" ],
|
||||
"match": "texture",
|
||||
"pattern": "skip"
|
||||
},
|
||||
{
|
||||
"name": "Hint",
|
||||
"attribs": [ "transparent" ],
|
||||
"match": "texture",
|
||||
"pattern": "hint*"
|
||||
},
|
||||
{
|
||||
"name": "Detail",
|
||||
"match": "contentflag",
|
||||
"flags": [ "detail" ]
|
||||
},
|
||||
{
|
||||
"name": "Liquid",
|
||||
"match": "contentflag",
|
||||
"flags": [ "lava", "slime", "water" ]
|
||||
},
|
||||
{
|
||||
"name": "Transparent",
|
||||
"attribs": [ "transparent" ],
|
||||
"match": "surfaceflag",
|
||||
"flags": [ "trans33", "trans66" ]
|
||||
}
|
||||
]
|
||||
},
|
||||
"faceattribs": {
|
||||
"surfaceflags": [
|
||||
{
|
||||
"name": "light",
|
||||
"description": "Emit light from the surface, brightness is specified in the 'value' field"
|
||||
},
|
||||
{
|
||||
"name": "slick",
|
||||
"description": "The surface is slippery"
|
||||
},
|
||||
{
|
||||
"name": "sky",
|
||||
"description": "The surface is sky, the texture will not be drawn, but the background sky box is used instead"
|
||||
},
|
||||
{
|
||||
"name": "warp",
|
||||
"description": "The surface warps (like water textures do)"
|
||||
},
|
||||
{
|
||||
"name": "trans33",
|
||||
"description": "The surface is 33% transparent"
|
||||
},
|
||||
{
|
||||
"name": "trans66",
|
||||
"description": "The surface is 66% transparent"
|
||||
},
|
||||
{
|
||||
"name": "flowing",
|
||||
"description": "The texture wraps in a downward 'flowing' pattern (warp must also be set)"
|
||||
},
|
||||
{
|
||||
"name": "nodraw",
|
||||
"description": "Used for non-fixed-size brush triggers and clip brushes"
|
||||
},
|
||||
{
|
||||
"name": "hint",
|
||||
"description": "Make a primary bsp splitter"
|
||||
},
|
||||
{
|
||||
"name": "skip",
|
||||
"description": "Completely ignore, allowing non-closed brushes"
|
||||
}
|
||||
],
|
||||
"contentflags": [
|
||||
{
|
||||
"name": "solid",
|
||||
"description": "Default for all brushes"
|
||||
}, // 1 << 0
|
||||
{
|
||||
"name": "window",
|
||||
"description": "Brush is a window (not really used)"
|
||||
}, // 1 << 1
|
||||
{
|
||||
"name": "aux",
|
||||
"description": "Unused by the engine"
|
||||
}, // 1 << 2
|
||||
{
|
||||
"name": "lava",
|
||||
"description": "The brush is lava"
|
||||
}, // 1 << 3
|
||||
{
|
||||
"name": "slime",
|
||||
"description": "The brush is slime"
|
||||
}, // 1 << 4
|
||||
{
|
||||
"name": "water",
|
||||
"description": "The brush is water"
|
||||
}, // 1 << 5
|
||||
{
|
||||
"name": "mist",
|
||||
"description": "The brush is non-solid"
|
||||
}, // 1 << 6
|
||||
{ "name": "unused" }, // 1 << 7
|
||||
{ "name": "unused" }, // 1 << 8
|
||||
{ "name": "unused" }, // 1 << 9
|
||||
{ "name": "unused" }, // 1 << 10
|
||||
{ "name": "unused" }, // 1 << 11
|
||||
{ "name": "unused" }, // 1 << 12
|
||||
{ "name": "unused" }, // 1 << 13
|
||||
{ "name": "unused" }, // 1 << 14
|
||||
{ "name": "unused" }, // 1 << 15
|
||||
{
|
||||
"name": "playerclip",
|
||||
"description": "Player cannot pass through the brush (other things can)"
|
||||
}, // 1 << 16
|
||||
{
|
||||
"name": "mosterclip",
|
||||
"description": "Monster cannot pass through the brush (player and other things can)"
|
||||
}, // 1 << 17
|
||||
{
|
||||
"name": "current_0",
|
||||
"description": "Brush has a current in direction of 0 degrees"
|
||||
}, // 1 << 18
|
||||
{
|
||||
"name": "current_90",
|
||||
"description": "Brush has a current in direction of 90 degrees"
|
||||
}, // 1 << 19
|
||||
{
|
||||
"name": "current_180",
|
||||
"description": "Brush has a current in direction of 180 degrees"
|
||||
}, // 1 << 20
|
||||
{
|
||||
"name": "current_270",
|
||||
"description": "Brush has a current in direction of 270 degrees"
|
||||
}, // 1 << 21
|
||||
{
|
||||
"name": "current_up",
|
||||
"description": "Brush has a current in the up direction"
|
||||
}, // 1 << 22
|
||||
{
|
||||
"name": "current_dn",
|
||||
"description": "Brush has a current in the down direction"
|
||||
}, // 1 << 23
|
||||
{
|
||||
"name": "origin",
|
||||
"description": "Special brush used for specifying origin of rotation for rotating brushes"
|
||||
}, // 1 << 24
|
||||
{
|
||||
"name": "monster",
|
||||
"description": "Purpose unknown"
|
||||
}, // 1 << 25
|
||||
{
|
||||
"name": "corpse",
|
||||
"description": "Purpose unknown"
|
||||
}, // 1 << 26
|
||||
{
|
||||
"name": "detail",
|
||||
"description": "Detail brush"
|
||||
}, // 1 << 27
|
||||
{
|
||||
"name": "translucent",
|
||||
"description": "Use for opaque water that does not block vis"
|
||||
}, // 1 << 28
|
||||
{
|
||||
"name": "ladder",
|
||||
"description": "Brushes with this flag allow a player to move up and down a vertical surface"
|
||||
} // 1 << 29
|
||||
]
|
||||
}
|
||||
}
|
||||
BIN
tb/games/Quake2/Icon.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
980
tb/games/Quake2/Quake2.fgd
Normal file
@@ -0,0 +1,980 @@
|
||||
|
||||
//
|
||||
// Quake 2 game definition file (.fgd)
|
||||
// for Worldcraft 1.6 and above
|
||||
// last update: march 3 1998
|
||||
//
|
||||
// written by autolycus / autolycus@planetquake.com
|
||||
// email me with improvements and suggestions
|
||||
//
|
||||
// special thanks to: Disruptor, Zoid, Zaphod, Imaginos,
|
||||
// and EutecTic for comments, suggestions, and help!
|
||||
//
|
||||
|
||||
//
|
||||
// worldspawn
|
||||
//
|
||||
|
||||
// 0302 - added "nextmap" key
|
||||
@SolidClass = worldspawn : "World entity"
|
||||
[
|
||||
sky(string) : "Environment map name"
|
||||
skyaxis(string) : "Vector axis for rotating sky"
|
||||
skyrotate(string) : "Speed of rotation (degrees/second)"
|
||||
sounds(integer) : "CD Track Number" : 1
|
||||
gravity(integer) : "Gravity" : 800
|
||||
message(string) : "Level name"
|
||||
nextmap(string) : "Next map (DM only)"
|
||||
]
|
||||
|
||||
//
|
||||
// base marker definitions
|
||||
//model({ "path": ":models/items/keys/target/tris.md2" }) =
|
||||
|
||||
@baseclass = Appearflags [
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
256 : "Not in Easy" : 0
|
||||
512 : "Not in Normal" : 0
|
||||
1024 : "Not in Hard" : 0
|
||||
2048 : "Not in Deathmatch" : 0
|
||||
]
|
||||
]
|
||||
|
||||
@baseclass = Targetname [ targetname(target_source) : "Name" ]
|
||||
@baseclass = Target [ target(target_destination) : "Target" ]
|
||||
|
||||
//
|
||||
// player start, deathmatch, coop, deathmatch intermission
|
||||
//
|
||||
|
||||
@baseclass base(Appearflags, Targetname) size(-16 -16 -24, 16 16 32) color(0 255 0) = PlayerClass []
|
||||
|
||||
@PointClass base(PlayerClass) = info_player_start : "Player 1 start" []
|
||||
@PointClass base(PlayerClass) = info_player_deathmatch : "Player deathmatch start" []
|
||||
@PointClass base(PlayerClass) = info_player_coop : "Player cooperative start" []
|
||||
@PointClass base(PlayerClass) = info_player_intermission : "Deathmatch intermission point"
|
||||
[
|
||||
angles(string) : "pitch yaw roll"
|
||||
]
|
||||
|
||||
// Notes on the 'team' key: First of all, it's really only useful in DM because it creates a
|
||||
// random respawn pattern. Let's say that in one spot, you want to have the shotgun, Quad
|
||||
// damage and mega health item to respawn in alternance. Place all of them in approximately
|
||||
// the same location, team them and voila! The FIRST item that you place in the map will be
|
||||
// the team MASTER - the others will be SLAVES. In DM play, the Master will be the first one
|
||||
// to spawn. Once the Master is picked up, the respawn pattern becomes RANDOM: it could be
|
||||
// the same or one of the other 2. If you try to use this in a Single Player map, it's
|
||||
// pretty useless because only the team MASTER spawns and the others never appear obviously.
|
||||
|
||||
@BaseClass base(Appearflags, Target) color(76 76 255) size(-16 -16 -16, 16 16 16) = Ammo
|
||||
[
|
||||
team(string) : "Team"
|
||||
]
|
||||
|
||||
@PointClass base(Ammo) model({ "path": ":models/items/ammo/shells/medium/tris.md2" }) = ammo_shells : "Shotgun ammo" []
|
||||
@PointClass base(Ammo) model({ "path": ":models/items/ammo/bullets/medium/tris.md2" }) = ammo_bullets : "Machine/Chain gun ammo" []
|
||||
@PointClass base(Ammo) model({ "path": ":models/items/ammo/cells/medium/tris.md2" }) = ammo_cells : "Blaster/BFG ammo" []
|
||||
@PointClass base(Ammo) model({ "path": ":models/items/ammo/grenades/medium/tris.md2" }) = ammo_grenades : "Grenades" []
|
||||
@PointClass base(Ammo) model({ "path": ":models/items/ammo/rockets/medium/tris.md2" }) = ammo_rockets : "Rockets" []
|
||||
@PointClass base(Ammo) model({ "path": ":models/items/ammo/slugs/medium/tris.md2" }) = ammo_slugs : "Rail gun ammo" []
|
||||
|
||||
// Keep in mind when using func_areaportal that it must
|
||||
// *completely* separate two areas. otherwise, you will
|
||||
// get an error message and the areaportal will not work
|
||||
//
|
||||
// 0221 - is there any point in a "style" key?
|
||||
@SolidClass base(Appearflags, Targetname) = func_areaportal : "Area portal (Vis blocker)" []
|
||||
|
||||
// 0221 - added "pathtarget"
|
||||
// 0221 - changed "sounds" information
|
||||
@SolidClass base(Appearflags, Target, Targetname) color(0 128 204) = func_button : "Button"
|
||||
[
|
||||
pathtarget(string) : "Elevator level target"
|
||||
speed(integer) : "Speed" : 40
|
||||
wait(choices) : "Wait before reset" : 1 =
|
||||
[
|
||||
-1 : "Never Return"
|
||||
]
|
||||
lip(integer) : "Lip remaining after move" : 4
|
||||
health(integer) : "Health (shootable)"
|
||||
sounds(choices) : "Sounds" : 0 =
|
||||
[
|
||||
0 : "Audible"
|
||||
1 : "Silent"
|
||||
]
|
||||
// sounds(choices) : "Sounds" : 2 =
|
||||
// [
|
||||
// 1 : "Silent"
|
||||
// 2 : "Steam Metal"
|
||||
// 3 : "Wodden Clunk"
|
||||
// 4 : "Metallic Click"
|
||||
// 5 : "In-Out"
|
||||
// ]
|
||||
message(string) : "Activation message"
|
||||
_minlight(integer) : "Minimum light (optional)"
|
||||
]
|
||||
|
||||
// 0221 - added "count" key...oops :)
|
||||
@PointClass base(Appearflags, Targetname) color(0 0 255) size(-8 -8 -8, 8 8 8) = func_clock : "Clock"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Timer Up" : 0
|
||||
2 : "Timer Down" : 0
|
||||
4 : "Start Off" : 0
|
||||
8 : "Multi Use" : 0
|
||||
]
|
||||
count(integer) : "Clock Count"
|
||||
pathtarget(string) : "Target"
|
||||
style(choices) : "Style" : 0 =
|
||||
[
|
||||
0 : "xx"
|
||||
1 : "xx:xx"
|
||||
2 : "xx:xx:xx"
|
||||
]
|
||||
]
|
||||
|
||||
// func_conveyor code is incomplete. use the surface attribute "flowing"
|
||||
// and the "current" content flag. (texture won't scroll)
|
||||
//
|
||||
// 0221 - added _minlight
|
||||
@SolidClass base(Appearflags, Targetname) color(0 128 204) = func_conveyor : "Conveyor belt"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Start On" : 0
|
||||
2 : "Toggle" : 0
|
||||
]
|
||||
speed(integer) : "Speed" : 100
|
||||
_minlight(integer) : "Minimum light (optional)"
|
||||
]
|
||||
|
||||
// 0221 - updated "sounds" information
|
||||
// 0221 - added "killtarget"
|
||||
@SolidClass base(Appearflags, Targetname, Target) color(0 128 204) = func_door : "Door"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Start Open" : 0
|
||||
4 : "Crusher" : 0
|
||||
8 : "No Monsters" : 0
|
||||
16 : "Animated" : 0
|
||||
32 : "Toggle" : 0
|
||||
64 : "Animated Fast" : 0
|
||||
]
|
||||
killtarget(string) : "Kill Target"
|
||||
team(string) : "Team"
|
||||
message(string) : "Trigger message"
|
||||
health(integer) : "Health (shootable)"
|
||||
speed(integer) : "Speed" : 100
|
||||
wait(choices) : "Wait before close" : 3 =
|
||||
[
|
||||
-1 : "Stay open"
|
||||
]
|
||||
lip(integer) : "Lip remaining after move" : 8
|
||||
dmg(integer) : "Damage when blocked" : 2
|
||||
sounds(choices) : "Sounds" : 0 =
|
||||
[
|
||||
0 : "Audible"
|
||||
1 : "Silent"
|
||||
]
|
||||
// sounds(choices) : "Sounds" : 3 =
|
||||
// [
|
||||
// 1 : "Silent"
|
||||
// 2 : "Light"
|
||||
// 3 : "Medium"
|
||||
// 4 : "Heavy"
|
||||
// ]
|
||||
_minlight(integer) : "Minimum light (optional)"
|
||||
]
|
||||
|
||||
// 0221 - added "killtarget" and "target" keys
|
||||
// 0221 - updated "sounds" info
|
||||
// 0221 - removed "lip" key
|
||||
@SolidClass base(Appearflags, Targetname, Target) color(0 128 204) = func_door_rotating : "Rotating Door"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Start Open" : 0
|
||||
2 : "Reverse" : 0
|
||||
4 : "Crusher" : 0
|
||||
8 : "No Monsters" : 0
|
||||
16 : "Animated" : 0
|
||||
32 : "Toggle" : 0
|
||||
64 : "X Axis" : 0
|
||||
128 : "Y Axis" : 0
|
||||
]
|
||||
killtarget(string) : "Kill Target"
|
||||
team(string) : "Team"
|
||||
distance(integer) : "Degrees of rotation" : 90
|
||||
message(string) : "Trigger message"
|
||||
health(integer) : "Health (shootable)"
|
||||
speed(integer) : "Speed" : 100
|
||||
wait(choices) : "Wait before close" : 3 =
|
||||
[
|
||||
-1 : "Stay open"
|
||||
]
|
||||
dmg(integer) : "Damage when blocked" : 2
|
||||
sounds(choices) : "Sounds" : 0 =
|
||||
[
|
||||
0 : "Audible"
|
||||
1 : "Silent"
|
||||
]
|
||||
// sounds(choices) : "Sounds" : 3 =
|
||||
// [
|
||||
// 1 : "Silent"
|
||||
// 2 : "Light"
|
||||
// 3 : "Medium"
|
||||
// 4 : "Heavy"
|
||||
// ]
|
||||
_minlight(integer) : "Minimum light (optional)"
|
||||
]
|
||||
|
||||
// 0221 - added "_minlight" key (even tho you dont want it to stand out)
|
||||
// 0221 - added "message" key
|
||||
// 0221 - removed "team" key
|
||||
@SolidClass base(Appearflags, Targetname) color(0 128 204) = func_door_secret : "Secret Door"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Always shoot" : 0
|
||||
2 : "1st Left" : 0
|
||||
4 : "1st Down" : 0
|
||||
]
|
||||
dmg(integer) : "Damage when blocked" : 2
|
||||
wait(choices) : "Wait before close" : 5 =
|
||||
[
|
||||
-1 : "Stay open"
|
||||
]
|
||||
message(string) : "Message"
|
||||
_minlight(integer) : "Minimum light (optional)"
|
||||
]
|
||||
|
||||
// not visible in DM mode
|
||||
//
|
||||
// 0221 - added "_minlight" key (even tho you dont want it to stand out)
|
||||
@SolidClass base(Appearflags, Targetname, Target) color(0 128 204) = func_explosive : "Exploding/Breakable brush"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Trigger Spawn" : 0
|
||||
2 : "Animated" : 0
|
||||
4 : "Animated Fast" : 0
|
||||
]
|
||||
health(integer) : "Health" : 100
|
||||
mass(integer) : "Mass (debris)" : 75
|
||||
dmg(integer) : "Damage" : 0
|
||||
_minlight(integer) : "Minimum light (optional)"
|
||||
]
|
||||
|
||||
@SolidClass base(Appearflags, Targetname) color(255 0 0) = func_killbox : "Instant death" []
|
||||
|
||||
// 0221 - added "_minlight" key
|
||||
@SolidClass base(Appearflags, Targetname) color (0 128 204) = func_object : "Solid bmodel, will fall if its support is removed"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Trigger Spawn" : 0
|
||||
2 : "Animated" : 0
|
||||
4 : "Animated Fast" : 0
|
||||
]
|
||||
_minlight(integer) : "Minimum light (optional)"
|
||||
]
|
||||
|
||||
// 0221 - removed "sounds" key
|
||||
@SolidClass base(Appearflags, Targetname) color(0 128 204) = func_plat : "Platform"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Plat Low Trigger" : 0
|
||||
]
|
||||
speed(integer) : "Speed" : 100
|
||||
accel(integer) : "Acceleration" : 500
|
||||
lip(integer) : "Lip remaining after move" : 8
|
||||
height(integer) : "Movement distance"
|
||||
_minlight(integer) : "Minimum light (optional)"
|
||||
]
|
||||
|
||||
// 0222 - added "team" key
|
||||
@SolidClass base(Appearflags, Targetname) color(0 128 204) = func_rotating : "Rotating brush"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Start On" : 0
|
||||
2 : "Reverse" : 0
|
||||
4 : "X Axis" : 0
|
||||
8 : "Y Axis" : 0
|
||||
16 : "Pain on Touch" : 0
|
||||
32 : "Block Stops" : 0
|
||||
64 : "Animated" : 0
|
||||
128 : "Animated Fast" : 0
|
||||
]
|
||||
team(string) : "Team"
|
||||
speed(integer) : "Speed" : 100
|
||||
dmg(integer) : "Damage when blocked" : 2
|
||||
_minlight(integer) : "Minimum light (optional)"
|
||||
]
|
||||
|
||||
@PointClass base(Appearflags, Targetname, Target) color(76 25 153) size(-8 -8 -8, 8 8 8) = func_timer : "Timer"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Start On" : 0
|
||||
]
|
||||
wait(integer) : "Base wait time" : 1
|
||||
random(integer) : "Wait variance (+/-)"
|
||||
delay(integer) : "Delay before first firing"
|
||||
pausetime(integer) : "Additional delay"
|
||||
]
|
||||
|
||||
// 0219 - added "team" key
|
||||
@SolidClass base(Appearflags, Targetname) color(0 128 204) = func_train : "Moving platform"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Start On" : 0
|
||||
2 : "Toggle" : 0
|
||||
4 : "Block Stops" : 0
|
||||
]
|
||||
target(string) : "First stop target"
|
||||
team(string) : "Team"
|
||||
speed(integer) : "Speed" : 100
|
||||
dmg(integer) : "Damage when blocked" : 2
|
||||
noise(string) : "Sound (path/file.wav)"
|
||||
_minlight(integer) : "Minimum light (optional)"
|
||||
]
|
||||
|
||||
// 0221 - added a "_minlight" key
|
||||
@SolidClass base(Appearflags, Targetname) color(0 128 204) = func_wall : "Solid Wall"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Trigger Spawn" : 0
|
||||
2 : "Toggle" : 0
|
||||
4 : "Start On" : 0
|
||||
8 : "Animated" : 0
|
||||
16 : "Animated Fast" : 0
|
||||
]
|
||||
_minlight(integer) : "Minimum light (optional)"
|
||||
]
|
||||
|
||||
// must never be transparent?
|
||||
//
|
||||
// 0221 - added a "_minlight" key
|
||||
@SolidClass base(Appearflags, Targetname) color(0 128 204) = func_water : "Moveable water"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Start Open" : 0
|
||||
]
|
||||
speed(integer) : "Speed" : 25
|
||||
wait(choices) : "Wait before return" : -1 =
|
||||
[
|
||||
-1 : "Toggle"
|
||||
]
|
||||
lip(integer) : "Lip remaining after move"
|
||||
sounds(Choices) : "Sounds" : 1 =
|
||||
[
|
||||
0 : "No Sounds"
|
||||
1 : "Water"
|
||||
2 : "Lava"
|
||||
]
|
||||
team(string) : "Team"
|
||||
_minlight(integer) : "Minimum light (optional)"
|
||||
]
|
||||
|
||||
@PointClass base(Appearflags, Targetname) color(0 128 0) size(-4 -4 -4, 4 4 4) = info_null : "Spotlight target" []
|
||||
@PointClass base(info_null) = info_notnull : "Lightning target" []
|
||||
|
||||
@BaseClass base(Appearflags, Target) color(76 76 255) size(-16 -16 -16, 16 16 16) = Items
|
||||
[
|
||||
team(string) : "Team"
|
||||
]
|
||||
|
||||
@PointClass base(Items) model({ "path": ":models/items/adrenal/tris.md2" }) = item_adrenaline : "+1 to max health" []
|
||||
@PointClass base(Items) model({ "path": ":models/items/c_head/tris.md2" }) = item_ancient_head : "+2 to max health" []
|
||||
@PointClass base(Items) model({ "path": ":models/items/armor/body/tris.md2" }) = item_armor_body : "Body armor" []
|
||||
@PointClass base(Items) model({ "path": ":models/items/armor/combat/tris.md2" }) = item_armor_combat : "Combat armor" []
|
||||
@PointClass base(Items) model({ "path": ":models/items/armor/jacket/tris.md2" }) = item_armor_jacket : "Jacket armor" []
|
||||
@PointClass base(Items) model({ "path": ":models/items/armor/shard/tris.md2" }) = item_armor_shard : "Armor shard" []
|
||||
@PointClass base(Items) model({ "path": ":models/items/band/tris.md2" }) = item_bandolier : "Equipment belt" []
|
||||
@PointClass base(Items) model({ "path": ":models/items/breather/tris.md2" }) = item_breather : "Underwater breather" []
|
||||
@PointClass base(Items) model({ "path": ":models/items/enviro/tris.md2" }) = item_enviro : "Enviro-Suit" []
|
||||
@PointClass base(Items) model({ "path": ":models/items/healing/medium/tris.md2" }) = item_health : "+10 health" []
|
||||
@PointClass base(Items) model({ "path": ":models/items/healing/stimpack/tris.md2" }) = item_health_small : "+2 health" []
|
||||
@PointClass base(Items) model({ "path": ":models/items/healing/large/tris.md2" }) = item_health_large : "+25 health" []
|
||||
@PointClass base(Items) model({ "path": ":models/items/mega_h/tris.md2" }) = item_health_mega : "+100 health" []
|
||||
@PointClass base(Items) model({ "path": ":models/items/invulner/tris.md2" }) = item_invulnerability : "Invulnerability" []
|
||||
@PointClass base(Items) model({ "path": ":models/items/pack/tris.md2" }) = item_pack : "Heavy backpack" []
|
||||
@PointClass base(Items) model({ "path": ":models/items/armor/screen/tris.md2" }) = item_power_screen : "Power screen" []
|
||||
@PointClass base(Items) model({ "path": ":models/items/armor/shield/tris.md2" }) = item_power_shield : "Power shield" []
|
||||
@PointClass base(Items) model({ "path": ":models/items/quaddama/tris.md2" }) = item_quad : "Quad damage" []
|
||||
@PointClass base(Items) model({ "path": ":models/items/silencer/tris.md2" }) = item_silencer : "Silencer" []
|
||||
|
||||
@BaseClass base(Appearflags, Target) color(0 128 204) size(-16 -16 -16, 16 16 16) = Keys []
|
||||
|
||||
@PointClass base(Keys) model({ "path": ":models/items/keys/target/tris.md2" }) = key_airstrike_target : "Tank commander's head" []
|
||||
@PointClass base(Keys) model({ "path": ":models/items/keys/key/tris.md2" }) = key_blue_key : "Normal door key - blue" []
|
||||
@PointClass base(Keys) model({ "path": ":models/monsters/commandr/head/tris.md2" }) = key_commander_head : "Tank commander's head" []
|
||||
@PointClass base(Keys) model({ "path": ":models/items/keys/data_cd/tris.md2" }) = key_data_cd : "Key for computer centers" []
|
||||
@PointClass base(Keys) model({ "path": ":models/items/keys/spinner/tris.md2" }) = key_data_spinner : "Key for city computer" []
|
||||
@PointClass base(Keys) model({ "path": ":models/items/keys/pass/tris.md2" }) = key_pass : "Security pass for secret level" []
|
||||
|
||||
// 0301 - added "targetname" key
|
||||
@PointClass base(Keys, Targetname) model({ "path": ":models/items/keys/power/tris.md2" }) = key_power_cube : "Warehouse circuits"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Trigger Spawn" : 0
|
||||
2 : "No Touch" : 0
|
||||
]
|
||||
]
|
||||
@PointClass base(Keys) model({ "path": ":models/items/keys/pyramid/tris.md2" }) = key_pyramid : "Key for entrance to jail3" []
|
||||
@PointClass base(Keys) model({ "path": ":models/items/keys/red_key/tris.md2" }) = key_red_key : "normal door key - red" []
|
||||
|
||||
@PointClass base(Appearflags, Target, Targetname) color(0 255 0) size(-8 -8 -8, 8 8 8) = light : "Light"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Start Off" : 0
|
||||
]
|
||||
light(integer) : "Brightness" : 300
|
||||
style(Choices) : "Style" : 0 =
|
||||
[
|
||||
0 : "Normal"
|
||||
1 : "Flicker #1"
|
||||
6 : "Flicker #2"
|
||||
2 : "Slow Strong Pulse"
|
||||
3 : "Candle #1"
|
||||
7 : "Candle #2"
|
||||
8 : "Candle #3"
|
||||
4 : "Fast Strobe"
|
||||
5 : "Gentle Pulse #1"
|
||||
9 : "Slow Strobe"
|
||||
10 : "Fluorescent Flicker"
|
||||
11 : "Slow pulse, no black"
|
||||
]
|
||||
_cone(integer) : "Size of light (spotlight)" : 10
|
||||
]
|
||||
|
||||
// 0221 - blanked out the "start off" spawnflag
|
||||
// 0221 - added better descriptions :)
|
||||
@PointClass base(light) color(0 255 0) size(-2 -2 -12, 2 2 12) = light_mine1 : "Dusty fluorescent light fixture"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "" : 0
|
||||
]
|
||||
]
|
||||
// 0221 - changed inheritance from "light" to "light_min1"
|
||||
@PointClass base(light_mine1) = light_mine2 : "Clean fluorescent light fixture" []
|
||||
|
||||
// actor code is still broken...leaving this in because i know *someone* will fix
|
||||
// this because its pretty damn cool.
|
||||
@PointClass base(PlayerClass, Target) = misc_actor : "Actor"
|
||||
[
|
||||
health(integer) : "Health" : 100
|
||||
]
|
||||
@PointClass base(Appearflags, Targetname) = target_actor : "Actor path"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Jump" : 0
|
||||
2 : "Shoot" : 0
|
||||
4 : "Attack" : 0
|
||||
16 : "Hold" : 0
|
||||
32 : "Brutal" : 0
|
||||
]
|
||||
target(string) : "Next path target"
|
||||
pathtarget(string) : "Action target"
|
||||
wait(integer) : "Pause time"
|
||||
message(string) : "Message"
|
||||
speed(integer) : "Forward (jump)" : 200
|
||||
height(integer) : "Height (jump)" : 200
|
||||
]
|
||||
|
||||
// 0224 - changed banner size from (-4 -4 -4, 4 4 4) to (-4 -4 0, 4 4 246)
|
||||
@PointClass base(Appearflags) color(255 128 0) size(-4 -4 0, 4 4 246) model({ "path": ":models/objects/banner/tris.md2" }) = misc_banner : "Flowing banner" []
|
||||
|
||||
@PointClass base(Appearflags) color(255 128 0) size(-8 -8 -8, 8 8 8) model({ "path": ":models/objects/black/tris.md2" }) = misc_blackhole : "Blackhole" []
|
||||
|
||||
@PointClass base(Appearflags) color(255 128 0) size(-16 -16 0, 16 16 16)
|
||||
model(
|
||||
{{
|
||||
spawnflags & 32 -> { "path": ":models/deadbods/dude/tris.md2", "frame": 5 },
|
||||
spawnflags & 16 -> { "path": ":models/deadbods/dude/tris.md2", "frame": 4 },
|
||||
spawnflags & 8 -> { "path": ":models/deadbods/dude/tris.md2", "frame": 3 },
|
||||
spawnflags & 4 -> { "path": ":models/deadbods/dude/tris.md2", "frame": 2 },
|
||||
spawnflags & 2 -> { "path": ":models/deadbods/dude/tris.md2", "frame": 1 },
|
||||
":models/deadbods/dude/tris.md2"
|
||||
}}
|
||||
) = misc_deadsoldier : "Dead guys! 6 of em!"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "On Back" : 0
|
||||
2 : "On Stomach" : 0
|
||||
4 : "Back, Decap" : 0
|
||||
8 : "Fetal Position" : 0
|
||||
16 : "Sitting, Decap" : 0
|
||||
32 : "Impaled" : 0
|
||||
]
|
||||
]
|
||||
|
||||
// The following three entities are eye-candy - they don't do anything
|
||||
@PointClass base(Appearflags) color(255 128 0) size(-32 -32 -16, 32 32 32) = misc_eastertank : "Tank Pimp" []
|
||||
@PointClass base(Appearflags) color(255 128 0) size(-32 -32 0, 32 32 32) = misc_easterchick : "Chick #1" []
|
||||
@PointClass base(Appearflags) color(255 128 0) size(-32 -32 0, 32 32 32) = misc_easterchick2 : "Chick #2" []
|
||||
|
||||
// 0225 - removed "target" key - id concluded being able to target
|
||||
// something with a movable barrel was a bug and removed that function :(
|
||||
@PointClass base(Appearflags, Targetname) color(0 128 204) size(-16 -16 0, 16 16 40) model({ "path": ":models/objects/barrels/tris.md2" }) = misc_explobox : "Large exploding box"
|
||||
[
|
||||
mass(integer) : "Mass" : 100
|
||||
health(integer) : "Health" : 80
|
||||
dmg(integer) : "Damage" : 150
|
||||
]
|
||||
|
||||
// set angle for gib direction, otherwise it just drops
|
||||
@PointClass base(Appearflags) color(255 0 0) size(-8 -8 -8, 8 8 8) model({ "path": ":models/objects/gibs/arm/tris.md2" }) = misc_gib_arm : "arm gib, use with target_spawner" []
|
||||
@PointClass base(Appearflags) color(255 0 0) size(-8 -8 -8, 8 8 8) model({ "path": ":models/objects/gibs/head/tris.md2" }) = misc_gib_head : "head gib, use with target_spawner" []
|
||||
@PointClass base(Appearflags) color(255 0 0) size(-8 -8 -8, 8 8 8) model({ "path": ":models/objects/gibs/arm/tris.md2" }) = misc_gib_leg : "leg gib, use with target_spawner" []
|
||||
|
||||
// 0221 - added "item", "deathtarget", and "killtarget" keys
|
||||
@PointClass base(Appearflags, Targetname, Target) color(255 128 0) size(-16 -16 -24, 16 16 32) = misc_insane : "Insane Soldiers"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Ambush" : 0
|
||||
2 : "Trigger Spawn" : 0
|
||||
4 : "Crawl" : 0
|
||||
8 : "Crucified" : 0
|
||||
16 : "Stand Ground" : 0
|
||||
32 : "Always Stand" : 0
|
||||
]
|
||||
deathtarget(string) : "Entity to trigger at death"
|
||||
killtarget(string) : "Entity to remove at death"
|
||||
item(string) : "Item to spawn at death"
|
||||
]
|
||||
|
||||
// 0303 - added "targetname" key
|
||||
@PointClass base(Appearflags, Targetname) color(255 128 0) size(-64 -64 0, 64 64 128) model({ "path": ":models/objects/satellite/tris.md2" }) = misc_satellite_dish : "Satellite Dish" []
|
||||
|
||||
@PointClass base(Appearflags, Targetname) color(255 128 0) size(-16 -16 0, 16 16 32) model({ "path": ":models/ships/strogg1/tris.md2" }) = misc_strogg_ship : "Strogg ship for flybys"
|
||||
[
|
||||
target(string) : "First path target"
|
||||
speed(integer) : "Speed"
|
||||
|
||||
]
|
||||
|
||||
// place teleporter units 10 units into a brush to get rid of teleport pad
|
||||
@PointClass base(Appearflags, Targetname) color(255 0 0) size(-32 -32 -24, 32 32 -16) = misc_teleporter : "Teleporter"
|
||||
[
|
||||
target(string) : "Teleport Destination"
|
||||
]
|
||||
@PointClass base(Appearflags, Targetname) color(255 0 0) size(-32 -32 -24, 32 32 -16) = misc_teleporter_dest : "Teleport Destination" []
|
||||
|
||||
@PointClass base(Appearflags) color(255 128 0) size(-176 -120 -24, 176 120 72) model({ "path": ":models/ships/bigviper/tris.md2" }) = misc_bigviper : "Large stationary Viper" []
|
||||
@PointClass base(Appearflags, Targetname) color(255 128 0) size(-16 -16 0, 16 16 32) model({ "path": ":models/ships/viper/tris.md2" }) = misc_viper : "Viper for flybys"
|
||||
[
|
||||
target(string) : "First path target"
|
||||
speed(integer) : "Speed"
|
||||
|
||||
]
|
||||
@PointClass base(Appearflags, Targetname) color(255 0 0) size(-8 -8 -8, 8 8 8) model({ "path": ":models/objects/bomb/tris.md2" }) = misc_viper_bomb : "Viper Bomb"
|
||||
[
|
||||
dmg(integer) : "Damage"
|
||||
]
|
||||
|
||||
//
|
||||
// Monsters!
|
||||
//
|
||||
|
||||
// 0221 - added "deathtarget", "killtarget", and "combattarget" keys
|
||||
@BaseClass base(Appearflags, Target, Targetname) color(255 128 0) size(-16 -16 -24, 16 16 32) = Monsters
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Ambush" : 0
|
||||
2 : "Trigger Spawn" : 0
|
||||
4 : "Sight" : 0
|
||||
]
|
||||
combattarget(string) : "Point combat target"
|
||||
deathtarget(string) : "Entity to trigger at death"
|
||||
killtarget(string) : "Entity to remove at death"
|
||||
item(string) : "Spawn Item"
|
||||
]
|
||||
|
||||
@PointClass base(Monsters) model({ "path": ":models/monsters/berserk/tris.md2" }) = monster_berserk : "Berserker" []
|
||||
@PointClass base(Monsters) size(-56 -56 0, 56 56 80) = monster_boss2 : "Boss2" []
|
||||
|
||||
// Just fidgets in one spot and teleports away when triggered
|
||||
//
|
||||
// 0221 - removed Monsters class inheritance
|
||||
@PointClass base(Appearflags, Targetname) size(-32 -32 0, 32 32 90) = monster_boss3_stand : "Stationnary Makron" []
|
||||
|
||||
@PointClass base(Monsters) model({ "path": ":models/monsters/brain/tris.md2" }) = monster_brain : "Brains" []
|
||||
@PointClass base(Monsters) model({ "path": ":models/monsters/bitch/tris.md2" }) = monster_chick : "Iron Maiden" []
|
||||
@PointClass base(Appearflags, Targetname) color(255 128 0) size(-32 -32 0, 32 32 48) model({ "path": ":models/monsters/commandr/tris.md2" }) = monster_commander_body : "Tank commander's decapitated body" []
|
||||
@PointClass base(Monsters) model({ "path": ":models/monsters/flipper/tris.md2" }) = monster_flipper : "Barracuda shark" []
|
||||
@PointClass base(Monsters) model({ "path": ":models/monsters/float/tris.md2" }) = monster_floater : "Technician" []
|
||||
@PointClass base(Monsters) model({ "path": ":models/monsters/flyer/tris.md2" }) = monster_flyer : "Flyer" []
|
||||
@PointClass base(Monsters) size(-32 -32 -24, 32 32 64) model({ "path": ":models/monsters/gladiatr/tris.md2" }) = monster_gladiator : "Gladiator" []
|
||||
@PointClass base(Monsters) model({ "path": ":models/monsters/gunner/tris.md2" }) = monster_gunner : "Gunner" []
|
||||
@PointClass base(Monsters) model({ "path": ":models/monsters/hover/tris.md2" }) = monster_hover : "Icarus" []
|
||||
@PointClass base(Monsters) model({ "path": ":models/monsters/infantry/tris.md2" }) = monster_infantry : "Infantry" []
|
||||
@PointClass base(Monsters) size(-80 -80 0, 90 90 140) model({ "path": ":models/monsters/boss3/jorg/tris.md2" }) = monster_jorg : "Jorg" []
|
||||
|
||||
// 0221 - this entity can only spawn once the Jorg dies ... im sure someone will change that tho
|
||||
@PointClass base(Monsters) size(-30 -30 0, 30 30 90) model({ "path": ":models/monsters/boss3/rider/tris.md2" }) = monster_makron : "Makron" []
|
||||
@PointClass base(Monsters) model({ "path": ":models/monsters/medic/tris.md2" }) = monster_medic : "Medic" []
|
||||
@PointClass base(Monsters) size(-32 -32 -24, 32 32 32) model({ "path": ":models/monsters/mutant/tris.md2" }) = monster_mutant : "Mutant" []
|
||||
@PointClass base(Monsters) model({ "path": ":models/monsters/parasite/tris.md2" }) = monster_parasite : "Parasite" []
|
||||
@PointClass base(Monsters) model({ "path": ":models/monsters/soldier/tris.md2", "skin": 0 }) = monster_soldier_light : "Light Soldier" []
|
||||
@PointClass base(Monsters) model({ "path": ":models/monsters/soldier/tris.md2", "skin": 2 }) = monster_soldier : "Soldier" []
|
||||
@PointClass base(Monsters) model({ "path": ":models/monsters/soldier/tris.md2", "skin": 4 }) = monster_soldier_ss : "SS Soldier" []
|
||||
@PointClass base(Monsters) size(-32 -32 -16, 32 32 72) model({ "path": ":models/monsters/tank/tris.md2" }) = monster_tank : "Tank" []
|
||||
@PointClass base(Monsters) size(-64 -64 0, 64 64 72) model({ "path": ":models/monsters/tank/tris.md2", "skin": 2 }) = monster_supertank : "Super tank" []
|
||||
@PointClass base(Monsters) size(-32 -32 -16, 32 32 72) model({ "path": ":models/monsters/boss1/tris.md2" }) = monster_tank_commander : "Tank commander" []
|
||||
|
||||
// using a "wait" value of -1 on a path corner causes a func_train to go silent between
|
||||
// itself and the next path corner when the train is restarted. The train's sound will
|
||||
// resume as soon as it reaches a path corner with a "wait" value other than -1
|
||||
@PointClass base(Appearflags, Targetname) color(128 76 0) size(-8 -8 -8, 8 8 8) = path_corner : "Path marker"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Teleport" : 0
|
||||
]
|
||||
target(string) : "Next path target"
|
||||
pathtarget(string) : "Event to trigger"
|
||||
wait(choices) : "Wait" : 0 =
|
||||
[
|
||||
-1 : "Wait for retrigger"
|
||||
]
|
||||
]
|
||||
|
||||
// "target" doesn't work (for now)...a separate trigger is needed
|
||||
@PointClass base(Appearflags, Targetname, Target) color(128 76 9) size(-8 -8 -8, 8 8 8) = point_combat : "1st point of combat"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Hold" : 0
|
||||
]
|
||||
]
|
||||
|
||||
@PointClass base(Appearflags, Targetname) color(255 0 0) size(-8 -8 -8, 8 8 8) = target_blaster : "Blaster"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "No Trail" : 0
|
||||
2 : "No Effects" : 0
|
||||
]
|
||||
dmg(integer) : "Damage" : 15
|
||||
speed(integer) : "Speed" : 1000
|
||||
]
|
||||
|
||||
// set "map" value to "mapname$playername" where playername equals
|
||||
// the targetname of a corresponding info_player_start in the
|
||||
// next map. To play a cinematic before starting the level, the
|
||||
// "map" value should be "cinemeatic.cin+mapname$playername". Note
|
||||
// that a playername is not required if the corresponding info_player_start
|
||||
// doesn't have a targetname. If you want this to be designated as the last
|
||||
// level of a unit, place an asterix (*) before the map name.
|
||||
@PointClass base(Appearflags, Targetname) color(255 0 0) size(-8 -8 -8, 8 8 8) = target_changelevel : "Change level"
|
||||
[
|
||||
map(string) : "Next map"
|
||||
]
|
||||
|
||||
// 0221 - added "_minlight" key
|
||||
@SolidClass base(Appearflags, Targetname) color(0 0 255) = target_character : "Use with target_string and func_clock"
|
||||
[
|
||||
team(string) : "Team"
|
||||
count(integer) : "Position in the string"
|
||||
_minlight(string) : "Minimum light (optional)"
|
||||
]
|
||||
|
||||
@PointClass base(Appearflags, Targetname, Target) color(128 128 128) size(-8 -8 -8, 8 8 8) = target_crosslevel_trigger : "Cross-level trigger"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Trigger 1" : 0
|
||||
2 : "Trigger 2" : 0
|
||||
4 : "Trigger 3" : 0
|
||||
8 : "Trigger 4" : 0
|
||||
16 : "Trigger 5" : 0
|
||||
32 : "Trigger 6" : 0
|
||||
64 : "Trigger 7" : 0
|
||||
128 : "Trigger 8" : 0
|
||||
]
|
||||
killtarget(string) : "Kill Target"
|
||||
message(string) : "Message"
|
||||
delay(integer) : "Trigger delay"
|
||||
]
|
||||
|
||||
@PointClass base(Appearflags, Targetname, Target) color(128 128 128) size(-8 -8 -8, 8 8 8) = target_crosslevel_target : "Cross-level trigger"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Trigger 1" : 0
|
||||
2 : "Trigger 2" : 0
|
||||
4 : "Trigger 3" : 0
|
||||
8 : "Trigger 4" : 0
|
||||
16 : "Trigger 5" : 0
|
||||
32 : "Trigger 6" : 0
|
||||
64 : "Trigger 7" : 0
|
||||
128 : "Trigger 8" : 0
|
||||
]
|
||||
killtarget(string) : "Kill Target"
|
||||
delay(integer) : "Trigger delay (if activated)" : 1
|
||||
]
|
||||
|
||||
@PointClass base(Appearflags, Targetname) color(255 0 0) size(-8 -8 -8, 8 8 8) = target_earthquake : "Level wide earthquake"
|
||||
[
|
||||
speed(integer) : "Severity of quake" : 200
|
||||
count(integer) : "Duration" : 5
|
||||
]
|
||||
|
||||
@PointClass base(Appearflags, Targetname) color(255 0 0) size(-8 -8 -8, 8 8 8) = target_explosion : "Explosion"
|
||||
[
|
||||
delay(integer) : "Delay before explosion"
|
||||
dmg(integer) : "Radius damage" : 0
|
||||
]
|
||||
|
||||
@PointClass base(Appearflags, Targetname) color(255 0 255) size(-8 -8 -8, 8 8 8) = target_goal : "Counts a goal completed" []
|
||||
|
||||
@PointClass base(Appearflags, Targetname) color(255 0 255) size(-8 -8 -8, 8 8 8) = target_help : "Computer help message"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Main Onjective" : 0
|
||||
]
|
||||
message(string) : "Computer message"
|
||||
]
|
||||
|
||||
// if no color spawnflags are set, the laser color defaults to dim gray (and hard to see
|
||||
// setting the damage to 0 makes it use the default damage of 1
|
||||
// setting the damage to a negative number will actually give health
|
||||
@PointClass base(Appearflags, Targetname, Target) color(0 128 204) size(-8 -8 -8, 8 8 8) = target_laser : "Laser"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Start On" : 0
|
||||
2 : "Red" : 0
|
||||
4 : "Green" : 0
|
||||
8 : "Blue" : 0
|
||||
16 : "Yellow" : 0
|
||||
32 : "Orange" : 0
|
||||
64 : "Fat" : 0
|
||||
]
|
||||
dmg(integer) : "Damage"
|
||||
]
|
||||
|
||||
// 0221 - added "target" key
|
||||
@PointClass base(Appearflags, Targetname, Target) color(0 128 204) size(-8 -8 -8, 8 8 8) = target_lightramp : "Light ramp"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Toggle" : 0
|
||||
]
|
||||
speed(integer) : "Speed"
|
||||
message(string) : "start/end light level"
|
||||
]
|
||||
|
||||
@PointClass base(Appearflags, Targetname) color(255 0 255) size(-8 -8 -8, 8 8 8) = target_secret : "Counts a secret found"
|
||||
[
|
||||
message(string) : "Message to print" : "You have found a secret."
|
||||
]
|
||||
|
||||
// set speed and angle, otherwise spawned object drops
|
||||
//
|
||||
// 0221 - changed "target" key description for clarity
|
||||
@PointClass base(Appearflags, Targetname) color(255 0 0) size(-8 -8 -8, 8 8 8) = target_spawner : "Monster/Item spawner"
|
||||
[
|
||||
target(string) : "Monster/Item to spawn"
|
||||
speed(integer) : "Speed"
|
||||
]
|
||||
|
||||
// looped sounds are automatically volume 1, attenuation 3 :\
|
||||
@PointClass base(Appearflags, Targetname) color(255 0 0) size(-8 -8 -8, 8 8 8) = target_speaker : "Sound player"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Looped On" : 0
|
||||
2 : "Looped Off" : 0
|
||||
4 : "Reliable" : 0
|
||||
]
|
||||
noise(string) : "Sound (path/file.wav)"
|
||||
attenuation(Choices) : "Attenuation" : 1 =
|
||||
[
|
||||
-1 : "None, send to whole level"
|
||||
1 : "Normal fighting sounds"
|
||||
2 : "Idle sound level"
|
||||
3 : "Ambient sound level"
|
||||
]
|
||||
volume(integer) : "Volume (0.0 - 1.0)" : 1
|
||||
]
|
||||
|
||||
// "sounds" values other than 1 are silent. leaving in the other
|
||||
// options for availability to mods/fixes
|
||||
//
|
||||
// 0221 - clarified "count" description
|
||||
@PointClass base(Appearflags, Targetname) color(255 0 0) size(-8 -8 -8, 8 8 8) = target_splash : "Creates a splash when used"
|
||||
[
|
||||
sounds(choices) : "Type of splash" : 2 =
|
||||
[
|
||||
1 : "Sparks"
|
||||
2 : "Blue water"
|
||||
3 : "Brown water"
|
||||
4 : "Slime"
|
||||
5 : "Lava"
|
||||
6 : "Blood"
|
||||
]
|
||||
count(integer) : "Number of pixels in splash (1 - 255)"
|
||||
dmg(integer) : "Radius damage"
|
||||
]
|
||||
|
||||
// 0221 - removed "message" key (?)
|
||||
@PointClass base(Appearflags, Targetname) color(0 0 255) size(-8 -8 -8, 8 8 8) = target_string : "String"
|
||||
[
|
||||
team(string) : "Team"
|
||||
]
|
||||
|
||||
// eye candy... Particles #2 (style 22) is quite cool
|
||||
@PointClass base(Appearflags, Targetname) color(255 0 0) size(-8 -8 -8, 8 8 8) = target_temp_entity : "Temp entity"
|
||||
[
|
||||
style(choices) : "Style" : 22 =
|
||||
[
|
||||
20 : "Green Fireball"
|
||||
21 : "Particles #1"
|
||||
22 : "Particles #2"
|
||||
]
|
||||
]
|
||||
|
||||
// 0221 - added "delay" and "killtarget" keys
|
||||
@PointClass base(Appearflags, Target) color(128 128 128) size(-8 -8 -8, 8 8 8) = trigger_always : "Always triggers"
|
||||
[
|
||||
killtarget(string) : "Kill Target"
|
||||
delay(integer) : "Time before triggering"
|
||||
]
|
||||
|
||||
@SolidClass base(Appearflags, Targetname, Target) color(128 128 128) = trigger_counter : "Counter"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "No Message" : 0
|
||||
]
|
||||
count(integer) : "Count before trigger" : 2
|
||||
]
|
||||
|
||||
@PointClass base(Appearflags, Targetname, Target) color(76 25 153) = trigger_elevator : "Elevator trigger" []
|
||||
|
||||
@SolidClass base(Appearflags) color(128 128 128) = trigger_gravity : "Change gravity"
|
||||
[
|
||||
gravity(integer) : "Gravity (standard = 1.0)" : 1
|
||||
]
|
||||
|
||||
@SolidClass base(Appearflags, Targetname) color(128 128 128) = trigger_hurt : "Hurts on touch"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Start Off" : 0
|
||||
2 : "Toggle" : 0
|
||||
4 : "Silent" : 0
|
||||
8 : "No Protection" : 0
|
||||
16 : "Slow hurt" : 0
|
||||
]
|
||||
dmg(integer) : "Damage" : 5
|
||||
]
|
||||
|
||||
@PointClass base(Appearflags, Targetname, Target) color(128 128 128) size(-8 -8 -8, 8 8 8) = trigger_key : "Triggers with key"
|
||||
[
|
||||
killtarget(string) : "Kill target"
|
||||
item(string) : "Item classname" : "key_blue_key"
|
||||
]
|
||||
|
||||
@SolidClass base(Appearflags) color(128 128 128) = trigger_monsterjump : "Makes monsters jump"
|
||||
[
|
||||
speed(integer) : "Speed thrown forward" : 200
|
||||
height(integer) : "Height thrown upward" : 200
|
||||
]
|
||||
|
||||
// 0221 - switched around _relay, _once, and _multiple
|
||||
@PointClass base(Appearflags, Targetname, Target) color(128 128 128) = trigger_relay : "Relay trigger"
|
||||
[
|
||||
killtarget(string) : "Kill Target"
|
||||
delay(integer) : "Time before triggering"
|
||||
message(string) : "Trigger message"
|
||||
]
|
||||
|
||||
// 0303 - removed "sounds" key
|
||||
@SolidClass base(trigger_relay) = trigger_once : "Single fire trigger"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
4 : "Triggered" : 0
|
||||
]
|
||||
]
|
||||
|
||||
@SolidClass base(trigger_once) = trigger_multiple : "Multiple fire trigger"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Monster" : 0
|
||||
2 : "Not Player" : 0
|
||||
]
|
||||
wait(integer) : "Seconds between triggers" : 0
|
||||
]
|
||||
|
||||
@SolidClass base(Appearflags) color(128 128 128) = trigger_push : "Push trigger"
|
||||
[
|
||||
spawnflags(Flags) =
|
||||
[
|
||||
1 : "Push Once" : 0
|
||||
]
|
||||
speed(integer) : "Speed of push" : 1000
|
||||
]
|
||||
|
||||
// 0221 - added "_minlight" key to _breach and _base
|
||||
@SolidClass base(Appearflags, Targetname, Target) color(128 255 128) = turret_breach : "Turret breach"
|
||||
[
|
||||
speed(integer) : "Speed" : 50
|
||||
dmg(integer) : "Damage" : 10
|
||||
minpitch(integer) : "Miminum pitch angle" : -30
|
||||
maxpitch(integer) : "Maximum pitch angle" : 30
|
||||
minyaw(integer) : "Minimum yaw angle" : 0
|
||||
maxyaw(integer) : "Maximum yaw angle" : 360
|
||||
team(string) : "Team"
|
||||
_minlight(string) : "Minimum light (optional)"
|
||||
]
|
||||
@SolidClass base(Appearflags) color(128 255 128) = turret_base : "Turret base"
|
||||
[
|
||||
team(string) : "Team"
|
||||
_minlight(string) : "Minimum light (optional)"
|
||||
]
|
||||
@PointClass base(Appearflags) color(128 255 128) size(-16 -16 -24, 16 16 32) = turret_driver : "Turret driver"
|
||||
[
|
||||
target(string) : "Target (turret_breach)"
|
||||
]
|
||||
|
||||
@PointClass base(Appearflags) color(0 128 204) size(-8 -8 -8, 8 8 8) = viewthing : "Just for debugging level - dont use" []
|
||||
|
||||
@BaseClass base(Appearflags, Target) color(76 76 255) size(-16 -16 -16, 16 16 16) = Weapons
|
||||
[
|
||||
team(string) : "Team"
|
||||
]
|
||||
|
||||
//
|
||||
// Weapons!
|
||||
//
|
||||
|
||||
@PointClass base(Weapons) model({ "path": ":models/weapons/g_shotg/tris.md2" }) = weapon_shotgun : "Shotgun" []
|
||||
@PointClass base(Weapons) model({ "path": ":models/weapons/g_shotg2/tris.md2" }) = weapon_supershotgun : "Super shotgun" []
|
||||
@PointClass base(Weapons) model({ "path": ":models/weapons/g_machn/tris.md2" }) = weapon_machinegun : "Machinegun" []
|
||||
@PointClass base(Weapons) model({ "path": ":models/weapons/g_chain/tris.md2" }) = weapon_chaingun : "Chain gun" []
|
||||
@PointClass base(Weapons) model({ "path": ":models/weapons/g_launch/tris.md2" }) = weapon_grenadelauncher : "Grenade launcher" []
|
||||
@PointClass base(Weapons) model({ "path": ":models/weapons/g_rocket/tris.md2" }) = weapon_rocketlauncher : "Rocket launcher" []
|
||||
@PointClass base(Weapons) model({ "path": ":models/weapons/g_hyperb/tris.md2" }) = weapon_hyperblaster : "Hyperblaster" []
|
||||
@PointClass base(Weapons) model({ "path": ":models/weapons/g_rail/tris.md2" }) = weapon_railgun : "Rail gun" []
|
||||
@PointClass base(Weapons) model({ "path": ":models/weapons/g_bfg/tris.md2" }) = weapon_bfg : "Big Freakin Gun!" []
|
||||
BIN
tb/games/Quake2/colormap.pcx
Normal file
222
tb/games/Quake3/GameConfig.cfg
Normal file
@@ -0,0 +1,222 @@
|
||||
{
|
||||
"version": 3,
|
||||
"name": "Quake 3",
|
||||
"icon": "Icon.png",
|
||||
"experimental": true,
|
||||
"fileformats": [
|
||||
{ "format": "Quake3" },
|
||||
{ "format": "Quake3 (legacy)" }
|
||||
],
|
||||
"filesystem": {
|
||||
"searchpath": "baseq3",
|
||||
"packageformat": { "extension": "pk3", "format": "zip" }
|
||||
},
|
||||
"textures": {
|
||||
"package": { "type": "directory", "root": "textures" },
|
||||
"format": { "extensions": [ "" ], "format": "q3shader" },
|
||||
"shaderSearchPath": "scripts", // this will likely change when we get a material system
|
||||
"attribute": "_tb_textures"
|
||||
},
|
||||
"entities": {
|
||||
"definitions": [ "entities.ent" ],
|
||||
"defaultcolor": "0.6 0.6 0.6 1.0",
|
||||
"modelformats": [ "md3", "ase" ]
|
||||
},
|
||||
"tags": {
|
||||
"brush": [
|
||||
{
|
||||
"name": "Trigger",
|
||||
"attribs": [ "transparent" ],
|
||||
"match": "classname",
|
||||
"pattern": "trigger*",
|
||||
"texture": "trigger"
|
||||
}
|
||||
],
|
||||
"brushface": [
|
||||
{
|
||||
"name": "Clip",
|
||||
"attribs": [ "transparent" ],
|
||||
"match": "surfaceparm",
|
||||
"pattern": "playerclip"
|
||||
},
|
||||
{
|
||||
"name": "Caulk",
|
||||
"attribs": [ "transparent" ],
|
||||
"match": "texture",
|
||||
"pattern": "caulk"
|
||||
},
|
||||
{
|
||||
"name": "Skip",
|
||||
"attribs": [ "transparent" ],
|
||||
"match": "texture",
|
||||
"pattern": "skip"
|
||||
},
|
||||
{
|
||||
"name": "Hint",
|
||||
"attribs": [ "transparent" ],
|
||||
"match": "texture",
|
||||
"pattern": "hint*"
|
||||
},
|
||||
{
|
||||
"name": "Detail",
|
||||
"match": "contentflag",
|
||||
"flags": [ "detail" ]
|
||||
},
|
||||
{
|
||||
"name": "Liquid",
|
||||
"match": "contentflag",
|
||||
"flags": [ "lava", "slime", "water" ]
|
||||
},
|
||||
{
|
||||
"name": "Sound",
|
||||
"match": "surfaceflag",
|
||||
"flags": [ "wood", "metal", "stone", "glass", "ice", "snow", "puddle", "sand" ]
|
||||
},
|
||||
{
|
||||
"name": "Transparent",
|
||||
"attribs": [ "transparent" ],
|
||||
"match": "surfaceflag",
|
||||
"flags": [ "trans33", "trans66" ]
|
||||
}
|
||||
]
|
||||
},
|
||||
"faceattribs": {
|
||||
"surfaceflags": [
|
||||
{
|
||||
"name": "light",
|
||||
"description": "Emit light from the surface, brightness is specified in the 'value' field"
|
||||
},
|
||||
{
|
||||
"name": "slick",
|
||||
"description": "The surface is slippery"
|
||||
},
|
||||
{
|
||||
"name": "sky",
|
||||
"description": "The surface is sky, the texture will not be drawn, but the background sky box is used instead"
|
||||
},
|
||||
{
|
||||
"name": "warp",
|
||||
"description": "The surface warps (like water textures do)"
|
||||
},
|
||||
{
|
||||
"name": "trans33",
|
||||
"description": "The surface is 33% transparent"
|
||||
},
|
||||
{
|
||||
"name": "trans66",
|
||||
"description": "The surface is 66% transparent"
|
||||
},
|
||||
{
|
||||
"name": "flowing",
|
||||
"description": "The texture wraps in a downward 'flowing' pattern (warp must also be set)"
|
||||
},
|
||||
{
|
||||
"name": "nodraw",
|
||||
"description": "Used for non-fixed-size brush triggers and clip brushes"
|
||||
},
|
||||
{
|
||||
"name": "hint",
|
||||
"description": "Make a primary bsp splitter"
|
||||
},
|
||||
{
|
||||
"name": "skip",
|
||||
"description": "Completely ignore, allowing non-closed brushes"
|
||||
}
|
||||
],
|
||||
"contentflags": [
|
||||
{
|
||||
"name": "solid",
|
||||
"description": "Default for all brushes"
|
||||
}, // 1
|
||||
{
|
||||
"name": "window",
|
||||
"description": "Brush is a window (not really used)"
|
||||
}, // 2
|
||||
{
|
||||
"name": "aux",
|
||||
"description": "Unused by the engine"
|
||||
}, // 4
|
||||
{
|
||||
"name": "lava",
|
||||
"description": "The brush is lava"
|
||||
}, // 8
|
||||
{
|
||||
"name": "slime",
|
||||
"description": "The brush is slime"
|
||||
}, // 16
|
||||
{
|
||||
"name": "water",
|
||||
"description": "The brush is water"
|
||||
}, // 32
|
||||
{
|
||||
"name": "mist",
|
||||
"description": "The brush is non-solid"
|
||||
}, // 64
|
||||
{ "name": "unused" }, // 128
|
||||
{ "name": "unused" }, // 256
|
||||
{ "name": "unused" }, // 512
|
||||
{ "name": "unused" }, // 1024
|
||||
{ "name": "unused" }, // 2048
|
||||
{ "name": "unused" }, // 4096
|
||||
{ "name": "unused" }, // 8192
|
||||
{ "name": "unused" }, // 16384
|
||||
{ "name": "unused" }, // 32768
|
||||
{
|
||||
"name": "playerclip",
|
||||
"description": "Player cannot pass through the brush (other things can)"
|
||||
}, // 65536
|
||||
{
|
||||
"name": "mosterclip",
|
||||
"description": "Monster cannot pass through the brush (player and other things can)"
|
||||
}, // 131072
|
||||
{
|
||||
"name": "current_0",
|
||||
"description": "Brush has a current in direction of 0 degrees"
|
||||
},
|
||||
{
|
||||
"name": "current_90",
|
||||
"description": "Brush has a current in direction of 90 degrees"
|
||||
},
|
||||
{
|
||||
"name": "current_180",
|
||||
"description": "Brush has a current in direction of 180 degrees"
|
||||
},
|
||||
{
|
||||
"name": "current_270",
|
||||
"description": "Brush has a current in direction of 270 degrees"
|
||||
},
|
||||
{
|
||||
"name": "current_up",
|
||||
"description": "Brush has a current in the up direction"
|
||||
},
|
||||
{
|
||||
"name": "current_dn",
|
||||
"description": "Brush has a current in the down direction"
|
||||
},
|
||||
{
|
||||
"name": "origin",
|
||||
"description": "Special brush used for specifying origin of rotation for rotating brushes"
|
||||
},
|
||||
{
|
||||
"name": "monster",
|
||||
"description": "Purpose unknown"
|
||||
},
|
||||
{
|
||||
"name": "corpse",
|
||||
"description": "Purpose unknown"
|
||||
},
|
||||
{
|
||||
"name": "detail",
|
||||
"description": "Detail brush"
|
||||
},
|
||||
{
|
||||
"name": "translucent",
|
||||
"description": "Use for opaque water that does not block vis"
|
||||
},
|
||||
{
|
||||
"name": "ladder",
|
||||
"description": "Brushes with this flag allow a player to move up and down a vertical surface"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
BIN
tb/games/Quake3/Icon.png
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
BIN
tb/games/Quake3/assets/textures/__TB_empty.png
Normal file
|
After Width: | Height: | Size: 758 B |
2465
tb/games/Quake3/entities.ent
Normal file
BIN
tb/icons/icon_128.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
tb/icons/icon_16.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
tb/icons/icon_192.png
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
tb/icons/icon_22.png
Normal file
|
After Width: | Height: | Size: 4.3 KiB |
BIN
tb/icons/icon_24.png
Normal file
|
After Width: | Height: | Size: 4.4 KiB |
BIN
tb/icons/icon_256.png
Normal file
|
After Width: | Height: | Size: 79 KiB |
BIN
tb/icons/icon_32.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
tb/icons/icon_36.png
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
tb/icons/icon_42.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
tb/icons/icon_48.png
Normal file
|
After Width: | Height: | Size: 7.4 KiB |
BIN
tb/icons/icon_512.png
Normal file
|
After Width: | Height: | Size: 220 KiB |
BIN
tb/icons/icon_64.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
tb/icons/icon_72.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
tb/icons/icon_8.png
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
BIN
tb/icons/icon_96.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
tb/icons/tb_icon_orig.png
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
tb/images/Add.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
tb/images/AppIcon.png
Normal file
|
After Width: | Height: | Size: 77 KiB |
BIN
tb/images/BrushTool.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
tb/images/ClipTool.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
tb/images/Console.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
tb/images/ConsolePressed.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
tb/images/DefaultGameIcon.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
tb/images/DocIcon.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
tb/images/Down.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
tb/images/DuplicateObjects.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
tb/images/EdgeTool.png
Normal file
|
After Width: | Height: | Size: 942 B |
BIN
tb/images/EditMods.png
Normal file
|
After Width: | Height: | Size: 206 B |
BIN
tb/images/FaceTool.png
Normal file
|
After Width: | Height: | Size: 1009 B |
BIN
tb/images/FlipHorizontally.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
tb/images/FlipTextureH.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
tb/images/FlipTextureV.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
tb/images/FlipVertically.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
tb/images/GeneralPreferences.png
Normal file
|
After Width: | Height: | Size: 927 B |
BIN
tb/images/Grid.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
tb/images/Hidden_off.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
tb/images/Hidden_on.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
tb/images/Invisible_White.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
tb/images/IssueBrowser.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
tb/images/IssueBrowserPressed.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
tb/images/KeyboardPreferences.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
tb/images/Lock_off.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
tb/images/Lock_on.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
tb/images/Locked_small.png
Normal file
|
After Width: | Height: | Size: 951 B |
BIN
tb/images/MousePreferences.png
Normal file
|
After Width: | Height: | Size: 744 B |
BIN
tb/images/NoTool.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
tb/images/Position.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
tb/images/Refresh.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
tb/images/Remove.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
tb/images/ResetTexture.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
tb/images/RotateTextureCCW.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
tb/images/RotateTextureCW.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
tb/images/RotateTool.png
Normal file
|
After Width: | Height: | Size: 633 B |
BIN
tb/images/ScaleTool.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
tb/images/Search.png
Normal file
|
After Width: | Height: | Size: 405 B |
BIN
tb/images/ShearTool.png
Normal file
|
After Width: | Height: | Size: 699 B |
BIN
tb/images/TextureLock_off.png
Normal file
|
After Width: | Height: | Size: 546 B |
BIN
tb/images/TextureLock_on.png
Normal file
|
After Width: | Height: | Size: 520 B |
BIN
tb/images/UVLock_off.png
Normal file
|
After Width: | Height: | Size: 632 B |
BIN
tb/images/UVLock_on.png
Normal file
|
After Width: | Height: | Size: 601 B |
BIN
tb/images/Up.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
tb/images/VertexTool.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
tb/images/ViewPreferences.png
Normal file
|
After Width: | Height: | Size: 1016 B |
BIN
tb/images/Visible_White.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
1263
tb/include/gmock/gmock-actions.h
Normal file
153
tb/include/gmock/gmock-cardinalities.h
Normal file
@@ -0,0 +1,153 @@
|
||||
// Copyright 2007, Google Inc.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following disclaimer
|
||||
// in the documentation and/or other materials provided with the
|
||||
// distribution.
|
||||
// * Neither the name of Google Inc. nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from
|
||||
// this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
|
||||
// Google Mock - a framework for writing C++ mock classes.
|
||||
//
|
||||
// This file implements some commonly used cardinalities. More
|
||||
// cardinalities can be defined by the user implementing the
|
||||
// CardinalityInterface interface if necessary.
|
||||
|
||||
// GOOGLETEST_CM0002 DO NOT DELETE
|
||||
|
||||
#ifndef GMOCK_INCLUDE_GMOCK_GMOCK_CARDINALITIES_H_
|
||||
#define GMOCK_INCLUDE_GMOCK_GMOCK_CARDINALITIES_H_
|
||||
|
||||
#include <limits.h>
|
||||
#include <ostream> // NOLINT
|
||||
#include "gmock/internal/gmock-port.h"
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
GTEST_DISABLE_MSC_WARNINGS_PUSH_(4251 \
|
||||
/* class A needs to have dll-interface to be used by clients of class B */)
|
||||
|
||||
namespace testing {
|
||||
|
||||
// To implement a cardinality Foo, define:
|
||||
// 1. a class FooCardinality that implements the
|
||||
// CardinalityInterface interface, and
|
||||
// 2. a factory function that creates a Cardinality object from a
|
||||
// const FooCardinality*.
|
||||
//
|
||||
// The two-level delegation design follows that of Matcher, providing
|
||||
// consistency for extension developers. It also eases ownership
|
||||
// management as Cardinality objects can now be copied like plain values.
|
||||
|
||||
// The implementation of a cardinality.
|
||||
class CardinalityInterface {
|
||||
public:
|
||||
virtual ~CardinalityInterface() {}
|
||||
|
||||
// Conservative estimate on the lower/upper bound of the number of
|
||||
// calls allowed.
|
||||
virtual int ConservativeLowerBound() const { return 0; }
|
||||
virtual int ConservativeUpperBound() const { return INT_MAX; }
|
||||
|
||||
// Returns true iff call_count calls will satisfy this cardinality.
|
||||
virtual bool IsSatisfiedByCallCount(int call_count) const = 0;
|
||||
|
||||
// Returns true iff call_count calls will saturate this cardinality.
|
||||
virtual bool IsSaturatedByCallCount(int call_count) const = 0;
|
||||
|
||||
// Describes self to an ostream.
|
||||
virtual void DescribeTo(::std::ostream* os) const = 0;
|
||||
};
|
||||
|
||||
// A Cardinality is a copyable and IMMUTABLE (except by assignment)
|
||||
// object that specifies how many times a mock function is expected to
|
||||
// be called. The implementation of Cardinality is just a linked_ptr
|
||||
// to const CardinalityInterface, so copying is fairly cheap.
|
||||
// Don't inherit from Cardinality!
|
||||
class GTEST_API_ Cardinality {
|
||||
public:
|
||||
// Constructs a null cardinality. Needed for storing Cardinality
|
||||
// objects in STL containers.
|
||||
Cardinality() {}
|
||||
|
||||
// Constructs a Cardinality from its implementation.
|
||||
explicit Cardinality(const CardinalityInterface* impl) : impl_(impl) {}
|
||||
|
||||
// Conservative estimate on the lower/upper bound of the number of
|
||||
// calls allowed.
|
||||
int ConservativeLowerBound() const { return impl_->ConservativeLowerBound(); }
|
||||
int ConservativeUpperBound() const { return impl_->ConservativeUpperBound(); }
|
||||
|
||||
// Returns true iff call_count calls will satisfy this cardinality.
|
||||
bool IsSatisfiedByCallCount(int call_count) const {
|
||||
return impl_->IsSatisfiedByCallCount(call_count);
|
||||
}
|
||||
|
||||
// Returns true iff call_count calls will saturate this cardinality.
|
||||
bool IsSaturatedByCallCount(int call_count) const {
|
||||
return impl_->IsSaturatedByCallCount(call_count);
|
||||
}
|
||||
|
||||
// Returns true iff call_count calls will over-saturate this
|
||||
// cardinality, i.e. exceed the maximum number of allowed calls.
|
||||
bool IsOverSaturatedByCallCount(int call_count) const {
|
||||
return impl_->IsSaturatedByCallCount(call_count) &&
|
||||
!impl_->IsSatisfiedByCallCount(call_count);
|
||||
}
|
||||
|
||||
// Describes self to an ostream
|
||||
void DescribeTo(::std::ostream* os) const { impl_->DescribeTo(os); }
|
||||
|
||||
// Describes the given actual call count to an ostream.
|
||||
static void DescribeActualCallCountTo(int actual_call_count,
|
||||
::std::ostream* os);
|
||||
|
||||
private:
|
||||
internal::linked_ptr<const CardinalityInterface> impl_;
|
||||
};
|
||||
|
||||
// Creates a cardinality that allows at least n calls.
|
||||
GTEST_API_ Cardinality AtLeast(int n);
|
||||
|
||||
// Creates a cardinality that allows at most n calls.
|
||||
GTEST_API_ Cardinality AtMost(int n);
|
||||
|
||||
// Creates a cardinality that allows any number of calls.
|
||||
GTEST_API_ Cardinality AnyNumber();
|
||||
|
||||
// Creates a cardinality that allows between min and max calls.
|
||||
GTEST_API_ Cardinality Between(int min, int max);
|
||||
|
||||
// Creates a cardinality that allows exactly n calls.
|
||||
GTEST_API_ Cardinality Exactly(int n);
|
||||
|
||||
// Creates a cardinality from its implementation.
|
||||
inline Cardinality MakeCardinality(const CardinalityInterface* c) {
|
||||
return Cardinality(c);
|
||||
}
|
||||
|
||||
} // namespace testing
|
||||
|
||||
GTEST_DISABLE_MSC_WARNINGS_POP_() // 4251
|
||||
|
||||
#endif // GMOCK_INCLUDE_GMOCK_GMOCK_CARDINALITIES_H_
|
||||
2567
tb/include/gmock/gmock-generated-actions.h
Normal file
833
tb/include/gmock/gmock-generated-actions.h.pump
Normal file
@@ -0,0 +1,833 @@
|
||||
$$ -*- mode: c++; -*-
|
||||
$$ This is a Pump source file. Please use Pump to convert it to
|
||||
$$ gmock-generated-actions.h.
|
||||
$$
|
||||
$var n = 10 $$ The maximum arity we support.
|
||||
$$}} This meta comment fixes auto-indentation in editors.
|
||||
// Copyright 2007, Google Inc.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following disclaimer
|
||||
// in the documentation and/or other materials provided with the
|
||||
// distribution.
|
||||
// * Neither the name of Google Inc. nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from
|
||||
// this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
|
||||
// Google Mock - a framework for writing C++ mock classes.
|
||||
//
|
||||
// This file implements some commonly used variadic actions.
|
||||
|
||||
// GOOGLETEST_CM0002 DO NOT DELETE
|
||||
|
||||
#ifndef GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_ACTIONS_H_
|
||||
#define GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_ACTIONS_H_
|
||||
|
||||
#include "gmock/gmock-actions.h"
|
||||
#include "gmock/internal/gmock-port.h"
|
||||
|
||||
namespace testing {
|
||||
namespace internal {
|
||||
|
||||
// InvokeHelper<F> knows how to unpack an N-tuple and invoke an N-ary
|
||||
// function, method, or callback with the unpacked values, where F is
|
||||
// a function type that takes N arguments.
|
||||
template <typename Result, typename ArgumentTuple>
|
||||
class InvokeHelper;
|
||||
|
||||
|
||||
$var max_callback_arity = 5
|
||||
$range i 0..n
|
||||
$for i [[
|
||||
$range j 1..i
|
||||
$var types = [[$for j [[, typename A$j]]]]
|
||||
$var as = [[$for j, [[A$j]]]]
|
||||
$var args = [[$if i==0 [[]] $else [[ args]]]]
|
||||
$var gets = [[$for j, [[get<$(j - 1)>(args)]]]]
|
||||
template <typename R$types>
|
||||
class InvokeHelper<R, ::testing::tuple<$as> > {
|
||||
public:
|
||||
template <typename Function>
|
||||
static R Invoke(Function function, const ::testing::tuple<$as>&$args) {
|
||||
return function($gets);
|
||||
}
|
||||
|
||||
template <class Class, typename MethodPtr>
|
||||
static R InvokeMethod(Class* obj_ptr,
|
||||
MethodPtr method_ptr,
|
||||
const ::testing::tuple<$as>&$args) {
|
||||
return (obj_ptr->*method_ptr)($gets);
|
||||
}
|
||||
|
||||
|
||||
$if i <= max_callback_arity [[
|
||||
template <typename CallbackType>
|
||||
static R InvokeCallback(CallbackType* callback,
|
||||
const ::testing::tuple<$as>&$args) {
|
||||
return callback->Run($gets);
|
||||
}
|
||||
]] $else [[
|
||||
// There is no InvokeCallback() for $i-tuples
|
||||
]]
|
||||
|
||||
};
|
||||
|
||||
|
||||
]]
|
||||
// Implements the Invoke(callback) action.
|
||||
template <typename CallbackType>
|
||||
class InvokeCallbackAction {
|
||||
public:
|
||||
// The c'tor takes ownership of the callback.
|
||||
explicit InvokeCallbackAction(CallbackType* callback)
|
||||
: callback_(callback) {
|
||||
callback->CheckIsRepeatable(); // Makes sure the callback is permanent.
|
||||
}
|
||||
|
||||
// This type conversion operator template allows Invoke(callback) to
|
||||
// be used wherever the callback's type is compatible with that of
|
||||
// the mock function, i.e. if the mock function's arguments can be
|
||||
// implicitly converted to the callback's arguments and the
|
||||
// callback's result can be implicitly converted to the mock
|
||||
// function's result.
|
||||
template <typename Result, typename ArgumentTuple>
|
||||
Result Perform(const ArgumentTuple& args) const {
|
||||
return InvokeHelper<Result, ArgumentTuple>::InvokeCallback(
|
||||
callback_.get(), args);
|
||||
}
|
||||
private:
|
||||
const linked_ptr<CallbackType> callback_;
|
||||
};
|
||||
|
||||
// An INTERNAL macro for extracting the type of a tuple field. It's
|
||||
// subject to change without notice - DO NOT USE IN USER CODE!
|
||||
#define GMOCK_FIELD_(Tuple, N) \
|
||||
typename ::testing::tuple_element<N, Tuple>::type
|
||||
|
||||
$range i 1..n
|
||||
|
||||
// SelectArgs<Result, ArgumentTuple, k1, k2, ..., k_n>::type is the
|
||||
// type of an n-ary function whose i-th (1-based) argument type is the
|
||||
// k{i}-th (0-based) field of ArgumentTuple, which must be a tuple
|
||||
// type, and whose return type is Result. For example,
|
||||
// SelectArgs<int, ::testing::tuple<bool, char, double, long>, 0, 3>::type
|
||||
// is int(bool, long).
|
||||
//
|
||||
// SelectArgs<Result, ArgumentTuple, k1, k2, ..., k_n>::Select(args)
|
||||
// returns the selected fields (k1, k2, ..., k_n) of args as a tuple.
|
||||
// For example,
|
||||
// SelectArgs<int, tuple<bool, char, double>, 2, 0>::Select(
|
||||
// ::testing::make_tuple(true, 'a', 2.5))
|
||||
// returns tuple (2.5, true).
|
||||
//
|
||||
// The numbers in list k1, k2, ..., k_n must be >= 0, where n can be
|
||||
// in the range [0, $n]. Duplicates are allowed and they don't have
|
||||
// to be in an ascending or descending order.
|
||||
|
||||
template <typename Result, typename ArgumentTuple, $for i, [[int k$i]]>
|
||||
class SelectArgs {
|
||||
public:
|
||||
typedef Result type($for i, [[GMOCK_FIELD_(ArgumentTuple, k$i)]]);
|
||||
typedef typename Function<type>::ArgumentTuple SelectedArgs;
|
||||
static SelectedArgs Select(const ArgumentTuple& args) {
|
||||
return SelectedArgs($for i, [[get<k$i>(args)]]);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
$for i [[
|
||||
$range j 1..n
|
||||
$range j1 1..i-1
|
||||
template <typename Result, typename ArgumentTuple$for j1[[, int k$j1]]>
|
||||
class SelectArgs<Result, ArgumentTuple,
|
||||
$for j, [[$if j <= i-1 [[k$j]] $else [[-1]]]]> {
|
||||
public:
|
||||
typedef Result type($for j1, [[GMOCK_FIELD_(ArgumentTuple, k$j1)]]);
|
||||
typedef typename Function<type>::ArgumentTuple SelectedArgs;
|
||||
static SelectedArgs Select(const ArgumentTuple& [[]]
|
||||
$if i == 1 [[/* args */]] $else [[args]]) {
|
||||
return SelectedArgs($for j1, [[get<k$j1>(args)]]);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
]]
|
||||
#undef GMOCK_FIELD_
|
||||
|
||||
$var ks = [[$for i, [[k$i]]]]
|
||||
|
||||
// Implements the WithArgs action.
|
||||
template <typename InnerAction, $for i, [[int k$i = -1]]>
|
||||
class WithArgsAction {
|
||||
public:
|
||||
explicit WithArgsAction(const InnerAction& action) : action_(action) {}
|
||||
|
||||
template <typename F>
|
||||
operator Action<F>() const { return MakeAction(new Impl<F>(action_)); }
|
||||
|
||||
private:
|
||||
template <typename F>
|
||||
class Impl : public ActionInterface<F> {
|
||||
public:
|
||||
typedef typename Function<F>::Result Result;
|
||||
typedef typename Function<F>::ArgumentTuple ArgumentTuple;
|
||||
|
||||
explicit Impl(const InnerAction& action) : action_(action) {}
|
||||
|
||||
virtual Result Perform(const ArgumentTuple& args) {
|
||||
return action_.Perform(SelectArgs<Result, ArgumentTuple, $ks>::Select(args));
|
||||
}
|
||||
|
||||
private:
|
||||
typedef typename SelectArgs<Result, ArgumentTuple,
|
||||
$ks>::type InnerFunctionType;
|
||||
|
||||
Action<InnerFunctionType> action_;
|
||||
};
|
||||
|
||||
const InnerAction action_;
|
||||
|
||||
GTEST_DISALLOW_ASSIGN_(WithArgsAction);
|
||||
};
|
||||
|
||||
// A macro from the ACTION* family (defined later in this file)
|
||||
// defines an action that can be used in a mock function. Typically,
|
||||
// these actions only care about a subset of the arguments of the mock
|
||||
// function. For example, if such an action only uses the second
|
||||
// argument, it can be used in any mock function that takes >= 2
|
||||
// arguments where the type of the second argument is compatible.
|
||||
//
|
||||
// Therefore, the action implementation must be prepared to take more
|
||||
// arguments than it needs. The ExcessiveArg type is used to
|
||||
// represent those excessive arguments. In order to keep the compiler
|
||||
// error messages tractable, we define it in the testing namespace
|
||||
// instead of testing::internal. However, this is an INTERNAL TYPE
|
||||
// and subject to change without notice, so a user MUST NOT USE THIS
|
||||
// TYPE DIRECTLY.
|
||||
struct ExcessiveArg {};
|
||||
|
||||
// A helper class needed for implementing the ACTION* macros.
|
||||
template <typename Result, class Impl>
|
||||
class ActionHelper {
|
||||
public:
|
||||
$range i 0..n
|
||||
$for i
|
||||
|
||||
[[
|
||||
$var template = [[$if i==0 [[]] $else [[
|
||||
$range j 0..i-1
|
||||
template <$for j, [[typename A$j]]>
|
||||
]]]]
|
||||
$range j 0..i-1
|
||||
$var As = [[$for j, [[A$j]]]]
|
||||
$var as = [[$for j, [[get<$j>(args)]]]]
|
||||
$range k 1..n-i
|
||||
$var eas = [[$for k, [[ExcessiveArg()]]]]
|
||||
$var arg_list = [[$if (i==0) | (i==n) [[$as$eas]] $else [[$as, $eas]]]]
|
||||
$template
|
||||
static Result Perform(Impl* impl, const ::testing::tuple<$As>& args) {
|
||||
return impl->template gmock_PerformImpl<$As>(args, $arg_list);
|
||||
}
|
||||
|
||||
]]
|
||||
};
|
||||
|
||||
} // namespace internal
|
||||
|
||||
// Various overloads for Invoke().
|
||||
|
||||
// WithArgs<N1, N2, ..., Nk>(an_action) creates an action that passes
|
||||
// the selected arguments of the mock function to an_action and
|
||||
// performs it. It serves as an adaptor between actions with
|
||||
// different argument lists. C++ doesn't support default arguments for
|
||||
// function templates, so we have to overload it.
|
||||
|
||||
$range i 1..n
|
||||
$for i [[
|
||||
$range j 1..i
|
||||
template <$for j [[int k$j, ]]typename InnerAction>
|
||||
inline internal::WithArgsAction<InnerAction$for j [[, k$j]]>
|
||||
WithArgs(const InnerAction& action) {
|
||||
return internal::WithArgsAction<InnerAction$for j [[, k$j]]>(action);
|
||||
}
|
||||
|
||||
|
||||
]]
|
||||
// Creates an action that does actions a1, a2, ..., sequentially in
|
||||
// each invocation.
|
||||
$range i 2..n
|
||||
$for i [[
|
||||
$range j 2..i
|
||||
$var types = [[$for j, [[typename Action$j]]]]
|
||||
$var Aas = [[$for j [[, Action$j a$j]]]]
|
||||
|
||||
template <typename Action1, $types>
|
||||
$range k 1..i-1
|
||||
|
||||
inline $for k [[internal::DoBothAction<Action$k, ]]Action$i$for k [[>]]
|
||||
|
||||
DoAll(Action1 a1$Aas) {
|
||||
$if i==2 [[
|
||||
|
||||
return internal::DoBothAction<Action1, Action2>(a1, a2);
|
||||
]] $else [[
|
||||
$range j2 2..i
|
||||
|
||||
return DoAll(a1, DoAll($for j2, [[a$j2]]));
|
||||
]]
|
||||
|
||||
}
|
||||
|
||||
]]
|
||||
|
||||
} // namespace testing
|
||||
|
||||
// The ACTION* family of macros can be used in a namespace scope to
|
||||
// define custom actions easily. The syntax:
|
||||
//
|
||||
// ACTION(name) { statements; }
|
||||
//
|
||||
// will define an action with the given name that executes the
|
||||
// statements. The value returned by the statements will be used as
|
||||
// the return value of the action. Inside the statements, you can
|
||||
// refer to the K-th (0-based) argument of the mock function by
|
||||
// 'argK', and refer to its type by 'argK_type'. For example:
|
||||
//
|
||||
// ACTION(IncrementArg1) {
|
||||
// arg1_type temp = arg1;
|
||||
// return ++(*temp);
|
||||
// }
|
||||
//
|
||||
// allows you to write
|
||||
//
|
||||
// ...WillOnce(IncrementArg1());
|
||||
//
|
||||
// You can also refer to the entire argument tuple and its type by
|
||||
// 'args' and 'args_type', and refer to the mock function type and its
|
||||
// return type by 'function_type' and 'return_type'.
|
||||
//
|
||||
// Note that you don't need to specify the types of the mock function
|
||||
// arguments. However rest assured that your code is still type-safe:
|
||||
// you'll get a compiler error if *arg1 doesn't support the ++
|
||||
// operator, or if the type of ++(*arg1) isn't compatible with the
|
||||
// mock function's return type, for example.
|
||||
//
|
||||
// Sometimes you'll want to parameterize the action. For that you can use
|
||||
// another macro:
|
||||
//
|
||||
// ACTION_P(name, param_name) { statements; }
|
||||
//
|
||||
// For example:
|
||||
//
|
||||
// ACTION_P(Add, n) { return arg0 + n; }
|
||||
//
|
||||
// will allow you to write:
|
||||
//
|
||||
// ...WillOnce(Add(5));
|
||||
//
|
||||
// Note that you don't need to provide the type of the parameter
|
||||
// either. If you need to reference the type of a parameter named
|
||||
// 'foo', you can write 'foo_type'. For example, in the body of
|
||||
// ACTION_P(Add, n) above, you can write 'n_type' to refer to the type
|
||||
// of 'n'.
|
||||
//
|
||||
// We also provide ACTION_P2, ACTION_P3, ..., up to ACTION_P$n to support
|
||||
// multi-parameter actions.
|
||||
//
|
||||
// For the purpose of typing, you can view
|
||||
//
|
||||
// ACTION_Pk(Foo, p1, ..., pk) { ... }
|
||||
//
|
||||
// as shorthand for
|
||||
//
|
||||
// template <typename p1_type, ..., typename pk_type>
|
||||
// FooActionPk<p1_type, ..., pk_type> Foo(p1_type p1, ..., pk_type pk) { ... }
|
||||
//
|
||||
// In particular, you can provide the template type arguments
|
||||
// explicitly when invoking Foo(), as in Foo<long, bool>(5, false);
|
||||
// although usually you can rely on the compiler to infer the types
|
||||
// for you automatically. You can assign the result of expression
|
||||
// Foo(p1, ..., pk) to a variable of type FooActionPk<p1_type, ...,
|
||||
// pk_type>. This can be useful when composing actions.
|
||||
//
|
||||
// You can also overload actions with different numbers of parameters:
|
||||
//
|
||||
// ACTION_P(Plus, a) { ... }
|
||||
// ACTION_P2(Plus, a, b) { ... }
|
||||
//
|
||||
// While it's tempting to always use the ACTION* macros when defining
|
||||
// a new action, you should also consider implementing ActionInterface
|
||||
// or using MakePolymorphicAction() instead, especially if you need to
|
||||
// use the action a lot. While these approaches require more work,
|
||||
// they give you more control on the types of the mock function
|
||||
// arguments and the action parameters, which in general leads to
|
||||
// better compiler error messages that pay off in the long run. They
|
||||
// also allow overloading actions based on parameter types (as opposed
|
||||
// to just based on the number of parameters).
|
||||
//
|
||||
// CAVEAT:
|
||||
//
|
||||
// ACTION*() can only be used in a namespace scope. The reason is
|
||||
// that C++ doesn't yet allow function-local types to be used to
|
||||
// instantiate templates. The up-coming C++0x standard will fix this.
|
||||
// Once that's done, we'll consider supporting using ACTION*() inside
|
||||
// a function.
|
||||
//
|
||||
// MORE INFORMATION:
|
||||
//
|
||||
// To learn more about using these macros, please search for 'ACTION'
|
||||
// on https://github.com/google/googletest/blob/master/googlemock/docs/CookBook.md
|
||||
|
||||
$range i 0..n
|
||||
$range k 0..n-1
|
||||
|
||||
// An internal macro needed for implementing ACTION*().
|
||||
#define GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_\
|
||||
const args_type& args GTEST_ATTRIBUTE_UNUSED_
|
||||
$for k [[, \
|
||||
arg$k[[]]_type arg$k GTEST_ATTRIBUTE_UNUSED_]]
|
||||
|
||||
|
||||
// Sometimes you want to give an action explicit template parameters
|
||||
// that cannot be inferred from its value parameters. ACTION() and
|
||||
// ACTION_P*() don't support that. ACTION_TEMPLATE() remedies that
|
||||
// and can be viewed as an extension to ACTION() and ACTION_P*().
|
||||
//
|
||||
// The syntax:
|
||||
//
|
||||
// ACTION_TEMPLATE(ActionName,
|
||||
// HAS_m_TEMPLATE_PARAMS(kind1, name1, ..., kind_m, name_m),
|
||||
// AND_n_VALUE_PARAMS(p1, ..., p_n)) { statements; }
|
||||
//
|
||||
// defines an action template that takes m explicit template
|
||||
// parameters and n value parameters. name_i is the name of the i-th
|
||||
// template parameter, and kind_i specifies whether it's a typename,
|
||||
// an integral constant, or a template. p_i is the name of the i-th
|
||||
// value parameter.
|
||||
//
|
||||
// Example:
|
||||
//
|
||||
// // DuplicateArg<k, T>(output) converts the k-th argument of the mock
|
||||
// // function to type T and copies it to *output.
|
||||
// ACTION_TEMPLATE(DuplicateArg,
|
||||
// HAS_2_TEMPLATE_PARAMS(int, k, typename, T),
|
||||
// AND_1_VALUE_PARAMS(output)) {
|
||||
// *output = T(::testing::get<k>(args));
|
||||
// }
|
||||
// ...
|
||||
// int n;
|
||||
// EXPECT_CALL(mock, Foo(_, _))
|
||||
// .WillOnce(DuplicateArg<1, unsigned char>(&n));
|
||||
//
|
||||
// To create an instance of an action template, write:
|
||||
//
|
||||
// ActionName<t1, ..., t_m>(v1, ..., v_n)
|
||||
//
|
||||
// where the ts are the template arguments and the vs are the value
|
||||
// arguments. The value argument types are inferred by the compiler.
|
||||
// If you want to explicitly specify the value argument types, you can
|
||||
// provide additional template arguments:
|
||||
//
|
||||
// ActionName<t1, ..., t_m, u1, ..., u_k>(v1, ..., v_n)
|
||||
//
|
||||
// where u_i is the desired type of v_i.
|
||||
//
|
||||
// ACTION_TEMPLATE and ACTION/ACTION_P* can be overloaded on the
|
||||
// number of value parameters, but not on the number of template
|
||||
// parameters. Without the restriction, the meaning of the following
|
||||
// is unclear:
|
||||
//
|
||||
// OverloadedAction<int, bool>(x);
|
||||
//
|
||||
// Are we using a single-template-parameter action where 'bool' refers
|
||||
// to the type of x, or are we using a two-template-parameter action
|
||||
// where the compiler is asked to infer the type of x?
|
||||
//
|
||||
// Implementation notes:
|
||||
//
|
||||
// GMOCK_INTERNAL_*_HAS_m_TEMPLATE_PARAMS and
|
||||
// GMOCK_INTERNAL_*_AND_n_VALUE_PARAMS are internal macros for
|
||||
// implementing ACTION_TEMPLATE. The main trick we use is to create
|
||||
// new macro invocations when expanding a macro. For example, we have
|
||||
//
|
||||
// #define ACTION_TEMPLATE(name, template_params, value_params)
|
||||
// ... GMOCK_INTERNAL_DECL_##template_params ...
|
||||
//
|
||||
// which causes ACTION_TEMPLATE(..., HAS_1_TEMPLATE_PARAMS(typename, T), ...)
|
||||
// to expand to
|
||||
//
|
||||
// ... GMOCK_INTERNAL_DECL_HAS_1_TEMPLATE_PARAMS(typename, T) ...
|
||||
//
|
||||
// Since GMOCK_INTERNAL_DECL_HAS_1_TEMPLATE_PARAMS is a macro, the
|
||||
// preprocessor will continue to expand it to
|
||||
//
|
||||
// ... typename T ...
|
||||
//
|
||||
// This technique conforms to the C++ standard and is portable. It
|
||||
// allows us to implement action templates using O(N) code, where N is
|
||||
// the maximum number of template/value parameters supported. Without
|
||||
// using it, we'd have to devote O(N^2) amount of code to implement all
|
||||
// combinations of m and n.
|
||||
|
||||
// Declares the template parameters.
|
||||
|
||||
$range j 1..n
|
||||
$for j [[
|
||||
$range m 0..j-1
|
||||
#define GMOCK_INTERNAL_DECL_HAS_$j[[]]
|
||||
_TEMPLATE_PARAMS($for m, [[kind$m, name$m]]) $for m, [[kind$m name$m]]
|
||||
|
||||
|
||||
]]
|
||||
|
||||
// Lists the template parameters.
|
||||
|
||||
$for j [[
|
||||
$range m 0..j-1
|
||||
#define GMOCK_INTERNAL_LIST_HAS_$j[[]]
|
||||
_TEMPLATE_PARAMS($for m, [[kind$m, name$m]]) $for m, [[name$m]]
|
||||
|
||||
|
||||
]]
|
||||
|
||||
// Declares the types of value parameters.
|
||||
|
||||
$for i [[
|
||||
$range j 0..i-1
|
||||
#define GMOCK_INTERNAL_DECL_TYPE_AND_$i[[]]
|
||||
_VALUE_PARAMS($for j, [[p$j]]) $for j [[, typename p$j##_type]]
|
||||
|
||||
|
||||
]]
|
||||
|
||||
// Initializes the value parameters.
|
||||
|
||||
$for i [[
|
||||
$range j 0..i-1
|
||||
#define GMOCK_INTERNAL_INIT_AND_$i[[]]_VALUE_PARAMS($for j, [[p$j]])\
|
||||
($for j, [[p$j##_type gmock_p$j]])$if i>0 [[ : ]]$for j, [[p$j(::testing::internal::move(gmock_p$j))]]
|
||||
|
||||
|
||||
]]
|
||||
|
||||
// Declares the fields for storing the value parameters.
|
||||
|
||||
$for i [[
|
||||
$range j 0..i-1
|
||||
#define GMOCK_INTERNAL_DEFN_AND_$i[[]]
|
||||
_VALUE_PARAMS($for j, [[p$j]]) $for j [[p$j##_type p$j; ]]
|
||||
|
||||
|
||||
]]
|
||||
|
||||
// Lists the value parameters.
|
||||
|
||||
$for i [[
|
||||
$range j 0..i-1
|
||||
#define GMOCK_INTERNAL_LIST_AND_$i[[]]
|
||||
_VALUE_PARAMS($for j, [[p$j]]) $for j, [[p$j]]
|
||||
|
||||
|
||||
]]
|
||||
|
||||
// Lists the value parameter types.
|
||||
|
||||
$for i [[
|
||||
$range j 0..i-1
|
||||
#define GMOCK_INTERNAL_LIST_TYPE_AND_$i[[]]
|
||||
_VALUE_PARAMS($for j, [[p$j]]) $for j [[, p$j##_type]]
|
||||
|
||||
|
||||
]]
|
||||
|
||||
// Declares the value parameters.
|
||||
|
||||
$for i [[
|
||||
$range j 0..i-1
|
||||
#define GMOCK_INTERNAL_DECL_AND_$i[[]]_VALUE_PARAMS($for j, [[p$j]]) [[]]
|
||||
$for j, [[p$j##_type p$j]]
|
||||
|
||||
|
||||
]]
|
||||
|
||||
// The suffix of the class template implementing the action template.
|
||||
$for i [[
|
||||
|
||||
|
||||
$range j 0..i-1
|
||||
#define GMOCK_INTERNAL_COUNT_AND_$i[[]]_VALUE_PARAMS($for j, [[p$j]]) [[]]
|
||||
$if i==1 [[P]] $elif i>=2 [[P$i]]
|
||||
]]
|
||||
|
||||
|
||||
// The name of the class template implementing the action template.
|
||||
#define GMOCK_ACTION_CLASS_(name, value_params)\
|
||||
GTEST_CONCAT_TOKEN_(name##Action, GMOCK_INTERNAL_COUNT_##value_params)
|
||||
|
||||
$range k 0..n-1
|
||||
|
||||
#define ACTION_TEMPLATE(name, template_params, value_params)\
|
||||
template <GMOCK_INTERNAL_DECL_##template_params\
|
||||
GMOCK_INTERNAL_DECL_TYPE_##value_params>\
|
||||
class GMOCK_ACTION_CLASS_(name, value_params) {\
|
||||
public:\
|
||||
explicit GMOCK_ACTION_CLASS_(name, value_params)\
|
||||
GMOCK_INTERNAL_INIT_##value_params {}\
|
||||
template <typename F>\
|
||||
class gmock_Impl : public ::testing::ActionInterface<F> {\
|
||||
public:\
|
||||
typedef F function_type;\
|
||||
typedef typename ::testing::internal::Function<F>::Result return_type;\
|
||||
typedef typename ::testing::internal::Function<F>::ArgumentTuple\
|
||||
args_type;\
|
||||
explicit gmock_Impl GMOCK_INTERNAL_INIT_##value_params {}\
|
||||
virtual return_type Perform(const args_type& args) {\
|
||||
return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
|
||||
Perform(this, args);\
|
||||
}\
|
||||
template <$for k, [[typename arg$k[[]]_type]]>\
|
||||
return_type gmock_PerformImpl(const args_type& args[[]]
|
||||
$for k [[, arg$k[[]]_type arg$k]]) const;\
|
||||
GMOCK_INTERNAL_DEFN_##value_params\
|
||||
private:\
|
||||
GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
|
||||
};\
|
||||
template <typename F> operator ::testing::Action<F>() const {\
|
||||
return ::testing::Action<F>(\
|
||||
new gmock_Impl<F>(GMOCK_INTERNAL_LIST_##value_params));\
|
||||
}\
|
||||
GMOCK_INTERNAL_DEFN_##value_params\
|
||||
private:\
|
||||
GTEST_DISALLOW_ASSIGN_(GMOCK_ACTION_CLASS_(name, value_params));\
|
||||
};\
|
||||
template <GMOCK_INTERNAL_DECL_##template_params\
|
||||
GMOCK_INTERNAL_DECL_TYPE_##value_params>\
|
||||
inline GMOCK_ACTION_CLASS_(name, value_params)<\
|
||||
GMOCK_INTERNAL_LIST_##template_params\
|
||||
GMOCK_INTERNAL_LIST_TYPE_##value_params> name(\
|
||||
GMOCK_INTERNAL_DECL_##value_params) {\
|
||||
return GMOCK_ACTION_CLASS_(name, value_params)<\
|
||||
GMOCK_INTERNAL_LIST_##template_params\
|
||||
GMOCK_INTERNAL_LIST_TYPE_##value_params>(\
|
||||
GMOCK_INTERNAL_LIST_##value_params);\
|
||||
}\
|
||||
template <GMOCK_INTERNAL_DECL_##template_params\
|
||||
GMOCK_INTERNAL_DECL_TYPE_##value_params>\
|
||||
template <typename F>\
|
||||
template <typename arg0_type, typename arg1_type, typename arg2_type, \
|
||||
typename arg3_type, typename arg4_type, typename arg5_type, \
|
||||
typename arg6_type, typename arg7_type, typename arg8_type, \
|
||||
typename arg9_type>\
|
||||
typename ::testing::internal::Function<F>::Result\
|
||||
GMOCK_ACTION_CLASS_(name, value_params)<\
|
||||
GMOCK_INTERNAL_LIST_##template_params\
|
||||
GMOCK_INTERNAL_LIST_TYPE_##value_params>::gmock_Impl<F>::\
|
||||
gmock_PerformImpl(\
|
||||
GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
|
||||
|
||||
$for i
|
||||
|
||||
[[
|
||||
$var template = [[$if i==0 [[]] $else [[
|
||||
$range j 0..i-1
|
||||
|
||||
template <$for j, [[typename p$j##_type]]>\
|
||||
]]]]
|
||||
$var class_name = [[name##Action[[$if i==0 [[]] $elif i==1 [[P]]
|
||||
$else [[P$i]]]]]]
|
||||
$range j 0..i-1
|
||||
$var ctor_param_list = [[$for j, [[p$j##_type gmock_p$j]]]]
|
||||
$var param_types_and_names = [[$for j, [[p$j##_type p$j]]]]
|
||||
$var inits = [[$if i==0 [[]] $else [[ : $for j, [[p$j(::testing::internal::forward<p$j##_type>(gmock_p$j))]]]]]]
|
||||
$var param_field_decls = [[$for j
|
||||
[[
|
||||
|
||||
p$j##_type p$j;\
|
||||
]]]]
|
||||
$var param_field_decls2 = [[$for j
|
||||
[[
|
||||
|
||||
p$j##_type p$j;\
|
||||
]]]]
|
||||
$var params = [[$for j, [[p$j]]]]
|
||||
$var param_types = [[$if i==0 [[]] $else [[<$for j, [[p$j##_type]]>]]]]
|
||||
$var typename_arg_types = [[$for k, [[typename arg$k[[]]_type]]]]
|
||||
$var arg_types_and_names = [[$for k, [[arg$k[[]]_type arg$k]]]]
|
||||
$var macro_name = [[$if i==0 [[ACTION]] $elif i==1 [[ACTION_P]]
|
||||
$else [[ACTION_P$i]]]]
|
||||
|
||||
#define $macro_name(name$for j [[, p$j]])\$template
|
||||
class $class_name {\
|
||||
public:\
|
||||
[[$if i==1 [[explicit ]]]]$class_name($ctor_param_list)$inits {}\
|
||||
template <typename F>\
|
||||
class gmock_Impl : public ::testing::ActionInterface<F> {\
|
||||
public:\
|
||||
typedef F function_type;\
|
||||
typedef typename ::testing::internal::Function<F>::Result return_type;\
|
||||
typedef typename ::testing::internal::Function<F>::ArgumentTuple\
|
||||
args_type;\
|
||||
[[$if i==1 [[explicit ]]]]gmock_Impl($ctor_param_list)$inits {}\
|
||||
virtual return_type Perform(const args_type& args) {\
|
||||
return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
|
||||
Perform(this, args);\
|
||||
}\
|
||||
template <$typename_arg_types>\
|
||||
return_type gmock_PerformImpl(const args_type& args, [[]]
|
||||
$arg_types_and_names) const;\$param_field_decls
|
||||
private:\
|
||||
GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
|
||||
};\
|
||||
template <typename F> operator ::testing::Action<F>() const {\
|
||||
return ::testing::Action<F>(new gmock_Impl<F>($params));\
|
||||
}\$param_field_decls2
|
||||
private:\
|
||||
GTEST_DISALLOW_ASSIGN_($class_name);\
|
||||
};\$template
|
||||
inline $class_name$param_types name($param_types_and_names) {\
|
||||
return $class_name$param_types($params);\
|
||||
}\$template
|
||||
template <typename F>\
|
||||
template <$typename_arg_types>\
|
||||
typename ::testing::internal::Function<F>::Result\
|
||||
$class_name$param_types::gmock_Impl<F>::gmock_PerformImpl(\
|
||||
GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
|
||||
]]
|
||||
$$ } // This meta comment fixes auto-indentation in Emacs. It won't
|
||||
$$ // show up in the generated code.
|
||||
|
||||
|
||||
namespace testing {
|
||||
|
||||
|
||||
// The ACTION*() macros trigger warning C4100 (unreferenced formal
|
||||
// parameter) in MSVC with -W4. Unfortunately they cannot be fixed in
|
||||
// the macro definition, as the warnings are generated when the macro
|
||||
// is expanded and macro expansion cannot contain #pragma. Therefore
|
||||
// we suppress them here.
|
||||
#ifdef _MSC_VER
|
||||
# pragma warning(push)
|
||||
# pragma warning(disable:4100)
|
||||
#endif
|
||||
|
||||
// Various overloads for InvokeArgument<N>().
|
||||
//
|
||||
// The InvokeArgument<N>(a1, a2, ..., a_k) action invokes the N-th
|
||||
// (0-based) argument, which must be a k-ary callable, of the mock
|
||||
// function, with arguments a1, a2, ..., a_k.
|
||||
//
|
||||
// Notes:
|
||||
//
|
||||
// 1. The arguments are passed by value by default. If you need to
|
||||
// pass an argument by reference, wrap it inside ByRef(). For
|
||||
// example,
|
||||
//
|
||||
// InvokeArgument<1>(5, string("Hello"), ByRef(foo))
|
||||
//
|
||||
// passes 5 and string("Hello") by value, and passes foo by
|
||||
// reference.
|
||||
//
|
||||
// 2. If the callable takes an argument by reference but ByRef() is
|
||||
// not used, it will receive the reference to a copy of the value,
|
||||
// instead of the original value. For example, when the 0-th
|
||||
// argument of the mock function takes a const string&, the action
|
||||
//
|
||||
// InvokeArgument<0>(string("Hello"))
|
||||
//
|
||||
// makes a copy of the temporary string("Hello") object and passes a
|
||||
// reference of the copy, instead of the original temporary object,
|
||||
// to the callable. This makes it easy for a user to define an
|
||||
// InvokeArgument action from temporary values and have it performed
|
||||
// later.
|
||||
|
||||
namespace internal {
|
||||
namespace invoke_argument {
|
||||
|
||||
// Appears in InvokeArgumentAdl's argument list to help avoid
|
||||
// accidental calls to user functions of the same name.
|
||||
struct AdlTag {};
|
||||
|
||||
// InvokeArgumentAdl - a helper for InvokeArgument.
|
||||
// The basic overloads are provided here for generic functors.
|
||||
// Overloads for other custom-callables are provided in the
|
||||
// internal/custom/callback-actions.h header.
|
||||
|
||||
$range i 0..n
|
||||
$for i
|
||||
[[
|
||||
$range j 1..i
|
||||
|
||||
template <typename R, typename F[[$for j [[, typename A$j]]]]>
|
||||
R InvokeArgumentAdl(AdlTag, F f[[$for j [[, A$j a$j]]]]) {
|
||||
return f([[$for j, [[a$j]]]]);
|
||||
}
|
||||
]]
|
||||
|
||||
} // namespace invoke_argument
|
||||
} // namespace internal
|
||||
|
||||
$range i 0..n
|
||||
$for i [[
|
||||
$range j 0..i-1
|
||||
|
||||
ACTION_TEMPLATE(InvokeArgument,
|
||||
HAS_1_TEMPLATE_PARAMS(int, k),
|
||||
AND_$i[[]]_VALUE_PARAMS($for j, [[p$j]])) {
|
||||
using internal::invoke_argument::InvokeArgumentAdl;
|
||||
return InvokeArgumentAdl<return_type>(
|
||||
internal::invoke_argument::AdlTag(),
|
||||
::testing::get<k>(args)$for j [[, p$j]]);
|
||||
}
|
||||
|
||||
]]
|
||||
|
||||
// Various overloads for ReturnNew<T>().
|
||||
//
|
||||
// The ReturnNew<T>(a1, a2, ..., a_k) action returns a pointer to a new
|
||||
// instance of type T, constructed on the heap with constructor arguments
|
||||
// a1, a2, ..., and a_k. The caller assumes ownership of the returned value.
|
||||
$range i 0..n
|
||||
$for i [[
|
||||
$range j 0..i-1
|
||||
$var ps = [[$for j, [[p$j]]]]
|
||||
|
||||
ACTION_TEMPLATE(ReturnNew,
|
||||
HAS_1_TEMPLATE_PARAMS(typename, T),
|
||||
AND_$i[[]]_VALUE_PARAMS($ps)) {
|
||||
return new T($ps);
|
||||
}
|
||||
|
||||
]]
|
||||
|
||||
#ifdef _MSC_VER
|
||||
# pragma warning(pop)
|
||||
#endif
|
||||
|
||||
} // namespace testing
|
||||
|
||||
// Include any custom callback actions added by the local installation.
|
||||
// We must include this header at the end to make sure it can use the
|
||||
// declarations from this file.
|
||||
#include "gmock/internal/custom/gmock-generated-actions.h"
|
||||
|
||||
#endif // GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_ACTIONS_H_
|
||||