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 in keep/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 in keepsrc/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 ifs, 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.