Miscellaneous
Full Entity Listing
Point Entity List
- air_bubbles
- ambient_comp_hum
- ambient_custom_loop
- ambient_custom_sound
- ambient_drain
- ambient_drip
- ambient_drone
- ambient_eerie
- ambient_factory
- ambient_fan_blowing
- ambient_flies
- ambient_flouro_buzz
- ambient_flys
- ambient_general
- ambient_generalpurpose
- ambient_grinder
- ambient_highwind
- ambient_humming
- ambient_lapping
- ambient_lapping2
- ambient_light_buzz
- ambient_machines
- ambient_nehum
- ambient_rain
- ambient_riftpower
- ambient_running_lava
- ambient_running_water
- ambient_rushing
- ambient_sizzle
- ambient_sound
- ambient_stargate_hum
- ambient_suck_wind
- ambient_swamp1
- ambient_swamp2
- ambient_swamp3
- ambient_teeth
- ambient_teleport
- ambient_thrum
- ambient_thunder
- ambient_toggle
- ambient_water_fall
- ambient_waterfall
- ambient_whnoise
- ambient_zzxzz
- corpse_crucified1
- corpse_crucified2
- corpse_flayed1
- corpse_flayed2
- corpse_flayed3
- corpse_flayed4
- corpse_impaled_back1
- corpse_impaled_back2
- corpse_impaled_back3
- corpse_impaled_front1
- corpse_impaled_front2
- corpse_impaled_front3
- corpse_impaled_horizontal1
- corpse_impaled_horizontal2
- corpse_impaled_horizontal3
- corpse_impaled_horizontal4
- corpse_impaled_vertical1
- corpse_impaled_vertical2
- corpse_impaled_vertical3
- corpse_lynched1
- corpse_lynched2
- corpse_lynched3
- custom_item
- dragon_corner
- earthquake
- effect_teleport
- event_lightning
- func_breakable_spawner
- func_clock
- func_counter
- func_earthquake
- func_exploder
- func_instance
- func_multi_exploder
- func_oncount
- func_placeholder
- func_rotate_door
- func_rotate_entity
- func_rotate_train
- func_rubble
- func_rubble1
- func_rubble2
- func_rubble3
- func_teleport_train
- info_bomb
- info_command
- info_command_server
- info_command_spawn
- info_effect_pulse
- info_intermission
- info_notnull
- info_null
- info_overlord_destination
- info_particles
- info_player_coop
- info_player_coop2
- info_player_deathmatch
- info_player_start
- info_player_start2
- info_rotate
- info_screenshake
- info_skullwiz_destination
- info_target
- info_teleport_destination
- item_armor1
- item_armor2
- item_armorInv
- item_artifact_cross
- item_artifact_empathy_shields
- item_artifact_envirosuit
- item_artifact_horn
- item_artifact_invisibility
- item_artifact_invulnerability
- item_artifact_lavasuit
- item_artifact_nail_piercer
- item_artifact_random
- item_artifact_sharp_shooter
- item_artifact_super_damage
- item_artifact_trinity
- item_artifact_wetsuit
- item_backpack
- item_bolts
- item_cells
- item_circuitboard
- item_custom
- item_health
- item_key1
- item_key2
- item_keyx
- item_lava_spikes
- item_multi_rockets
- item_plasma
- item_poison
- item_powerup_belt
- item_powerup_shield
- item_random_powerup
- item_rockets
- item_shells
- item_sigil
- item_spikes
- item_taunt
- item_tomeofpower
- light
- light_beacon
- light_candle
- light_fixture1
- light_flame_brazier_short
- light_flame_brazier_tall
- light_flame_large_yellow
- light_flame_small_white
- light_flame_small_yellow
- light_fluoro
- light_fluorospark
- light_globe
- light_lantern
- light_lantern2
- light_marsh
- light_postlight
- light_torch_long_walltorch
- light_torch_small_walltorch
- light_tubelight
- ltrail_end
- ltrail_relay
- ltrail_start
- mapobject_custom
- misc_biobox_l
- misc_biobox_s
- misc_boom
- misc_builtineffects
- misc_drip
- misc_explobox
- misc_explobox2
- misc_fireball
- misc_misc
- misc_model
- misc_particle
- misc_particle_burst
- misc_particletemplate
- misc_plasmabox
- misc_plasmabox_s
- misc_shake
- misc_slime_ball
- misc_smoke
- misc_smokemaker
- misc_spark
- misc_sparks
- misc_splash
- misc_targetdummy
- misc_targetnumber
- misc_teleporttrain
- misc_textbook
- monster_armagon
- monster_army
- monster_army_grenade
- monster_army_plasma
- monster_army_rocket
- monster_axeman
- monster_bob
- monster_boss
- monster_centurion
- monster_dcrossbow
- monster_death_guard
- monster_death_lord
- monster_defender
- monster_dfury
- monster_dguard
- monster_dknight
- monster_dog
- monster_dragon
- monster_dreadnought
- monster_drole
- monster_dseargeant
- monster_eel
- monster_eliminator
- monster_enforcer
- monster_firetopboss
- monster_fish
- monster_gargoyle
- monster_gaunt
- monster_golem
- monster_gremlin
- monster_gug
- monster_hell_knight
- monster_hell_knight_champion
- monster_hogre
- monster_hogreham
- monster_hogremac
- monster_imp
- monster_impling
- monster_jim
- monster_knight
- monster_lava_man
- monster_lostsoul
- monster_minotaur
- monster_morph
- monster_mummy
- monster_ogre
- monster_ogre_flak
- monster_ogre_marksman
- monster_ogre_multi
- monster_ogre_spikeshooter
- monster_oldone
- monster_polyp
- monster_pyro
- monster_scorpion
- monster_scourge
- monster_shalrath
- monster_shambler
- monster_shuffler
- monster_skullwiz
- monster_spider
- monster_spikemine
- monster_super_wrath
- monster_sword
- monster_tarbaby
- monster_tarbaby_mitosis
- monster_turret
- monster_vermis
- monster_voreling
- monster_wizard
- monster_wraith
- monster_wrath
- monster_zombie
- monster_zombiek
- monster_zombiep
- random_thunder
- path_corner
- path_rotate
- play_sound
- play_sound_looped
- play_sound_triggered
- trap_gasshooter
- trap_gods_wrath
- trap_gravity_well
- trap_grenadeshooter
- trap_lightning
- trap_lightning_switched
- trap_lightning_triggered
- trap_lightningshooter
- trap_pendlong
- trap_pendlongx
- trap_pendshort
- trap_pendshortx
- trap_rocketshooter
- trap_sawbladex
- trap_sawbladey
- trap_shooter
- trap_spike_mine
- trap_spikeshooter
- trap_switched_shooter
- trap_tesla_coil
- trap_turret
- trigger_counter
- trigger_entitystate_disable
- trigger_entitystate_off
- trigger_entitystate_on
- trigger_entitystate_reset
- trigger_explode
- trigger_monsterbreak
- trigger_monstermovespeed
- trigger_relay
- weapon_axe
- weapon_crossbow
- weapon_grenadelauncher
- weapon_laser_gun
- weapon_lava_nailgun
- weapon_lava_super_nailgun
- weapon_lightning
- weapon_mjolnir
- weapon_nailgun
- weapon_plasma
- weapon_proximity_gun
- weapon_rocketlauncher
- weapon_shotgun
- weapon_supernailgun
- weapon_supershotgun
- weapon_upgrade_axe
- weapon_upgrade_lg
- weapon_upgrade_ssg
- viewthing
Brush Entity List:
- exploding_wall
- func_bob
- func_bobbingobject
- func_bobbingwater
- func_bossgate
- func_breakable
- func_breakable_wall
- func_breakawaywall
- func_button
- func_detail
- func_door
- func_door_button
- func_door_secret
- func_elvtr_button
- func_episodegate
- func_explobox
- func_explodable
- func_exploder
- func_group
- func_illusionary
- func_ladder
- func_ladder_toggle
- func_laser
- func_movewall
- func_multi_exploder
- func_new_plat
- func_particlefield
- func_plat
- func_pushable
- func_skill
- func_slidebox
- func_togglewall
- func_train
- func_train2
- func_train_inv
- func_turret
- func_wall
- misc_bob
- rotate_object
- trigger_changelevel
- trigger_command
- trigger_command_contract
- trigger_console
- trigger_cvarset
- trigger_damagethreshold
- trigger_drolejump
- trigger_earthquake
- trigger_earthquake_kill
- trigger_fog
- trigger_gravity
- trigger_heal
- trigger_hurt
- trigger_ladder
- trigger_monsterjump
- trigger_monsterturret
- trigger_multiple
- trigger_once
- trigger_push
- trigger_quake
- trigger_qtele
- trigger_remove
- trigger_rune
- trigger_secret
- trigger_setgravity
- trigger_setskill
- trigger_teleport
- trigger_void
- trigger_waterfall
Mod Structure
The Keep mod is large. For any large project, a good structure is important. Here I provide a files overview and a code overview for the organization and overall workings of the mod. This is a useful reference if you desire to modify Keep or use and extend it for a mod of your own, which is of course encouraged. I would be quite hypocritical if I let myself borrow code from everyone and did not return the same favor. Also, if I were to fade from time and existence, this will help someone be able to pick up and carry the torch.
File Organization
Everything is in the keep/
folder in your Quake install directory. For example, on Windows: C:/QUAKE/keep/
. This is the working directory. For the sake of brevity, I will omit the working directory from in front of amy referenced locations below.
I keep all files outside of .pak files for ease of development, backup, and github commits.
2D Data
- Sky textures are in
env/gfx/
. These must be .tga format. - HUD textures are in
env/
. These must be .lmp format. Some HUD textures are inkeep/gfx.wad
, however. - Override textures are in
textures/
. These must be .tga format and are typically used to support alpha channel transparency where crisp masking is not desired, but rather smooth transparency. - Map textures are compiled into the .bsp files, located in
maps/
3D Data
- All 3D models are in
progs/
. These must be .mdl format.
Text Data
- Particle effect specifications are in
keep/effectinfo.txt
file. These are used by DP/FTE/QSS family of engines for specialized particle effects referenced by text name in QuakeC. - Readme is here online, not bundled with the mod currently.
Audio Data
- All sounds are in
sounds/
. These must be .wav, .mp3, or .ogg.
Code
- The meat and potatoes of the mod are stored in
keepsrc/
. These must be .qc files for ssqc normal progs.dat (main game code) and .csqc for csprogs.dat (HUD and effects). The compile list and inclusion is in the progs.src file in here. - CSQC code is in
keepsrc/csqc/
. - I've included each build of fteqccgui.exe that was used to compile the progs.dat in
keepsrc/
and the csprogs.dat inkeepsrc/csqc
Code Organization
Here the organization of functions and general practice for the code is given, along with my reasonings for my particular code style.
Of brackets and one line ifs and compressed locals on the same line: when working on code, a lot of time can be spent scrolling up and down within a file. To save myself countless hours of scrolling, I've established a habit of minimizing vertical padding wherever possible, but without compromising readability. This is why {
are always on the same line as function names and else
's or else if
s, one line ifs are kept on the same line, and many ai functions of the form monster_anim# [$frame, next] will have their ai_*(); function and any trivial function calls all on one line. Also multiple same type locals are
,`'ed together on one line. Where these vertical space saving conventions aren't followed, it indicates untouched code directly copied and used as-is, or at least almost untouched.
Most of the time, though not all, I've made separate .qc files for different mods, particularly for defs, subs, projectiles, and effects (fx).
Useful Functions
Here there be dragons. Use at your own risk of fun or otherwise. Maphacks are nonstandard usage and can have bad side effects, but can lead to some fun and interesting results. This is not a complete listing of every function in the mod, but it provides a common listing of hook functions useful for hacks. A hook function is one that lets you change a state or condition with minimal side effects. This could be anything from a delayed spawn, to a precache, or simply to use the brush model (aka bmodel). Some of these were made just for hacks...and nothing else! Who knew!
This listing is also useful if you are extending Keep to make a mod of your own. Please also refer to the Mod Structure above for a guide on the code organization.
Special Note: There are many useful added entities from many mods; so many, in fact, that there probably already exists a documented entity for what you are trying to achieve.