From 5a85e81685300e2299dabfeb25d513b99df471be Mon Sep 17 00:00:00 2001 From: Paweł Redman Date: Fri, 6 Sep 2013 22:40:51 +0200 Subject: Initial commit --- CC_ | 229 + COPYING | 24 + ChangeLog | 175 + GPL | 281 + Makefile | 1952 +++++ assets/armour/bsuit.armour | 19 + assets/armour/helmet.armour | 19 + assets/armour/larmour.armour | 95 + assets/configs/buildables/acid_tube.cfg | 5 + assets/configs/buildables/arm.cfg | 5 + assets/configs/buildables/barricade.cfg | 5 + assets/configs/buildables/booster.cfg | 5 + assets/configs/buildables/dcc.cfg | 5 + assets/configs/buildables/eggpod.cfg | 5 + assets/configs/buildables/hive.cfg | 5 + assets/configs/buildables/hovel.cfg | 5 + assets/configs/buildables/medistat.cfg | 5 + assets/configs/buildables/mgturret.cfg | 7 + assets/configs/buildables/overmind.cfg | 5 + assets/configs/buildables/reactor.cfg | 5 + assets/configs/buildables/repeater.cfg | 5 + assets/configs/buildables/telenode.cfg | 5 + assets/configs/buildables/tesla.cfg | 5 + assets/configs/buildables/trapper.cfg | 5 + assets/configs/classes/builder.cfg | 17 + assets/configs/classes/builderupg.cfg | 17 + assets/configs/classes/human_base.cfg | 17 + assets/configs/classes/human_bsuit.cfg | 17 + assets/configs/classes/level0.cfg | 17 + assets/configs/classes/level1.cfg | 17 + assets/configs/classes/level1upg.cfg | 17 + assets/configs/classes/level2.cfg | 17 + assets/configs/classes/level2upg.cfg | 17 + assets/configs/classes/level3.cfg | 17 + assets/configs/classes/level3upg.cfg | 17 + assets/configs/classes/level4.cfg | 17 + assets/configs/classes/spectator.cfg | 17 + assets/models/buildables/acid_tube/animation.cfg | 15 + assets/models/buildables/barricade/animation.cfg | 17 + assets/models/buildables/medistat/animation.cfg | 18 + assets/models/buildables/mgturret/animation.cfg | 15 + assets/models/buildables/repeater/animation.cfg | 15 + assets/models/buildables/tesla/animation.cfg | 15 + assets/models/players/human_base/locdamage.cfg | 60 + assets/models/players/human_bsuit/locdamage.cfg | 29 + assets/models/players/level1/animation.cfg | 48 + assets/models/weapons/abuild/weapon.cfg | 11 + assets/models/weapons/abuildupg/weapon.cfg | 19 + assets/models/weapons/lcannon/weapon.cfg | 33 + assets/models/weapons/level0/weapon.cfg | 9 + assets/models/weapons/level1/weapon.cfg | 11 + assets/models/weapons/level1upg/weapon.cfg | 17 + assets/models/weapons/level2/weapon.cfg | 11 + assets/models/weapons/level2upg/weapon.cfg | 18 + assets/models/weapons/level3/weapon.cfg | 16 + assets/models/weapons/level3upg/weapon.cfg | 28 + assets/models/weapons/level4/weapon.cfg | 11 + assets/models/weapons/mdriver/weapon.cfg | 12 + assets/models/weapons/prifle/weapon.cfg | 17 + assets/models/weapons/psaw/weapon.cfg | 13 + assets/scripts/crosshairs.shader | 96 + assets/scripts/mdriver.trail | 10 + assets/scripts/misc.particle | 378 + assets/scripts/ui.shader | 19 + assets/scripts/weapons.particle | 890 +++ assets/scripts/weapons.shader | 93 + assets/sound/buildables/barricade/sound.cfg | 14 + assets/ui/assets/alien/buildstat.cfg | 37 + assets/ui/assets/human/buildstat.cfg | 39 + assets/ui/connect.menu | 14 + assets/ui/createfavorite.menu | 115 + assets/ui/createserver.menu | 499 ++ assets/ui/demo.menu | 108 + assets/ui/download.menu | 167 + assets/ui/drop.menu | 122 + assets/ui/error.menu | 102 + assets/ui/findplayer.menu | 173 + assets/ui/help.txt | 135 + assets/ui/hud.txt | 11 + assets/ui/ingame.menu | 140 + assets/ui/ingame.txt | 9 + assets/ui/ingame_game.menu | 862 +++ assets/ui/ingame_help.menu | 88 + assets/ui/ingame_leave.menu | 209 + assets/ui/ingame_options.menu | 2359 ++++++ assets/ui/joinserver.menu | 769 ++ assets/ui/loading.menu | 223 + assets/ui/main.menu | 189 + assets/ui/menudef.h | 223 + assets/ui/menus.txt | 21 + assets/ui/mod.menu | 108 + assets/ui/news.menu | 102 + assets/ui/options.menu | 311 + assets/ui/password.menu | 85 + assets/ui/quit.menu | 99 + assets/ui/quitcredit.menu | 410 ++ assets/ui/say.menu | 137 + assets/ui/serverinfo.menu | 112 + assets/ui/teamscore.menu | 386 + assets/ui/tremulous.txt | 20 + assets/ui/tremulous_alien_builder_hud.menu | 42 + assets/ui/tremulous_alien_common_hud.h | 257 + assets/ui/tremulous_alien_general_hud.menu | 30 + assets/ui/tremulous_alienbuild.menu | 136 + assets/ui/tremulous_alienclass.menu | 157 + assets/ui/tremulous_aliendialogs.menu | 97 + assets/ui/tremulous_alienupgrade.menu | 136 + assets/ui/tremulous_common_hud.h | 224 + assets/ui/tremulous_default_hud.menu | 37 + assets/ui/tremulous_dialogs.menu | 98 + assets/ui/tremulous_human_hud.menu | 379 + assets/ui/tremulous_humanarmoury.menu | 189 + assets/ui/tremulous_humanbuild.menu | 135 + assets/ui/tremulous_humandialogs.menu | 98 + assets/ui/tremulous_humanitem.menu | 157 + assets/ui/tremulous_teamselect.menu | 136 + cross-make-mingw.sh | 10 + make-macosx-ub.sh | 170 + misc/SLA-dmg.sh | 73 + misc/Tremulous.icns | Bin 0 -> 78419 bytes misc/entities.def | 1707 +++++ misc/manual.lyx | 8376 ++++++++++++++++++++++ misc/merge-ioq3-into-trem.sh | 42 + misc/msvc/tremulous.sln | 21 + misc/msvc/tremulous.vcproj | 65 + misc/server.cfg | 39 + misc/tremulous.ico | Bin 0 -> 198 bytes misc/tremulous.xpm | 90 + src/AL/VERSION | 16 + src/AL/al.h | 506 ++ src/AL/alc.h | 166 + src/AL/alctypes.h | 143 + src/AL/altypes.h | 352 + src/AL/alut.h | 90 + src/SDL12/include/SDL.h | 101 + src/SDL12/include/SDL_active.h | 63 + src/SDL12/include/SDL_audio.h | 284 + src/SDL12/include/SDL_byteorder.h | 29 + src/SDL12/include/SDL_cdrom.h | 202 + src/SDL12/include/SDL_config.h | 45 + src/SDL12/include/SDL_config_amiga.h | 80 + src/SDL12/include/SDL_config_dreamcast.h | 106 + src/SDL12/include/SDL_config_macos.h | 112 + src/SDL12/include/SDL_config_macosx.h | 150 + src/SDL12/include/SDL_config_minimal.h | 62 + src/SDL12/include/SDL_config_nds.h | 115 + src/SDL12/include/SDL_config_os2.h | 141 + src/SDL12/include/SDL_config_symbian.h | 146 + src/SDL12/include/SDL_config_win32.h | 183 + src/SDL12/include/SDL_copying.h | 22 + src/SDL12/include/SDL_cpuinfo.h | 69 + src/SDL12/include/SDL_endian.h | 209 + src/SDL12/include/SDL_error.h | 72 + src/SDL12/include/SDL_events.h | 356 + src/SDL12/include/SDL_getenv.h | 28 + src/SDL12/include/SDL_joystick.h | 187 + src/SDL12/include/SDL_keyboard.h | 135 + src/SDL12/include/SDL_keysym.h | 326 + src/SDL12/include/SDL_loadso.h | 78 + src/SDL12/include/SDL_main.h | 106 + src/SDL12/include/SDL_mouse.h | 143 + src/SDL12/include/SDL_mutex.h | 177 + src/SDL12/include/SDL_name.h | 11 + src/SDL12/include/SDL_opengl.h | 6556 +++++++++++++++++ src/SDL12/include/SDL_platform.h | 110 + src/SDL12/include/SDL_quit.h | 55 + src/SDL12/include/SDL_rwops.h | 155 + src/SDL12/include/SDL_stdinc.h | 620 ++ src/SDL12/include/SDL_syswm.h | 225 + src/SDL12/include/SDL_thread.h | 120 + src/SDL12/include/SDL_timer.h | 125 + src/SDL12/include/SDL_types.h | 28 + src/SDL12/include/SDL_version.h | 91 + src/SDL12/include/SDL_video.h | 951 +++ src/SDL12/include/begin_code.h | 191 + src/SDL12/include/close_code.h | 46 + src/asm/ftola.s | 160 + src/asm/matha.s | 54 + src/asm/qasm.h | 38 + src/asm/snapvectora.s | 103 + src/asm/snd_mixa.s | 217 + src/cgame/cg_animation.c | 113 + src/cgame/cg_animmapobj.c | 227 + src/cgame/cg_attachment.c | 404 ++ src/cgame/cg_buildable.c | 2290 ++++++ src/cgame/cg_consolecmds.c | 298 + src/cgame/cg_draw.c | 3813 ++++++++++ src/cgame/cg_drawtools.c | 439 ++ src/cgame/cg_ents.c | 1252 ++++ src/cgame/cg_event.c | 1116 +++ src/cgame/cg_event.c.orig | 1086 +++ src/cgame/cg_local.h | 2177 ++++++ src/cgame/cg_main.c | 1985 +++++ src/cgame/cg_main.c.orig | 1982 +++++ src/cgame/cg_marks.c | 289 + src/cgame/cg_particles.c | 2599 +++++++ src/cgame/cg_players.c | 2422 +++++++ src/cgame/cg_playerstate.c | 344 + src/cgame/cg_predict.c | 898 +++ src/cgame/cg_public.h | 262 + src/cgame/cg_scanner.c | 362 + src/cgame/cg_servercmds.c | 1339 ++++ src/cgame/cg_snapshot.c | 408 ++ src/cgame/cg_syscalls.asm | 121 + src/cgame/cg_syscalls.c | 592 ++ src/cgame/cg_trails.c | 1531 ++++ src/cgame/cg_tutorial.c | 864 +++ src/cgame/cg_view.c | 1500 ++++ src/cgame/cg_weapons.c | 2075 ++++++ src/client/cl_avi.c | 676 ++ src/client/cl_cgame.c | 1155 +++ src/client/cl_cin.c | 1697 +++++ src/client/cl_console.c | 624 ++ src/client/cl_curl.c | 339 + src/client/cl_curl.h | 103 + src/client/cl_input.c | 1010 +++ src/client/cl_keys.c | 1490 ++++ src/client/cl_main.c | 4418 ++++++++++++ src/client/cl_net_chan.c | 168 + src/client/cl_parse.c | 910 +++ src/client/cl_scrn.c | 571 ++ src/client/cl_ui.c | 1140 +++ src/client/client.h | 645 ++ src/client/keycodes.h | 281 + src/client/keys.h | 58 + src/client/libmumblelink.c | 189 + src/client/libmumblelink.h | 36 + src/client/qal.c | 352 + src/client/qal.h | 253 + src/client/snd_adpcm.c | 330 + src/client/snd_codec.c | 238 + src/client/snd_codec.h | 99 + src/client/snd_codec_ogg.c | 479 ++ src/client/snd_codec_wav.c | 295 + src/client/snd_dma.c | 1558 ++++ src/client/snd_local.h | 254 + src/client/snd_main.c | 562 ++ src/client/snd_mem.c | 270 + src/client/snd_mix.c | 742 ++ src/client/snd_openal.c | 2601 +++++++ src/client/snd_public.h | 85 + src/client/snd_wavelet.c | 254 + src/game/bg_alloc.c | 241 + src/game/bg_lib.c | 2816 ++++++++ src/game/bg_lib.h | 137 + src/game/bg_local.h | 88 + src/game/bg_misc.c | 4491 ++++++++++++ src/game/bg_pmove.c | 3878 ++++++++++ src/game/bg_public.h | 1409 ++++ src/game/bg_slidemove.c | 408 ++ src/game/bg_voice.c | 652 ++ src/game/g_active.c | 1955 +++++ src/game/g_active.c.orig | 1937 +++++ src/game/g_admin.c | 3277 +++++++++ src/game/g_admin.h | 197 + src/game/g_buildable.c | 4548 ++++++++++++ src/game/g_client.c | 1800 +++++ src/game/g_client.c.orig | 1600 +++++ src/game/g_cmds.c | 3609 ++++++++++ src/game/g_cmds.c.orig | 3588 +++++++++ src/game/g_combat.c | 1470 ++++ src/game/g_combat.c.orig | 1468 ++++ src/game/g_local.h | 1270 ++++ src/game/g_main.c | 2565 +++++++ src/game/g_main.c.orig | 2548 +++++++ src/game/g_maprotation.c | 1264 ++++ src/game/g_misc.c | 440 ++ src/game/g_missile.c | 913 +++ src/game/g_mover.c | 2485 +++++++ src/game/g_namelog.c | 127 + src/game/g_physics.c | 169 + src/game/g_public.h | 265 + src/game/g_session.c | 152 + src/game/g_spawn.c | 665 ++ src/game/g_svcmds.c | 639 ++ src/game/g_syscalls.asm | 68 + src/game/g_syscalls.c | 299 + src/game/g_target.c | 478 ++ src/game/g_team.c | 473 ++ src/game/g_trigger.c | 1148 +++ src/game/g_utils.c | 1032 +++ src/game/g_weapon.c | 1647 +++++ src/game/tremulous.h | 718 ++ src/jpeg-8c/README | 326 + src/jpeg-8c/jaricom.c | 153 + src/jpeg-8c/jcapimin.c | 288 + src/jpeg-8c/jcapistd.c | 161 + src/jpeg-8c/jcarith.c | 934 +++ src/jpeg-8c/jccoefct.c | 453 ++ src/jpeg-8c/jccolor.c | 459 ++ src/jpeg-8c/jcdctmgr.c | 482 ++ src/jpeg-8c/jchuff.c | 1576 ++++ src/jpeg-8c/jcinit.c | 65 + src/jpeg-8c/jcmainct.c | 293 + src/jpeg-8c/jcmarker.c | 682 ++ src/jpeg-8c/jcmaster.c | 858 +++ src/jpeg-8c/jcomapi.c | 106 + src/jpeg-8c/jconfig.h | 56 + src/jpeg-8c/jcparam.c | 632 ++ src/jpeg-8c/jcprepct.c | 358 + src/jpeg-8c/jcsample.c | 545 ++ src/jpeg-8c/jctrans.c | 382 + src/jpeg-8c/jdapimin.c | 396 + src/jpeg-8c/jdapistd.c | 275 + src/jpeg-8c/jdarith.c | 772 ++ src/jpeg-8c/jdatadst.c | 267 + src/jpeg-8c/jdatasrc.c | 274 + src/jpeg-8c/jdcoefct.c | 736 ++ src/jpeg-8c/jdcolor.c | 396 + src/jpeg-8c/jdct.h | 393 + src/jpeg-8c/jddctmgr.c | 384 + src/jpeg-8c/jdhuff.c | 1541 ++++ src/jpeg-8c/jdinput.c | 661 ++ src/jpeg-8c/jdmainct.c | 512 ++ src/jpeg-8c/jdmarker.c | 1406 ++++ src/jpeg-8c/jdmaster.c | 533 ++ src/jpeg-8c/jdmerge.c | 400 ++ src/jpeg-8c/jdpostct.c | 290 + src/jpeg-8c/jdsample.c | 361 + src/jpeg-8c/jdtrans.c | 140 + src/jpeg-8c/jerror.c | 254 + src/jpeg-8c/jerror.h | 304 + src/jpeg-8c/jfdctflt.c | 174 + src/jpeg-8c/jfdctfst.c | 230 + src/jpeg-8c/jfdctint.c | 4348 +++++++++++ src/jpeg-8c/jidctflt.c | 235 + src/jpeg-8c/jidctfst.c | 368 + src/jpeg-8c/jidctint.c | 5137 +++++++++++++ src/jpeg-8c/jinclude.h | 91 + src/jpeg-8c/jmemmgr.c | 1118 +++ src/jpeg-8c/jmemnobs.c | 109 + src/jpeg-8c/jmemsys.h | 198 + src/jpeg-8c/jmorecfg.h | 371 + src/jpeg-8c/jpegint.h | 407 ++ src/jpeg-8c/jpeglib.h | 1160 +++ src/jpeg-8c/jquant1.c | 856 +++ src/jpeg-8c/jquant2.c | 1310 ++++ src/jpeg-8c/jutils.c | 231 + src/jpeg-8c/jversion.h | 14 + src/libcurl/curl/curl.h | 1563 ++++ src/libcurl/curl/curlver.h | 56 + src/libcurl/curl/easy.h | 81 + src/libcurl/curl/mprintf.h | 62 + src/libcurl/curl/multi.h | 344 + src/libcurl/curl/stdcheaders.h | 34 + src/libcurl/curl/types.h | 1 + src/libs/macosx/libSDL-1.2.0.dylib | Bin 0 -> 4436304 bytes src/libs/macosx/libSDLmain.a | Bin 0 -> 97816 bytes src/libs/win32/libSDL.dll.a | Bin 0 -> 123944 bytes src/libs/win32/libSDL.la | 41 + src/libs/win32/libSDLmain.a | Bin 0 -> 208386 bytes src/libs/win32/libcurl.a | Bin 0 -> 253484 bytes src/libspeex/_kiss_fft_guts.h | 160 + src/libspeex/arch.h | 239 + src/libspeex/bits.c | 372 + src/libspeex/buffer.c | 176 + src/libspeex/cb_search.c | 612 ++ src/libspeex/cb_search.h | 103 + src/libspeex/cb_search_arm4.h | 137 + src/libspeex/cb_search_bfin.h | 112 + src/libspeex/cb_search_sse.h | 84 + src/libspeex/config.h | 23 + src/libspeex/echo_diagnostic.m | 72 + src/libspeex/exc_10_16_table.c | 50 + src/libspeex/exc_10_32_table.c | 66 + src/libspeex/exc_20_32_table.c | 66 + src/libspeex/exc_5_256_table.c | 290 + src/libspeex/exc_5_64_table.c | 98 + src/libspeex/exc_8_128_table.c | 162 + src/libspeex/fftwrap.c | 288 + src/libspeex/fftwrap.h | 58 + src/libspeex/filterbank.c | 227 + src/libspeex/filterbank.h | 66 + src/libspeex/filters.c | 821 +++ src/libspeex/filters.h | 90 + src/libspeex/filters_arm4.h | 96 + src/libspeex/filters_bfin.h | 515 ++ src/libspeex/filters_sse.h | 336 + src/libspeex/fixed_arm4.h | 148 + src/libspeex/fixed_arm5e.h | 178 + src/libspeex/fixed_bfin.h | 173 + src/libspeex/fixed_debug.h | 487 ++ src/libspeex/fixed_generic.h | 106 + src/libspeex/gain_table.c | 160 + src/libspeex/gain_table_lbr.c | 64 + src/libspeex/hexc_10_32_table.c | 66 + src/libspeex/hexc_table.c | 162 + src/libspeex/high_lsp_tables.c | 163 + src/libspeex/include/speex/speex.h | 424 ++ src/libspeex/include/speex/speex_bits.h | 174 + src/libspeex/include/speex/speex_buffer.h | 68 + src/libspeex/include/speex/speex_callbacks.h | 134 + src/libspeex/include/speex/speex_config_types.h | 18 + src/libspeex/include/speex/speex_echo.h | 123 + src/libspeex/include/speex/speex_header.h | 94 + src/libspeex/include/speex/speex_jitter.h | 197 + src/libspeex/include/speex/speex_preprocess.h | 190 + src/libspeex/include/speex/speex_resampler.h | 340 + src/libspeex/include/speex/speex_stereo.h | 91 + src/libspeex/include/speex/speex_types.h | 126 + src/libspeex/jitter.c | 840 +++ src/libspeex/kiss_fft.c | 523 ++ src/libspeex/kiss_fft.h | 108 + src/libspeex/kiss_fftr.c | 297 + src/libspeex/kiss_fftr.h | 51 + src/libspeex/lpc.c | 201 + src/libspeex/lpc.h | 53 + src/libspeex/lpc_bfin.h | 131 + src/libspeex/lsp.c | 656 ++ src/libspeex/lsp.h | 64 + src/libspeex/lsp_bfin.h | 89 + src/libspeex/lsp_tables_nb.c | 360 + src/libspeex/ltp.c | 839 +++ src/libspeex/ltp.h | 141 + src/libspeex/ltp_arm4.h | 187 + src/libspeex/ltp_bfin.h | 419 ++ src/libspeex/ltp_sse.h | 92 + src/libspeex/math_approx.h | 332 + src/libspeex/mdf.c | 1177 +++ src/libspeex/misc_bfin.h | 54 + src/libspeex/modes.c | 362 + src/libspeex/modes.h | 161 + src/libspeex/modes_wb.c | 300 + src/libspeex/nb_celp.c | 1903 +++++ src/libspeex/nb_celp.h | 203 + src/libspeex/os_support.h | 169 + src/libspeex/preprocess.c | 1185 +++ src/libspeex/pseudofloat.h | 379 + src/libspeex/quant_lsp.c | 385 + src/libspeex/quant_lsp.h | 74 + src/libspeex/quant_lsp_bfin.h | 165 + src/libspeex/resample.c | 1179 +++ src/libspeex/sb_celp.c | 1488 ++++ src/libspeex/sb_celp.h | 155 + src/libspeex/smallft.c | 1261 ++++ src/libspeex/smallft.h | 46 + src/libspeex/speex.c | 250 + src/libspeex/speex_callbacks.c | 144 + src/libspeex/speex_header.c | 188 + src/libspeex/stack_alloc.h | 115 + src/libspeex/stereo.c | 296 + src/libspeex/testdenoise.c | 44 + src/libspeex/testecho.c | 53 + src/libspeex/testenc.c | 146 + src/libspeex/testenc_uwb.c | 137 + src/libspeex/testenc_wb.c | 140 + src/libspeex/vbr.c | 275 + src/libspeex/vbr.h | 70 + src/libspeex/vorbis_psy.h | 97 + src/libspeex/vq.c | 147 + src/libspeex/vq.h | 54 + src/libspeex/vq_arm4.h | 115 + src/libspeex/vq_bfin.h | 107 + src/libspeex/vq_sse.h | 120 + src/libspeex/window.c | 102 + src/master/Makefile | 64 + src/master/common.h | 91 + src/master/master.c | 877 +++ src/master/messages.c | 574 ++ src/master/messages.h | 35 + src/master/servers.c | 666 ++ src/master/servers.h | 106 + src/master/stats.c | 136 + src/null/mac_net.c | 55 + src/null/null_client.c | 93 + src/null/null_glimp.c | 57 + src/null/null_input.c | 38 + src/null/null_main.c | 117 + src/null/null_net.c | 54 + src/null/null_snddma.c | 61 + src/qcommon/cm_load.c | 1024 +++ src/qcommon/cm_local.h | 216 + src/qcommon/cm_patch.c | 1773 +++++ src/qcommon/cm_patch.h | 104 + src/qcommon/cm_polylib.c | 738 ++ src/qcommon/cm_polylib.h | 69 + src/qcommon/cm_public.h | 84 + src/qcommon/cm_test.c | 525 ++ src/qcommon/cm_trace.c | 1793 +++++ src/qcommon/cmd.c | 878 +++ src/qcommon/common.c | 3326 +++++++++ src/qcommon/cvar.c | 1321 ++++ src/qcommon/files.c | 3525 +++++++++ src/qcommon/huffman.c | 448 ++ src/qcommon/ioapi.c | 182 + src/qcommon/ioapi.h | 75 + src/qcommon/md4.c | 208 + src/qcommon/md5.c | 310 + src/qcommon/msg.c | 1759 +++++ src/qcommon/net_chan.c | 739 ++ src/qcommon/net_ip.c | 1727 +++++ src/qcommon/parse.c | 3727 ++++++++++ src/qcommon/puff.c | 758 ++ src/qcommon/puff.h | 43 + src/qcommon/q_math.c | 1295 ++++ src/qcommon/q_platform.h | 380 + src/qcommon/q_shared.c | 1522 ++++ src/qcommon/q_shared.h | 1424 ++++ src/qcommon/qcommon.h | 1194 +++ src/qcommon/qfiles.h | 582 ++ src/qcommon/surfaceflags.h | 91 + src/qcommon/unzip.c | 1608 +++++ src/qcommon/unzip.h | 355 + src/qcommon/vm.c | 917 +++ src/qcommon/vm_interpreted.c | 909 +++ src/qcommon/vm_local.h | 189 + src/qcommon/vm_none.c | 10 + src/qcommon/vm_powerpc.c | 2170 ++++++ src/qcommon/vm_powerpc_asm.c | 1006 +++ src/qcommon/vm_powerpc_asm.h | 156 + src/qcommon/vm_sparc.c | 1648 +++++ src/qcommon/vm_sparc.h | 78 + src/qcommon/vm_x86.c | 1245 ++++ src/qcommon/vm_x86_64.c | 1099 +++ src/qcommon/vm_x86_64_assembler.c | 1447 ++++ src/renderer/qgl.h | 381 + src/renderer/tr_animation.c | 659 ++ src/renderer/tr_backend.c | 1210 ++++ src/renderer/tr_bsp.c | 1870 +++++ src/renderer/tr_cmds.c | 651 ++ src/renderer/tr_curve.c | 627 ++ src/renderer/tr_flares.c | 530 ++ src/renderer/tr_font.c | 550 ++ src/renderer/tr_image.c | 1607 +++++ src/renderer/tr_image_bmp.c | 240 + src/renderer/tr_image_jpg.c | 438 ++ src/renderer/tr_image_pcx.c | 176 + src/renderer/tr_image_png.c | 2488 +++++++ src/renderer/tr_image_tga.c | 321 + src/renderer/tr_init.c | 1358 ++++ src/renderer/tr_light.c | 395 + src/renderer/tr_local.h | 1711 +++++ src/renderer/tr_main.c | 1403 ++++ src/renderer/tr_marks.c | 455 ++ src/renderer/tr_mesh.c | 419 ++ src/renderer/tr_model.c | 1149 +++ src/renderer/tr_noise.c | 92 + src/renderer/tr_public.h | 173 + src/renderer/tr_scene.c | 419 ++ src/renderer/tr_shade.c | 1525 ++++ src/renderer/tr_shade_calc.c | 1232 ++++ src/renderer/tr_shader.c | 3078 ++++++++ src/renderer/tr_shadows.c | 344 + src/renderer/tr_sky.c | 846 +++ src/renderer/tr_surface.c | 1249 ++++ src/renderer/tr_types.h | 218 + src/renderer/tr_world.c | 670 ++ src/sdl/sdl_gamma.c | 92 + src/sdl/sdl_glimp.c | 1061 +++ src/sdl/sdl_icon.h | 138 + src/sdl/sdl_input.c | 1158 +++ src/sdl/sdl_snd.c | 299 + src/server/server.h | 426 ++ src/server/sv_ccmds.c | 326 + src/server/sv_client.c | 1699 +++++ src/server/sv_game.c | 601 ++ src/server/sv_init.c | 754 ++ src/server/sv_main.c | 1147 +++ src/server/sv_net_chan.c | 210 + src/server/sv_snapshot.c | 694 ++ src/server/sv_world.c | 692 ++ src/sys/con_log.c | 130 + src/sys/con_passive.c | 69 + src/sys/con_tty.c | 478 ++ src/sys/con_win32.c | 359 + src/sys/sys_loadlib.h | 50 + src/sys/sys_local.h | 61 + src/sys/sys_main.c | 605 ++ src/sys/sys_osx.m | 141 + src/sys/sys_unix.c | 818 +++ src/sys/sys_win32.c | 811 +++ src/sys/win_resource.h | 45 + src/sys/win_resource.rc | 72 + src/tools/asm/README.Id | 10 + src/tools/asm/cmdlib.c | 1141 +++ src/tools/asm/cmdlib.h | 153 + src/tools/asm/lib.txt | 31 + src/tools/asm/mathlib.h | 95 + src/tools/asm/notes.txt | 16 + src/tools/asm/ops.txt | 132 + src/tools/asm/opstrings.h | 176 + src/tools/asm/q3asm.c | 1647 +++++ src/tools/lcc/COPYRIGHT | 61 + src/tools/lcc/LOG | 91 + src/tools/lcc/README | 21 + src/tools/lcc/README.id | 3 + src/tools/lcc/cpp/cpp.c | 327 + src/tools/lcc/cpp/cpp.h | 166 + src/tools/lcc/cpp/eval.c | 524 ++ src/tools/lcc/cpp/getopt.c | 53 + src/tools/lcc/cpp/hideset.c | 112 + src/tools/lcc/cpp/include.c | 154 + src/tools/lcc/cpp/lex.c | 580 ++ src/tools/lcc/cpp/macro.c | 515 ++ src/tools/lcc/cpp/nlist.c | 104 + src/tools/lcc/cpp/tokens.c | 371 + src/tools/lcc/cpp/unix.c | 128 + src/tools/lcc/doc/4.html | 754 ++ src/tools/lcc/doc/bprint.1 | 83 + src/tools/lcc/doc/bprint.pdf | Bin 0 -> 4963 bytes src/tools/lcc/doc/install.html | 796 ++ src/tools/lcc/doc/lcc.1 | 605 ++ src/tools/lcc/doc/lcc.pdf | Bin 0 -> 16421 bytes src/tools/lcc/etc/bytecode.c | 66 + src/tools/lcc/etc/lcc.c | 853 +++ src/tools/lcc/lburg/gram.c | 682 ++ src/tools/lcc/lburg/gram.y | 202 + src/tools/lcc/lburg/lburg.1 | 179 + src/tools/lcc/lburg/lburg.c | 671 ++ src/tools/lcc/lburg/lburg.h | 65 + src/tools/lcc/src/alloc.c | 94 + src/tools/lcc/src/bind.c | 8 + src/tools/lcc/src/bytecode.c | 367 + src/tools/lcc/src/c.h | 729 ++ src/tools/lcc/src/config.h | 102 + src/tools/lcc/src/dag.c | 736 ++ src/tools/lcc/src/dagcheck.md | 210 + src/tools/lcc/src/decl.c | 1162 +++ src/tools/lcc/src/enode.c | 545 ++ src/tools/lcc/src/error.c | 137 + src/tools/lcc/src/event.c | 28 + src/tools/lcc/src/expr.c | 711 ++ src/tools/lcc/src/gen.c | 830 +++ src/tools/lcc/src/init.c | 318 + src/tools/lcc/src/inits.c | 7 + src/tools/lcc/src/input.c | 135 + src/tools/lcc/src/lex.c | 923 +++ src/tools/lcc/src/list.c | 56 + src/tools/lcc/src/main.c | 225 + src/tools/lcc/src/null.c | 74 + src/tools/lcc/src/output.c | 135 + src/tools/lcc/src/prof.c | 228 + src/tools/lcc/src/profio.c | 276 + src/tools/lcc/src/simp.c | 587 ++ src/tools/lcc/src/stmt.c | 696 ++ src/tools/lcc/src/string.c | 122 + src/tools/lcc/src/sym.c | 314 + src/tools/lcc/src/symbolic.c | 494 ++ src/tools/lcc/src/token.h | 133 + src/tools/lcc/src/trace.c | 181 + src/tools/lcc/src/tree.c | 223 + src/tools/lcc/src/types.c | 748 ++ src/ui/ui_atoms.c | 295 + src/ui/ui_gameinfo.c | 377 + src/ui/ui_local.h | 400 ++ src/ui/ui_main.c | 4653 ++++++++++++ src/ui/ui_public.h | 205 + src/ui/ui_shared.c | 8083 +++++++++++++++++++++ src/ui/ui_shared.h | 559 ++ src/ui/ui_syscalls.asm | 102 + src/ui/ui_syscalls.c | 483 ++ src/zlib/adler32.c | 149 + src/zlib/crc32.c | 423 ++ src/zlib/crc32.h | 441 ++ src/zlib/inffast.c | 318 + src/zlib/inffast.h | 11 + src/zlib/inffixed.h | 94 + src/zlib/inflate.c | 1368 ++++ src/zlib/inflate.h | 115 + src/zlib/inftrees.c | 329 + src/zlib/inftrees.h | 55 + src/zlib/zconf.h | 332 + src/zlib/zlib.h | 1357 ++++ src/zlib/zutil.c | 318 + src/zlib/zutil.h | 269 + 665 files changed, 355035 insertions(+) create mode 100755 CC_ create mode 100755 COPYING create mode 100755 ChangeLog create mode 100755 GPL create mode 100755 Makefile create mode 100755 assets/armour/bsuit.armour create mode 100755 assets/armour/helmet.armour create mode 100755 assets/armour/larmour.armour create mode 100755 assets/configs/buildables/acid_tube.cfg create mode 100755 assets/configs/buildables/arm.cfg create mode 100755 assets/configs/buildables/barricade.cfg create mode 100755 assets/configs/buildables/booster.cfg create mode 100755 assets/configs/buildables/dcc.cfg create mode 100755 assets/configs/buildables/eggpod.cfg create mode 100755 assets/configs/buildables/hive.cfg create mode 100755 assets/configs/buildables/hovel.cfg create mode 100755 assets/configs/buildables/medistat.cfg create mode 100755 assets/configs/buildables/mgturret.cfg create mode 100755 assets/configs/buildables/overmind.cfg create mode 100755 assets/configs/buildables/reactor.cfg create mode 100755 assets/configs/buildables/repeater.cfg create mode 100755 assets/configs/buildables/telenode.cfg create mode 100755 assets/configs/buildables/tesla.cfg create mode 100755 assets/configs/buildables/trapper.cfg create mode 100755 assets/configs/classes/builder.cfg create mode 100755 assets/configs/classes/builderupg.cfg create mode 100755 assets/configs/classes/human_base.cfg create mode 100755 assets/configs/classes/human_bsuit.cfg create mode 100755 assets/configs/classes/level0.cfg create mode 100755 assets/configs/classes/level1.cfg create mode 100755 assets/configs/classes/level1upg.cfg create mode 100755 assets/configs/classes/level2.cfg create mode 100755 assets/configs/classes/level2upg.cfg create mode 100755 assets/configs/classes/level3.cfg create mode 100755 assets/configs/classes/level3upg.cfg create mode 100755 assets/configs/classes/level4.cfg create mode 100755 assets/configs/classes/spectator.cfg create mode 100755 assets/models/buildables/acid_tube/animation.cfg create mode 100755 assets/models/buildables/barricade/animation.cfg create mode 100755 assets/models/buildables/medistat/animation.cfg create mode 100755 assets/models/buildables/mgturret/animation.cfg create mode 100755 assets/models/buildables/repeater/animation.cfg create mode 100755 assets/models/buildables/tesla/animation.cfg create mode 100755 assets/models/players/human_base/locdamage.cfg create mode 100755 assets/models/players/human_bsuit/locdamage.cfg create mode 100755 assets/models/players/level1/animation.cfg create mode 100755 assets/models/weapons/abuild/weapon.cfg create mode 100755 assets/models/weapons/abuildupg/weapon.cfg create mode 100755 assets/models/weapons/lcannon/weapon.cfg create mode 100755 assets/models/weapons/level0/weapon.cfg create mode 100755 assets/models/weapons/level1/weapon.cfg create mode 100755 assets/models/weapons/level1upg/weapon.cfg create mode 100755 assets/models/weapons/level2/weapon.cfg create mode 100755 assets/models/weapons/level2upg/weapon.cfg create mode 100755 assets/models/weapons/level3/weapon.cfg create mode 100755 assets/models/weapons/level3upg/weapon.cfg create mode 100755 assets/models/weapons/level4/weapon.cfg create mode 100755 assets/models/weapons/mdriver/weapon.cfg create mode 100755 assets/models/weapons/prifle/weapon.cfg create mode 100755 assets/models/weapons/psaw/weapon.cfg create mode 100755 assets/scripts/crosshairs.shader create mode 100755 assets/scripts/mdriver.trail create mode 100755 assets/scripts/misc.particle create mode 100755 assets/scripts/ui.shader create mode 100755 assets/scripts/weapons.particle create mode 100755 assets/scripts/weapons.shader create mode 100755 assets/sound/buildables/barricade/sound.cfg create mode 100755 assets/ui/assets/alien/buildstat.cfg create mode 100755 assets/ui/assets/human/buildstat.cfg create mode 100755 assets/ui/connect.menu create mode 100755 assets/ui/createfavorite.menu create mode 100755 assets/ui/createserver.menu create mode 100755 assets/ui/demo.menu create mode 100755 assets/ui/download.menu create mode 100755 assets/ui/drop.menu create mode 100755 assets/ui/error.menu create mode 100755 assets/ui/findplayer.menu create mode 100755 assets/ui/help.txt create mode 100755 assets/ui/hud.txt create mode 100755 assets/ui/ingame.menu create mode 100755 assets/ui/ingame.txt create mode 100755 assets/ui/ingame_game.menu create mode 100755 assets/ui/ingame_help.menu create mode 100755 assets/ui/ingame_leave.menu create mode 100755 assets/ui/ingame_options.menu create mode 100755 assets/ui/joinserver.menu create mode 100755 assets/ui/loading.menu create mode 100755 assets/ui/main.menu create mode 100755 assets/ui/menudef.h create mode 100755 assets/ui/menus.txt create mode 100755 assets/ui/mod.menu create mode 100755 assets/ui/news.menu create mode 100755 assets/ui/options.menu create mode 100755 assets/ui/password.menu create mode 100755 assets/ui/quit.menu create mode 100755 assets/ui/quitcredit.menu create mode 100755 assets/ui/say.menu create mode 100755 assets/ui/serverinfo.menu create mode 100755 assets/ui/teamscore.menu create mode 100755 assets/ui/tremulous.txt create mode 100755 assets/ui/tremulous_alien_builder_hud.menu create mode 100755 assets/ui/tremulous_alien_common_hud.h create mode 100755 assets/ui/tremulous_alien_general_hud.menu create mode 100755 assets/ui/tremulous_alienbuild.menu create mode 100755 assets/ui/tremulous_alienclass.menu create mode 100755 assets/ui/tremulous_aliendialogs.menu create mode 100755 assets/ui/tremulous_alienupgrade.menu create mode 100755 assets/ui/tremulous_common_hud.h create mode 100755 assets/ui/tremulous_default_hud.menu create mode 100755 assets/ui/tremulous_dialogs.menu create mode 100755 assets/ui/tremulous_human_hud.menu create mode 100755 assets/ui/tremulous_humanarmoury.menu create mode 100755 assets/ui/tremulous_humanbuild.menu create mode 100755 assets/ui/tremulous_humandialogs.menu create mode 100755 assets/ui/tremulous_humanitem.menu create mode 100755 assets/ui/tremulous_teamselect.menu create mode 100755 cross-make-mingw.sh create mode 100755 make-macosx-ub.sh create mode 100755 misc/SLA-dmg.sh create mode 100755 misc/Tremulous.icns create mode 100755 misc/entities.def create mode 100755 misc/manual.lyx create mode 100755 misc/merge-ioq3-into-trem.sh create mode 100755 misc/msvc/tremulous.sln create mode 100755 misc/msvc/tremulous.vcproj create mode 100755 misc/server.cfg create mode 100755 misc/tremulous.ico create mode 100755 misc/tremulous.xpm create mode 100644 src/AL/VERSION create mode 100644 src/AL/al.h create mode 100644 src/AL/alc.h create mode 100644 src/AL/alctypes.h create mode 100644 src/AL/altypes.h create mode 100644 src/AL/alut.h create mode 100644 src/SDL12/include/SDL.h create mode 100644 src/SDL12/include/SDL_active.h create mode 100644 src/SDL12/include/SDL_audio.h create mode 100644 src/SDL12/include/SDL_byteorder.h create mode 100644 src/SDL12/include/SDL_cdrom.h create mode 100644 src/SDL12/include/SDL_config.h create mode 100644 src/SDL12/include/SDL_config_amiga.h create mode 100644 src/SDL12/include/SDL_config_dreamcast.h create mode 100644 src/SDL12/include/SDL_config_macos.h create mode 100644 src/SDL12/include/SDL_config_macosx.h create mode 100644 src/SDL12/include/SDL_config_minimal.h create mode 100644 src/SDL12/include/SDL_config_nds.h create mode 100644 src/SDL12/include/SDL_config_os2.h create mode 100644 src/SDL12/include/SDL_config_symbian.h create mode 100644 src/SDL12/include/SDL_config_win32.h create mode 100644 src/SDL12/include/SDL_copying.h create mode 100644 src/SDL12/include/SDL_cpuinfo.h create mode 100644 src/SDL12/include/SDL_endian.h create mode 100644 src/SDL12/include/SDL_error.h create mode 100644 src/SDL12/include/SDL_events.h create mode 100644 src/SDL12/include/SDL_getenv.h create mode 100644 src/SDL12/include/SDL_joystick.h create mode 100644 src/SDL12/include/SDL_keyboard.h create mode 100644 src/SDL12/include/SDL_keysym.h create mode 100644 src/SDL12/include/SDL_loadso.h create mode 100644 src/SDL12/include/SDL_main.h create mode 100644 src/SDL12/include/SDL_mouse.h create mode 100644 src/SDL12/include/SDL_mutex.h create mode 100644 src/SDL12/include/SDL_name.h create mode 100644 src/SDL12/include/SDL_opengl.h create mode 100644 src/SDL12/include/SDL_platform.h create mode 100644 src/SDL12/include/SDL_quit.h create mode 100644 src/SDL12/include/SDL_rwops.h create mode 100644 src/SDL12/include/SDL_stdinc.h create mode 100644 src/SDL12/include/SDL_syswm.h create mode 100644 src/SDL12/include/SDL_thread.h create mode 100644 src/SDL12/include/SDL_timer.h create mode 100644 src/SDL12/include/SDL_types.h create mode 100644 src/SDL12/include/SDL_version.h create mode 100644 src/SDL12/include/SDL_video.h create mode 100644 src/SDL12/include/begin_code.h create mode 100644 src/SDL12/include/close_code.h create mode 100644 src/asm/ftola.s create mode 100644 src/asm/matha.s create mode 100644 src/asm/qasm.h create mode 100644 src/asm/snapvectora.s create mode 100644 src/asm/snd_mixa.s create mode 100644 src/cgame/cg_animation.c create mode 100644 src/cgame/cg_animmapobj.c create mode 100644 src/cgame/cg_attachment.c create mode 100644 src/cgame/cg_buildable.c create mode 100644 src/cgame/cg_consolecmds.c create mode 100644 src/cgame/cg_draw.c create mode 100644 src/cgame/cg_drawtools.c create mode 100644 src/cgame/cg_ents.c create mode 100644 src/cgame/cg_event.c create mode 100644 src/cgame/cg_event.c.orig create mode 100644 src/cgame/cg_local.h create mode 100644 src/cgame/cg_main.c create mode 100644 src/cgame/cg_main.c.orig create mode 100644 src/cgame/cg_marks.c create mode 100644 src/cgame/cg_particles.c create mode 100644 src/cgame/cg_players.c create mode 100644 src/cgame/cg_playerstate.c create mode 100644 src/cgame/cg_predict.c create mode 100644 src/cgame/cg_public.h create mode 100644 src/cgame/cg_scanner.c create mode 100644 src/cgame/cg_servercmds.c create mode 100644 src/cgame/cg_snapshot.c create mode 100644 src/cgame/cg_syscalls.asm create mode 100644 src/cgame/cg_syscalls.c create mode 100644 src/cgame/cg_trails.c create mode 100644 src/cgame/cg_tutorial.c create mode 100644 src/cgame/cg_view.c create mode 100644 src/cgame/cg_weapons.c create mode 100644 src/client/cl_avi.c create mode 100644 src/client/cl_cgame.c create mode 100644 src/client/cl_cin.c create mode 100644 src/client/cl_console.c create mode 100644 src/client/cl_curl.c create mode 100644 src/client/cl_curl.h create mode 100644 src/client/cl_input.c create mode 100644 src/client/cl_keys.c create mode 100644 src/client/cl_main.c create mode 100644 src/client/cl_net_chan.c create mode 100644 src/client/cl_parse.c create mode 100644 src/client/cl_scrn.c create mode 100644 src/client/cl_ui.c create mode 100644 src/client/client.h create mode 100644 src/client/keycodes.h create mode 100644 src/client/keys.h create mode 100644 src/client/libmumblelink.c create mode 100644 src/client/libmumblelink.h create mode 100644 src/client/qal.c create mode 100644 src/client/qal.h create mode 100644 src/client/snd_adpcm.c create mode 100644 src/client/snd_codec.c create mode 100644 src/client/snd_codec.h create mode 100644 src/client/snd_codec_ogg.c create mode 100644 src/client/snd_codec_wav.c create mode 100644 src/client/snd_dma.c create mode 100644 src/client/snd_local.h create mode 100644 src/client/snd_main.c create mode 100644 src/client/snd_mem.c create mode 100644 src/client/snd_mix.c create mode 100644 src/client/snd_openal.c create mode 100644 src/client/snd_public.h create mode 100644 src/client/snd_wavelet.c create mode 100644 src/game/bg_alloc.c create mode 100644 src/game/bg_lib.c create mode 100644 src/game/bg_lib.h create mode 100644 src/game/bg_local.h create mode 100644 src/game/bg_misc.c create mode 100644 src/game/bg_pmove.c create mode 100644 src/game/bg_public.h create mode 100644 src/game/bg_slidemove.c create mode 100644 src/game/bg_voice.c create mode 100644 src/game/g_active.c create mode 100644 src/game/g_active.c.orig create mode 100644 src/game/g_admin.c create mode 100644 src/game/g_admin.h create mode 100644 src/game/g_buildable.c create mode 100644 src/game/g_client.c create mode 100644 src/game/g_client.c.orig create mode 100644 src/game/g_cmds.c create mode 100644 src/game/g_cmds.c.orig create mode 100644 src/game/g_combat.c create mode 100644 src/game/g_combat.c.orig create mode 100644 src/game/g_local.h create mode 100644 src/game/g_main.c create mode 100644 src/game/g_main.c.orig create mode 100644 src/game/g_maprotation.c create mode 100644 src/game/g_misc.c create mode 100644 src/game/g_missile.c create mode 100644 src/game/g_mover.c create mode 100644 src/game/g_namelog.c create mode 100644 src/game/g_physics.c create mode 100644 src/game/g_public.h create mode 100644 src/game/g_session.c create mode 100644 src/game/g_spawn.c create mode 100644 src/game/g_svcmds.c create mode 100644 src/game/g_syscalls.asm create mode 100644 src/game/g_syscalls.c create mode 100644 src/game/g_target.c create mode 100644 src/game/g_team.c create mode 100644 src/game/g_trigger.c create mode 100644 src/game/g_utils.c create mode 100644 src/game/g_weapon.c create mode 100644 src/game/tremulous.h create mode 100644 src/jpeg-8c/README create mode 100644 src/jpeg-8c/jaricom.c create mode 100644 src/jpeg-8c/jcapimin.c create mode 100644 src/jpeg-8c/jcapistd.c create mode 100644 src/jpeg-8c/jcarith.c create mode 100644 src/jpeg-8c/jccoefct.c create mode 100644 src/jpeg-8c/jccolor.c create mode 100644 src/jpeg-8c/jcdctmgr.c create mode 100644 src/jpeg-8c/jchuff.c create mode 100644 src/jpeg-8c/jcinit.c create mode 100644 src/jpeg-8c/jcmainct.c create mode 100644 src/jpeg-8c/jcmarker.c create mode 100644 src/jpeg-8c/jcmaster.c create mode 100644 src/jpeg-8c/jcomapi.c create mode 100644 src/jpeg-8c/jconfig.h create mode 100644 src/jpeg-8c/jcparam.c create mode 100644 src/jpeg-8c/jcprepct.c create mode 100644 src/jpeg-8c/jcsample.c create mode 100644 src/jpeg-8c/jctrans.c create mode 100644 src/jpeg-8c/jdapimin.c create mode 100644 src/jpeg-8c/jdapistd.c create mode 100644 src/jpeg-8c/jdarith.c create mode 100644 src/jpeg-8c/jdatadst.c create mode 100644 src/jpeg-8c/jdatasrc.c create mode 100644 src/jpeg-8c/jdcoefct.c create mode 100644 src/jpeg-8c/jdcolor.c create mode 100644 src/jpeg-8c/jdct.h create mode 100644 src/jpeg-8c/jddctmgr.c create mode 100644 src/jpeg-8c/jdhuff.c create mode 100644 src/jpeg-8c/jdinput.c create mode 100644 src/jpeg-8c/jdmainct.c create mode 100644 src/jpeg-8c/jdmarker.c create mode 100644 src/jpeg-8c/jdmaster.c create mode 100644 src/jpeg-8c/jdmerge.c create mode 100644 src/jpeg-8c/jdpostct.c create mode 100644 src/jpeg-8c/jdsample.c create mode 100644 src/jpeg-8c/jdtrans.c create mode 100644 src/jpeg-8c/jerror.c create mode 100644 src/jpeg-8c/jerror.h create mode 100644 src/jpeg-8c/jfdctflt.c create mode 100644 src/jpeg-8c/jfdctfst.c create mode 100644 src/jpeg-8c/jfdctint.c create mode 100644 src/jpeg-8c/jidctflt.c create mode 100644 src/jpeg-8c/jidctfst.c create mode 100644 src/jpeg-8c/jidctint.c create mode 100644 src/jpeg-8c/jinclude.h create mode 100644 src/jpeg-8c/jmemmgr.c create mode 100644 src/jpeg-8c/jmemnobs.c create mode 100644 src/jpeg-8c/jmemsys.h create mode 100644 src/jpeg-8c/jmorecfg.h create mode 100644 src/jpeg-8c/jpegint.h create mode 100644 src/jpeg-8c/jpeglib.h create mode 100644 src/jpeg-8c/jquant1.c create mode 100644 src/jpeg-8c/jquant2.c create mode 100644 src/jpeg-8c/jutils.c create mode 100644 src/jpeg-8c/jversion.h create mode 100644 src/libcurl/curl/curl.h create mode 100644 src/libcurl/curl/curlver.h create mode 100644 src/libcurl/curl/easy.h create mode 100644 src/libcurl/curl/mprintf.h create mode 100644 src/libcurl/curl/multi.h create mode 100644 src/libcurl/curl/stdcheaders.h create mode 100644 src/libcurl/curl/types.h create mode 100755 src/libs/macosx/libSDL-1.2.0.dylib create mode 100644 src/libs/macosx/libSDLmain.a create mode 100644 src/libs/win32/libSDL.dll.a create mode 100644 src/libs/win32/libSDL.la create mode 100644 src/libs/win32/libSDLmain.a create mode 100644 src/libs/win32/libcurl.a create mode 100644 src/libspeex/_kiss_fft_guts.h create mode 100644 src/libspeex/arch.h create mode 100644 src/libspeex/bits.c create mode 100644 src/libspeex/buffer.c create mode 100644 src/libspeex/cb_search.c create mode 100644 src/libspeex/cb_search.h create mode 100644 src/libspeex/cb_search_arm4.h create mode 100644 src/libspeex/cb_search_bfin.h create mode 100644 src/libspeex/cb_search_sse.h create mode 100644 src/libspeex/config.h create mode 100644 src/libspeex/echo_diagnostic.m create mode 100644 src/libspeex/exc_10_16_table.c create mode 100644 src/libspeex/exc_10_32_table.c create mode 100644 src/libspeex/exc_20_32_table.c create mode 100644 src/libspeex/exc_5_256_table.c create mode 100644 src/libspeex/exc_5_64_table.c create mode 100644 src/libspeex/exc_8_128_table.c create mode 100644 src/libspeex/fftwrap.c create mode 100644 src/libspeex/fftwrap.h create mode 100644 src/libspeex/filterbank.c create mode 100644 src/libspeex/filterbank.h create mode 100644 src/libspeex/filters.c create mode 100644 src/libspeex/filters.h create mode 100644 src/libspeex/filters_arm4.h create mode 100644 src/libspeex/filters_bfin.h create mode 100644 src/libspeex/filters_sse.h create mode 100644 src/libspeex/fixed_arm4.h create mode 100644 src/libspeex/fixed_arm5e.h create mode 100644 src/libspeex/fixed_bfin.h create mode 100644 src/libspeex/fixed_debug.h create mode 100644 src/libspeex/fixed_generic.h create mode 100644 src/libspeex/gain_table.c create mode 100644 src/libspeex/gain_table_lbr.c create mode 100644 src/libspeex/hexc_10_32_table.c create mode 100644 src/libspeex/hexc_table.c create mode 100644 src/libspeex/high_lsp_tables.c create mode 100644 src/libspeex/include/speex/speex.h create mode 100644 src/libspeex/include/speex/speex_bits.h create mode 100644 src/libspeex/include/speex/speex_buffer.h create mode 100644 src/libspeex/include/speex/speex_callbacks.h create mode 100644 src/libspeex/include/speex/speex_config_types.h create mode 100644 src/libspeex/include/speex/speex_echo.h create mode 100644 src/libspeex/include/speex/speex_header.h create mode 100644 src/libspeex/include/speex/speex_jitter.h create mode 100644 src/libspeex/include/speex/speex_preprocess.h create mode 100644 src/libspeex/include/speex/speex_resampler.h create mode 100644 src/libspeex/include/speex/speex_stereo.h create mode 100644 src/libspeex/include/speex/speex_types.h create mode 100644 src/libspeex/jitter.c create mode 100644 src/libspeex/kiss_fft.c create mode 100644 src/libspeex/kiss_fft.h create mode 100644 src/libspeex/kiss_fftr.c create mode 100644 src/libspeex/kiss_fftr.h create mode 100644 src/libspeex/lpc.c create mode 100644 src/libspeex/lpc.h create mode 100644 src/libspeex/lpc_bfin.h create mode 100644 src/libspeex/lsp.c create mode 100644 src/libspeex/lsp.h create mode 100644 src/libspeex/lsp_bfin.h create mode 100644 src/libspeex/lsp_tables_nb.c create mode 100644 src/libspeex/ltp.c create mode 100644 src/libspeex/ltp.h create mode 100644 src/libspeex/ltp_arm4.h create mode 100644 src/libspeex/ltp_bfin.h create mode 100644 src/libspeex/ltp_sse.h create mode 100644 src/libspeex/math_approx.h create mode 100644 src/libspeex/mdf.c create mode 100644 src/libspeex/misc_bfin.h create mode 100644 src/libspeex/modes.c create mode 100644 src/libspeex/modes.h create mode 100644 src/libspeex/modes_wb.c create mode 100644 src/libspeex/nb_celp.c create mode 100644 src/libspeex/nb_celp.h create mode 100644 src/libspeex/os_support.h create mode 100644 src/libspeex/preprocess.c create mode 100644 src/libspeex/pseudofloat.h create mode 100644 src/libspeex/quant_lsp.c create mode 100644 src/libspeex/quant_lsp.h create mode 100644 src/libspeex/quant_lsp_bfin.h create mode 100644 src/libspeex/resample.c create mode 100644 src/libspeex/sb_celp.c create mode 100644 src/libspeex/sb_celp.h create mode 100644 src/libspeex/smallft.c create mode 100644 src/libspeex/smallft.h create mode 100644 src/libspeex/speex.c create mode 100644 src/libspeex/speex_callbacks.c create mode 100644 src/libspeex/speex_header.c create mode 100644 src/libspeex/stack_alloc.h create mode 100644 src/libspeex/stereo.c create mode 100644 src/libspeex/testdenoise.c create mode 100644 src/libspeex/testecho.c create mode 100644 src/libspeex/testenc.c create mode 100644 src/libspeex/testenc_uwb.c create mode 100644 src/libspeex/testenc_wb.c create mode 100644 src/libspeex/vbr.c create mode 100644 src/libspeex/vbr.h create mode 100644 src/libspeex/vorbis_psy.h create mode 100644 src/libspeex/vq.c create mode 100644 src/libspeex/vq.h create mode 100644 src/libspeex/vq_arm4.h create mode 100644 src/libspeex/vq_bfin.h create mode 100644 src/libspeex/vq_sse.h create mode 100644 src/libspeex/window.c create mode 100644 src/master/Makefile create mode 100644 src/master/common.h create mode 100644 src/master/master.c create mode 100644 src/master/messages.c create mode 100644 src/master/messages.h create mode 100644 src/master/servers.c create mode 100644 src/master/servers.h create mode 100644 src/master/stats.c create mode 100644 src/null/mac_net.c create mode 100644 src/null/null_client.c create mode 100644 src/null/null_glimp.c create mode 100644 src/null/null_input.c create mode 100644 src/null/null_main.c create mode 100644 src/null/null_net.c create mode 100644 src/null/null_snddma.c create mode 100644 src/qcommon/cm_load.c create mode 100644 src/qcommon/cm_local.h create mode 100644 src/qcommon/cm_patch.c create mode 100644 src/qcommon/cm_patch.h create mode 100644 src/qcommon/cm_polylib.c create mode 100644 src/qcommon/cm_polylib.h create mode 100644 src/qcommon/cm_public.h create mode 100644 src/qcommon/cm_test.c create mode 100644 src/qcommon/cm_trace.c create mode 100644 src/qcommon/cmd.c create mode 100644 src/qcommon/common.c create mode 100644 src/qcommon/cvar.c create mode 100644 src/qcommon/files.c create mode 100644 src/qcommon/huffman.c create mode 100644 src/qcommon/ioapi.c create mode 100644 src/qcommon/ioapi.h create mode 100644 src/qcommon/md4.c create mode 100644 src/qcommon/md5.c create mode 100644 src/qcommon/msg.c create mode 100644 src/qcommon/net_chan.c create mode 100644 src/qcommon/net_ip.c create mode 100644 src/qcommon/parse.c create mode 100644 src/qcommon/puff.c create mode 100644 src/qcommon/puff.h create mode 100644 src/qcommon/q_math.c create mode 100644 src/qcommon/q_platform.h create mode 100644 src/qcommon/q_shared.c create mode 100644 src/qcommon/q_shared.h create mode 100644 src/qcommon/qcommon.h create mode 100644 src/qcommon/qfiles.h create mode 100644 src/qcommon/surfaceflags.h create mode 100644 src/qcommon/unzip.c create mode 100644 src/qcommon/unzip.h create mode 100644 src/qcommon/vm.c create mode 100644 src/qcommon/vm_interpreted.c create mode 100644 src/qcommon/vm_local.h create mode 100644 src/qcommon/vm_none.c create mode 100644 src/qcommon/vm_powerpc.c create mode 100644 src/qcommon/vm_powerpc_asm.c create mode 100644 src/qcommon/vm_powerpc_asm.h create mode 100644 src/qcommon/vm_sparc.c create mode 100644 src/qcommon/vm_sparc.h create mode 100644 src/qcommon/vm_x86.c create mode 100644 src/qcommon/vm_x86_64.c create mode 100644 src/qcommon/vm_x86_64_assembler.c create mode 100644 src/renderer/qgl.h create mode 100644 src/renderer/tr_animation.c create mode 100644 src/renderer/tr_backend.c create mode 100644 src/renderer/tr_bsp.c create mode 100644 src/renderer/tr_cmds.c create mode 100644 src/renderer/tr_curve.c create mode 100644 src/renderer/tr_flares.c create mode 100644 src/renderer/tr_font.c create mode 100644 src/renderer/tr_image.c create mode 100644 src/renderer/tr_image_bmp.c create mode 100644 src/renderer/tr_image_jpg.c create mode 100644 src/renderer/tr_image_pcx.c create mode 100644 src/renderer/tr_image_png.c create mode 100644 src/renderer/tr_image_tga.c create mode 100644 src/renderer/tr_init.c create mode 100644 src/renderer/tr_light.c create mode 100644 src/renderer/tr_local.h create mode 100644 src/renderer/tr_main.c create mode 100644 src/renderer/tr_marks.c create mode 100644 src/renderer/tr_mesh.c create mode 100644 src/renderer/tr_model.c create mode 100644 src/renderer/tr_noise.c create mode 100644 src/renderer/tr_public.h create mode 100644 src/renderer/tr_scene.c create mode 100644 src/renderer/tr_shade.c create mode 100644 src/renderer/tr_shade_calc.c create mode 100644 src/renderer/tr_shader.c create mode 100644 src/renderer/tr_shadows.c create mode 100644 src/renderer/tr_sky.c create mode 100644 src/renderer/tr_surface.c create mode 100644 src/renderer/tr_types.h create mode 100644 src/renderer/tr_world.c create mode 100644 src/sdl/sdl_gamma.c create mode 100644 src/sdl/sdl_glimp.c create mode 100644 src/sdl/sdl_icon.h create mode 100644 src/sdl/sdl_input.c create mode 100644 src/sdl/sdl_snd.c create mode 100644 src/server/server.h create mode 100644 src/server/sv_ccmds.c create mode 100644 src/server/sv_client.c create mode 100644 src/server/sv_game.c create mode 100644 src/server/sv_init.c create mode 100644 src/server/sv_main.c create mode 100644 src/server/sv_net_chan.c create mode 100644 src/server/sv_snapshot.c create mode 100644 src/server/sv_world.c create mode 100644 src/sys/con_log.c create mode 100644 src/sys/con_passive.c create mode 100644 src/sys/con_tty.c create mode 100644 src/sys/con_win32.c create mode 100644 src/sys/sys_loadlib.h create mode 100644 src/sys/sys_local.h create mode 100644 src/sys/sys_main.c create mode 100644 src/sys/sys_osx.m create mode 100644 src/sys/sys_unix.c create mode 100644 src/sys/sys_win32.c create mode 100644 src/sys/win_resource.h create mode 100644 src/sys/win_resource.rc create mode 100644 src/tools/asm/README.Id create mode 100644 src/tools/asm/cmdlib.c create mode 100644 src/tools/asm/cmdlib.h create mode 100644 src/tools/asm/lib.txt create mode 100644 src/tools/asm/mathlib.h create mode 100644 src/tools/asm/notes.txt create mode 100644 src/tools/asm/ops.txt create mode 100644 src/tools/asm/opstrings.h create mode 100644 src/tools/asm/q3asm.c create mode 100644 src/tools/lcc/COPYRIGHT create mode 100644 src/tools/lcc/LOG create mode 100644 src/tools/lcc/README create mode 100644 src/tools/lcc/README.id create mode 100644 src/tools/lcc/cpp/cpp.c create mode 100644 src/tools/lcc/cpp/cpp.h create mode 100644 src/tools/lcc/cpp/eval.c create mode 100644 src/tools/lcc/cpp/getopt.c create mode 100644 src/tools/lcc/cpp/hideset.c create mode 100644 src/tools/lcc/cpp/include.c create mode 100644 src/tools/lcc/cpp/lex.c create mode 100644 src/tools/lcc/cpp/macro.c create mode 100644 src/tools/lcc/cpp/nlist.c create mode 100644 src/tools/lcc/cpp/tokens.c create mode 100644 src/tools/lcc/cpp/unix.c create mode 100644 src/tools/lcc/doc/4.html create mode 100644 src/tools/lcc/doc/bprint.1 create mode 100644 src/tools/lcc/doc/bprint.pdf create mode 100644 src/tools/lcc/doc/install.html create mode 100644 src/tools/lcc/doc/lcc.1 create mode 100644 src/tools/lcc/doc/lcc.pdf create mode 100644 src/tools/lcc/etc/bytecode.c create mode 100644 src/tools/lcc/etc/lcc.c create mode 100644 src/tools/lcc/lburg/gram.c create mode 100644 src/tools/lcc/lburg/gram.y create mode 100644 src/tools/lcc/lburg/lburg.1 create mode 100644 src/tools/lcc/lburg/lburg.c create mode 100644 src/tools/lcc/lburg/lburg.h create mode 100644 src/tools/lcc/src/alloc.c create mode 100644 src/tools/lcc/src/bind.c create mode 100644 src/tools/lcc/src/bytecode.c create mode 100644 src/tools/lcc/src/c.h create mode 100644 src/tools/lcc/src/config.h create mode 100644 src/tools/lcc/src/dag.c create mode 100644 src/tools/lcc/src/dagcheck.md create mode 100644 src/tools/lcc/src/decl.c create mode 100644 src/tools/lcc/src/enode.c create mode 100644 src/tools/lcc/src/error.c create mode 100644 src/tools/lcc/src/event.c create mode 100644 src/tools/lcc/src/expr.c create mode 100644 src/tools/lcc/src/gen.c create mode 100644 src/tools/lcc/src/init.c create mode 100644 src/tools/lcc/src/inits.c create mode 100644 src/tools/lcc/src/input.c create mode 100644 src/tools/lcc/src/lex.c create mode 100644 src/tools/lcc/src/list.c create mode 100644 src/tools/lcc/src/main.c create mode 100644 src/tools/lcc/src/null.c create mode 100644 src/tools/lcc/src/output.c create mode 100644 src/tools/lcc/src/prof.c create mode 100644 src/tools/lcc/src/profio.c create mode 100644 src/tools/lcc/src/simp.c create mode 100644 src/tools/lcc/src/stmt.c create mode 100644 src/tools/lcc/src/string.c create mode 100644 src/tools/lcc/src/sym.c create mode 100644 src/tools/lcc/src/symbolic.c create mode 100644 src/tools/lcc/src/token.h create mode 100644 src/tools/lcc/src/trace.c create mode 100644 src/tools/lcc/src/tree.c create mode 100644 src/tools/lcc/src/types.c create mode 100644 src/ui/ui_atoms.c create mode 100644 src/ui/ui_gameinfo.c create mode 100644 src/ui/ui_local.h create mode 100644 src/ui/ui_main.c create mode 100644 src/ui/ui_public.h create mode 100644 src/ui/ui_shared.c create mode 100644 src/ui/ui_shared.h create mode 100644 src/ui/ui_syscalls.asm create mode 100644 src/ui/ui_syscalls.c create mode 100644 src/zlib/adler32.c create mode 100644 src/zlib/crc32.c create mode 100644 src/zlib/crc32.h create mode 100644 src/zlib/inffast.c create mode 100644 src/zlib/inffast.h create mode 100644 src/zlib/inffixed.h create mode 100644 src/zlib/inflate.c create mode 100644 src/zlib/inflate.h create mode 100644 src/zlib/inftrees.c create mode 100644 src/zlib/inftrees.h create mode 100644 src/zlib/zconf.h create mode 100644 src/zlib/zlib.h create mode 100644 src/zlib/zutil.c create mode 100644 src/zlib/zutil.h diff --git a/CC_ b/CC_ new file mode 100755 index 0000000..92e4148 --- /dev/null +++ b/CC_ @@ -0,0 +1,229 @@ + Creative_Commons + Creative Commons Legal Code + Attribution-ShareAlike 2.5 +CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL +SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT +RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. +CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND +DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE. +License +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE +COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY +COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS +AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE +BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS YOU THE RIGHTS +CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND +CONDITIONS. +1. Definitions + + a. "Collective Work" means a work, such as a periodical issue, anthology or + encyclopedia, in which the Work in its entirety in unmodified form, along + with a number of other contributions, constituting separate and + independent works in themselves, are assembled into a collective whole. A + work that constitutes a Collective Work will not be considered a + Derivative Work (as defined below) for the purposes of this License. + b. "Derivative Work" means a work based upon the Work or upon the Work and + other pre-existing works, such as a translation, musical arrangement, + dramatization, fictionalization, motion picture version, sound recording, + art reproduction, abridgment, condensation, or any other form in which the + Work may be recast, transformed, or adapted, except that a work that + constitutes a Collective Work will not be considered a Derivative Work for + the purpose of this License. For the avoidance of doubt, where the Work is + a musical composition or sound recording, the synchronization of the Work + in timed-relation with a moving image ("synching") will be considered a + Derivative Work for the purpose of this License. + c. "Licensor" means the individual or entity that offers the Work under the + terms of this License. + d. "Original Author" means the individual or entity who created the Work. + e. "Work" means the copyrightable work of authorship offered under the terms + of this License. + f. "You" means an individual or entity exercising rights under this License + who has not previously violated the terms of this License with respect to + the Work, or who has received express permission from the Licensor to + exercise rights under this License despite a previous violation. + g. "License Elements" means the following high-level license attributes as + selected by Licensor and indicated in the title of this License: + Attribution, ShareAlike. + +2. Fair Use Rights. Nothing in this license is intended to reduce, limit, or +restrict any rights arising from fair use, first sale or other limitations on +the exclusive rights of the copyright owner under copyright law or other +applicable laws. +3. License Grant. Subject to the terms and conditions of this License, Licensor +hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the +duration of the applicable copyright) license to exercise the rights in the +Work as stated below: + + a. to reproduce the Work, to incorporate the Work into one or more Collective + Works, and to reproduce the Work as incorporated in the Collective Works; + b. to create and reproduce Derivative Works; + c. to distribute copies or phonorecords of, display publicly, perform + publicly, and perform publicly by means of a digital audio transmission + the Work including as incorporated in Collective Works; + d. to distribute copies or phonorecords of, display publicly, perform + publicly, and perform publicly by means of a digital audio transmission + Derivative Works. + e. For the avoidance of doubt, where the work is a musical composition: + + i. Performance Royalties Under Blanket Licenses. Licensor waives the + exclusive right to collect, whether individually or via a performance + rights society (e.g. ASCAP, BMI, SESAC), royalties for the public + performance or public digital performance (e.g. webcast) of the Work. + ii. Mechanical Rights and Statutory Royalties. Licensor waives the + exclusive right to collect, whether individually or via a music + rights society or designated agent (e.g. Harry Fox Agency), royalties + for any phonorecord You create from the Work ("cover version") and + distribute, subject to the compulsory license created by 17 USC + Section 115 of the US Copyright Act (or the equivalent in other + jurisdictions). + + f. Webcasting Rights and Statutory Royalties. For the avoidance of doubt, + where the Work is a sound recording, Licensor waives the exclusive right + to collect, whether individually or via a performance-rights society (e.g. + SoundExchange), royalties for the public digital performance (e.g. + webcast) of the Work, subject to the compulsory license created by 17 USC + Section 114 of the US Copyright Act (or the equivalent in other + jurisdictions). + +The above rights may be exercised in all media and formats whether now known or +hereafter devised. The above rights include the right to make such +modifications as are technically necessary to exercise the rights in other +media and formats. All rights not expressly granted by Licensor are hereby +reserved. +4. Restrictions.The license granted in Section 3 above is expressly made +subject to and limited by the following restrictions: + + a. You may distribute, publicly display, publicly perform, or publicly + digitally perform the Work only under the terms of this License, and You + must include a copy of, or the Uniform Resource Identifier for, this + License with every copy or phonorecord of the Work You distribute, + publicly display, publicly perform, or publicly digitally perform. You may + not offer or impose any terms on the Work that alter or restrict the terms + of this License or the recipients' exercise of the rights granted + hereunder. You may not sublicense the Work. You must keep intact all + notices that refer to this License and to the disclaimer of warranties. + You may not distribute, publicly display, publicly perform, or publicly + digitally perform the Work with any technological measures that control + access or use of the Work in a manner inconsistent with the terms of this + License Agreement. The above applies to the Work as incorporated in a + Collective Work, but this does not require the Collective Work apart from + the Work itself to be made subject to the terms of this License. If You + create a Collective Work, upon notice from any Licensor You must, to the + extent practicable, remove from the Collective Work any credit as required + by clause 4(c), as requested. If You create a Derivative Work, upon notice + from any Licensor You must, to the extent practicable, remove from the + Derivative Work any credit as required by clause 4(c), as requested. + b. You may distribute, publicly display, publicly perform, or publicly + digitally perform a Derivative Work only under the terms of this License, + a later version of this License with the same License Elements as this + License, or a Creative Commons iCommons license that contains the same + License Elements as this License (e.g. Attribution-ShareAlike 2.5 Japan). + You must include a copy of, or the Uniform Resource Identifier for, this + License or other license specified in the previous sentence with every + copy or phonorecord of each Derivative Work You distribute, publicly + display, publicly perform, or publicly digitally perform. You may not + offer or impose any terms on the Derivative Works that alter or restrict + the terms of this License or the recipients' exercise of the rights + granted hereunder, and You must keep intact all notices that refer to this + License and to the disclaimer of warranties. You may not distribute, + publicly display, publicly perform, or publicly digitally perform the + Derivative Work with any technological measures that control access or use + of the Work in a manner inconsistent with the terms of this License + Agreement. The above applies to the Derivative Work as incorporated in a + Collective Work, but this does not require the Collective Work apart from + the Derivative Work itself to be made subject to the terms of this + License. + c. If you distribute, publicly display, publicly perform, or publicly + digitally perform the Work or any Derivative Works or Collective Works, + You must keep intact all copyright notices for the Work and provide, + reasonable to the medium or means You are utilizing: (i) the name of the + Original Author (or pseudonym, if applicable) if supplied, and/or (ii) if + the Original Author and/or Licensor designate another party or parties + (e.g. a sponsor institute, publishing entity, journal) for attribution in + Licensor's copyright notice, terms of service or by other reasonable + means, the name of such party or parties; the title of the Work if + supplied; to the extent reasonably practicable, the Uniform Resource + Identifier, if any, that Licensor specifies to be associated with the + Work, unless such URI does not refer to the copyright notice or licensing + information for the Work; and in the case of a Derivative Work, a credit + identifying the use of the Work in the Derivative Work (e.g., "French + translation of the Work by Original Author," or "Screenplay based on + original Work by Original Author"). Such credit may be implemented in any + reasonable manner; provided, however, that in the case of a Derivative + Work or Collective Work, at a minimum such credit will appear where any + other comparable authorship credit appears and in a manner at least as + prominent as such other comparable authorship credit. + +5. Representations, Warranties and Disclaimer +UNLESS OTHERWISE AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK +AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE +MATERIALS, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT +LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR +PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, +OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME +JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH +EXCLUSION MAY NOT APPLY TO YOU. +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN +NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, +INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS +LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. +7. Termination + + a. This License and the rights granted hereunder will terminate automatically + upon any breach by You of the terms of this License. Individuals or + entities who have received Derivative Works or Collective Works from You + under this License, however, will not have their licenses terminated + provided such individuals or entities remain in full compliance with those + licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of + this License. + b. Subject to the above terms and conditions, the license granted here is + perpetual (for the duration of the applicable copyright in the Work). + Notwithstanding the above, Licensor reserves the right to release the Work + under different license terms or to stop distributing the Work at any + time; provided, however that any such election will not serve to withdraw + this License (or any other license that has been, or is required to be, + granted under the terms of this License), and this License will continue + in full force and effect unless terminated as stated above. + +8. Miscellaneous + + a. Each time You distribute or publicly digitally perform the Work or a + Collective Work, the Licensor offers to the recipient a license to the + Work on the same terms and conditions as the license granted to You under + this License. + b. Each time You distribute or publicly digitally perform a Derivative Work, + Licensor offers to the recipient a license to the original Work on the + same terms and conditions as the license granted to You under this + License. + c. If any provision of this License is invalid or unenforceable under + applicable law, it shall not affect the validity or enforceability of the + remainder of the terms of this License, and without further action by the + parties to this agreement, such provision shall be reformed to the minimum + extent necessary to make such provision valid and enforceable. + d. No term or provision of this License shall be deemed waived and no breach + consented to unless such waiver or consent shall be in writing and signed + by the party to be charged with such waiver or consent. + e. This License constitutes the entire agreement between the parties with + respect to the Work licensed here. There are no understandings, agreements + or representations with respect to the Work not specified here. Licensor + shall not be bound by any additional provisions that may appear in any + communication from You. This License may not be modified without the + mutual written agreement of the Licensor and You. + +Creative Commons is not a party to this License, and makes no warranty +whatsoever in connection with the Work. Creative Commons will not be liable to +You or any party on any legal theory for any damages whatsoever, including +without limitation any general, special, incidental or consequential damages +arising in connection to this license. Notwithstanding the foregoing two (2) +sentences, if Creative Commons has expressly identified itself as the Licensor +hereunder, it shall have all rights and obligations of Licensor. +Except for the limited purpose of indicating to the public that the Work is +licensed under the CCPL, neither party will use the trademark "Creative +Commons" or any related trademark or logo of Creative Commons without the prior +written consent of Creative Commons. Any permitted use will be in compliance +with Creative Commons' then-current trademark usage guidelines, as may be +published on its website or otherwise made available upon request from time to +time. +Creative Commons may be contacted at http://creativecommons.org/. diff --git a/COPYING b/COPYING new file mode 100755 index 0000000..88fea84 --- /dev/null +++ b/COPYING @@ -0,0 +1,24 @@ +---------------------------------------------------------- Tremulous License --- + +Tremulous is licensed in two broadly separate sections: the code and the media. + +The code is licensed under the GNU GENERAL PUBLIC LICENSE. This license is +contained in full in the file named GPL. Please be aware of the exceptions to +this license as listed below. + +The media is licensed under the CREATIVE COMMONS ATTRIBUTION-SHAREALIKE 2.5 +LICENSE. Please read http://creativecommons.org/licenses/by-sa/2.5/ to learn +more about this license. The full license text is contained in the file named +CC. + + +---------------------------------------------------- Code License Exceptions --- + +The following files contain sections of code that are not licensed under the +GPL, but are nevertheless GPL compatible. The license text for these licenses +is contained within the files as listed. + + src/qcommon/unzip.c zlib license + src/game/bg_lib.c BSD license + src/client/snd_adpcm.c Stichting Mathematisch Centrum license + src/jpeg-6/* JPEG license diff --git a/ChangeLog b/ChangeLog new file mode 100755 index 0000000..9518bd1 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,175 @@ +1.1.0 +----- + + Feature/balance changes + ----------------------- + * Quick fullscreen changes + * Fancy autocompletion + * Client now sleeps when inactive + * Persistent console history + * Increase boost time to 30 seconds from 20 seconds + * Lcannon now has a minimum charge value + * Flamer damage down to 20 from 31 + * Zap repeat rate down to 1500ms from 2000ms + * Knockback from pouncing now 3 times as strong + * Demo state now displayed from cgame + * AVI video capture + * cl_autoRecordDemo + * Master server, based on dpmaster + * Changed defaults for r_picmip and r_textureMode + * Chat sounds differ depending on team + * New collision type, for improved light flares + * New pain blend effect + * Reduced Dragoon pounce range to 64 from 96 + * Dragoon pounce now incurs 400ms wait before other weapons may be used + * Trapper cost down to 8 from 10 + * Hovel is now free, but only one can be built + * Teslagen damage up to 9 from 7 + * Non locational damage does not apply locational armour anymore; instead it + averages the armour regions together + * Added target_alien_win and target_human_win + * Added worldspawn keys to disable specific game elements + * 3D particles + * Brass ejections now done via particle system + * static_tranform particle move type + * thirdPersonOnly particle and trail system property + * Abstract attachment system + * Scriptable trails system + + Bug fixes/development issues + ---------------------------- + * Fix to a server memory leak + * Fix to a server 100% CPU bug + * Delete key on *nix fixed + * Fixed lcannon charge storage exploit + * Fixed psaw/cgun inappropriate effects bug + * Maps on create server menu now sorted by name + * Fixed death by poison MOD s/antitox/medkit/ + * Fixed Marauders momentarily disappearing when wall jumping + * Fixed a potential crash bug involving the use of generic1 + * Fixed being able to build multiple coincident repeaters if there is no reactor + * Fixed incorrect message when invoking "buy ammo" with an energy weapon and no + reactor present + * Fixed invoking "reload" during a weapon reload causing an unnecessary reload + * Fixed aliens having the wrong blood colour when shot with a las gun + * Fixed hovel causing invisible builders + +1.0.2 +----- + + Feature/balance changes + ----------------------- + * Extended STATS report to include the times when stages change + * Increased Tesla damage frequency + * Marginally increased Tesla damage + * Teslas now produce exaggerated knockback effect + * Hives now buildable on walls + * Boosters no longer restore Dragoon spitballs + * Dragoon spitballs now affected by gravity + * Dragoon pounce attack damage reduced to 100 from 160 + * Removed jump pad code (and associated media loading) + * Removed loading of some Q3 cruft + * Corpses timeout in 20 seconds instead of 60 + + Bug fixes/development issues + ---------------------------- + * Fixed a silly bug with using the reactor/repeater + * Spilled events attached to temporary entities are now reattached + to their original entities, fixing the missing flame bug + * Fixed "suicide god" bug + * Fixed bug where zap ignores armour + * Fixed missing particle systems when follow-spectating + * Fixed potential bug involving dodgy pointer arithmetic in + CG_LoadClientInfo + * Cleaned up logic in CG_AddPlayerWeapon + * MASK_SHOT traces no longer collide with corpses + * Improved robustness of spawn validation, fixing the bug on transit + * A crapload of whitespace fixes + +1.0.1 +----- + + Feature/balance changes + ----------------------- + * cg_debugParticles >= 1 now prints to the console when particle + systems are parsed and registered + * Reverted walk/run animation switching back to cmd.buttons instead + of basing it on speed + * Added option for changing whether or not the wallwalk control is a + toggle or not + * Weapon now drops momentarily when reloading + * The stage kill counters are now incremented for structure kills if + players did more then 50% of the total damage + * Removed the mp3 decoder from the source + * Marauder lightning now requires aim, does damage over time and + chains to other entities + * Implemented the Medkit -- a means for a human to restore health + and cure poison in the field + * "Disable Build Warnings" replaced with "Disable Warning + Dialogs" and improved + * Sped spectator move speed up + * Implemented "step down" physics for all characters; no more + jumping down stairs + * Increased frequency with which the Acid Tube deals damage + * Tyrant can no longer charge up forever and must pass a specific + minimum charge level + * Implemented command queueing for commands sent to clients in order + to prevent overflows even sv_floodProtect is off, but not by + dropping commands + * Added LOS check to creep slowing + * Overmind now only complains if there are 0 spawns + * Spawns can no longer be built when there is no Overmind/Reactor + * The spawn closest to the point of death is chosen preferably if + available + * Evolving no longer restores all health + * "give weapons" and "give ammo" cheats removed + * When selling the battery pack, max ammo is given + * Added stage information to the end of game stats + * Reduced Dragoon spitball damage from 120 to 110 + * Reduced Tyrant claw damage from 120 to 100 + * Reduced Tyrant charge damage from 160 to 110 + * Increased Barricade regeneration rate from 12 to 14 + * Increased Overmind health from 500 to 750 + * Decreased Overmind regeneration rate from 10 to 6 + * Doubled Blaster speed from 700 to 1400 + * Reduced Painsaw damage from 18 to 15 + * Reduced Painsaw range from 48.0 to 40.0 + * Reduced Grenade price from 300 to 200 + * Reduced Shotgun repeat rate from 1200 to 1000 + * Increased Shotgun damage from 6 to 7 + * Increased Mass driver damage from 35 to 38 + * Increased Chaingun damage from 5 to 6 + * Reduced Flamer repeat rate from 300 to 200 + * Extended Flamer range + * Increased ammo on all human weapons + * Reduced splashdamage on MG Turrets + + + Bug fixes/development issues + ---------------------------- + * Hacked around trap_LinkEntity to allow missiles to have a bounding + box displayed + * Fixed "Server command overflow" bug for clients that should time + out + * Fixed a bug where only live clients would have their scores logged + at the end of the game + * Reworked how weapon changes are performed, fixing bugs in the + process + * Fixed the issue where the Mac qvm JIT compiler would not compile + Tremulous + * Reimplemented how buildables play damage sounds to not use the + event system + * Reworked the ammo/clips packing system to remove the confusion of + concepts + * Disabled client side ET_MISSILE collision + * G_RadiusSelectiveDamage no longer applies locational damage + * Moved some speed adjustment code into prediction; should prevent + some prediction misses + * Wrapped all calls to trap_SendServerCommand in order to circumvent + the q3amsgboom.cfg exploit + * Fixed restoration of energy weapons bug + * Fixed a bug where locational damage could sometimes scale damage + to 0 + * Added G_ClosestEnt + * Moved build directory from tremulous to tremulous-dev + diff --git a/GPL b/GPL new file mode 100755 index 0000000..050f1e6 --- /dev/null +++ b/GPL @@ -0,0 +1,281 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + diff --git a/Makefile b/Makefile new file mode 100755 index 0000000..a4fe917 --- /dev/null +++ b/Makefile @@ -0,0 +1,1952 @@ +# +# Tremulous Makefile +# +# GNU Make required +# + +COMPILE_PLATFORM=$(shell uname|sed -e s/_.*//|tr '[:upper:]' '[:lower:]'|sed -e 's/\//_/g') + +COMPILE_ARCH=$(shell uname -m | sed -e s/i.86/x86/) + +ifeq ($(COMPILE_PLATFORM),sunos) + # Solaris uname and GNU uname differ + COMPILE_ARCH=$(shell uname -p | sed -e s/i.86/x86/) +endif +ifeq ($(COMPILE_PLATFORM),darwin) + # Apple does some things a little differently... + COMPILE_ARCH=$(shell uname -p | sed -e s/i.86/x86/) +endif + +ifndef BUILD_STANDALONE + BUILD_STANDALONE = 0 +endif +ifndef BUILD_CLIENT + BUILD_CLIENT = 0 +endif +ifndef BUILD_CLIENT_SMP + BUILD_CLIENT_SMP = 0 +endif +ifndef BUILD_SERVER + BUILD_SERVER = 0 +endif +ifndef BUILD_GAME_SO + BUILD_GAME_SO = 0 +endif +ifndef BUILD_GAME_QVM + BUILD_GAME_QVM = 1 +endif +ifndef BUILD_MISSIONPACK + BUILD_MISSIONPACK= +endif + +ifneq ($(PLATFORM),darwin) + BUILD_CLIENT_SMP = 0 +endif + +############################################################################# +# +# If you require a different configuration from the defaults below, create a +# new file named "Makefile.local" in the same directory as this file and define +# your parameters there. This allows you to change configuration without +# causing problems with keeping up to date with the repository. +# +############################################################################# +-include Makefile.local + +ifndef PLATFORM +PLATFORM=$(COMPILE_PLATFORM) +endif +export PLATFORM + +ifeq ($(COMPILE_ARCH),powerpc) + COMPILE_ARCH=ppc +endif +ifeq ($(COMPILE_ARCH),powerpc64) + COMPILE_ARCH=ppc64 +endif + +ifndef ARCH +ARCH=$(COMPILE_ARCH) +endif +export ARCH + +ifneq ($(PLATFORM),$(COMPILE_PLATFORM)) + CROSS_COMPILING=1 +else + CROSS_COMPILING=0 + + ifneq ($(ARCH),$(COMPILE_ARCH)) + CROSS_COMPILING=1 + endif +endif +export CROSS_COMPILING + +ifndef COPYDIR +COPYDIR="/usr/local/games/tremulous" +endif + +ifndef COPYBINDIR +COPYBINDIR=$(COPYDIR) +endif + +ifndef MOUNT_DIR +MOUNT_DIR=src +endif + +ifndef BUILD_DIR +BUILD_DIR=build +endif + +ifndef TEMPDIR +TEMPDIR=/tmp +endif + +ifndef GENERATE_DEPENDENCIES +GENERATE_DEPENDENCIES=1 +endif + +ifndef USE_OPENAL +USE_OPENAL=1 +endif + +ifndef USE_OPENAL_DLOPEN +USE_OPENAL_DLOPEN=1 +endif + +ifndef USE_CURL +USE_CURL=1 +endif + +ifndef USE_CURL_DLOPEN + ifeq ($(PLATFORM),mingw32) + USE_CURL_DLOPEN=0 + else + USE_CURL_DLOPEN=1 + endif +endif + +ifndef USE_CODEC_VORBIS +USE_CODEC_VORBIS=0 +endif + +ifndef USE_MUMBLE +USE_MUMBLE=1 +endif + +ifndef USE_VOIP +USE_VOIP=1 +endif + +ifndef USE_INTERNAL_SPEEX +USE_INTERNAL_SPEEX=1 +endif + +ifndef USE_INTERNAL_ZLIB +USE_INTERNAL_ZLIB=1 +endif + +ifndef USE_INTERNAL_JPEG +USE_INTERNAL_JPEG=1 +endif + +ifndef USE_LOCAL_HEADERS +USE_LOCAL_HEADERS=1 +endif + +ifndef BUILD_MASTER_SERVER +BUILD_MASTER_SERVER=0 +endif + +ifndef DEBUG_CFLAGS +DEBUG_CFLAGS=-g -O0 +endif + +############################################################################# + +BD=$(BUILD_DIR)/debug-$(PLATFORM)-$(ARCH) +BR=$(BUILD_DIR)/release-$(PLATFORM)-$(ARCH) +CDIR=$(MOUNT_DIR)/client +SDIR=$(MOUNT_DIR)/server +RDIR=$(MOUNT_DIR)/renderer +CMDIR=$(MOUNT_DIR)/qcommon +SDLDIR=$(MOUNT_DIR)/sdl +ASMDIR=$(MOUNT_DIR)/asm +SYSDIR=$(MOUNT_DIR)/sys +GDIR=$(MOUNT_DIR)/game +CGDIR=$(MOUNT_DIR)/cgame +NDIR=$(MOUNT_DIR)/null +UIDIR=$(MOUNT_DIR)/ui +JPDIR=$(MOUNT_DIR)/jpeg-8c +SPEEXDIR=$(MOUNT_DIR)/libspeex +ZDIR=$(MOUNT_DIR)/zlib +Q3ASMDIR=$(MOUNT_DIR)/tools/asm +LBURGDIR=$(MOUNT_DIR)/tools/lcc/lburg +Q3CPPDIR=$(MOUNT_DIR)/tools/lcc/cpp +Q3LCCETCDIR=$(MOUNT_DIR)/tools/lcc/etc +Q3LCCSRCDIR=$(MOUNT_DIR)/tools/lcc/src +SDLHDIR=$(MOUNT_DIR)/SDL12 +LIBSDIR=$(MOUNT_DIR)/libs +MASTERDIR=$(MOUNT_DIR)/master +TEMPDIR=/tmp + +bin_path=$(shell which $(1) 2> /dev/null) + +# We won't need this if we only build the server +ifneq ($(BUILD_CLIENT),0) + # set PKG_CONFIG_PATH to influence this, e.g. + # PKG_CONFIG_PATH=/opt/cross/i386-mingw32msvc/lib/pkgconfig + ifneq ($(call bin_path, pkg-config),) + CURL_CFLAGS=$(shell pkg-config --silence-errors --cflags libcurl) + CURL_LIBS=$(shell pkg-config --silence-errors --libs libcurl) + OPENAL_CFLAGS=$(shell pkg-config --silence-errors --cflags openal) + OPENAL_LIBS=$(shell pkg-config --silence-errors --libs openal) + SDL_CFLAGS=$(shell pkg-config --silence-errors --cflags sdl|sed 's/-Dmain=SDL_main//') + SDL_LIBS=$(shell pkg-config --silence-errors --libs sdl) + endif + # Use sdl-config if all else fails + ifeq ($(SDL_CFLAGS),) + ifneq ($(call bin_path, sdl-config),) + SDL_CFLAGS=$(shell sdl-config --cflags) + SDL_LIBS=$(shell sdl-config --libs) + endif + endif +endif + +# version info +VERSION=gpp1 + +USE_SVN= +ifeq ($(wildcard .svn),.svn) + SVN_REV=$(shell LANG=C svnversion .) + ifneq ($(SVN_REV),) + VERSION:=$(VERSION)_SVN$(SVN_REV) + USE_SVN=1 + endif +endif + + +############################################################################# +# SETUP AND BUILD -- LINUX +############################################################################# + +## Defaults +LIB=lib + +INSTALL=install +MKDIR=mkdir + +ifneq (,$(findstring "$(PLATFORM)", "linux" "gnu_kfreebsd" "kfreebsd-gnu")) + + ifeq ($(ARCH),axp) + ARCH=alpha + else + ifeq ($(ARCH),x86_64) + LIB=lib64 + else + ifeq ($(ARCH),ppc64) + LIB=lib64 + else + ifeq ($(ARCH),s390x) + LIB=lib64 + endif + endif + endif + endif + + BASE_CFLAGS = -Wall -fno-strict-aliasing -Wimplicit -Wstrict-prototypes \ + -pipe -DUSE_ICON + CLIENT_CFLAGS = $(SDL_CFLAGS) + SERVER_CFLAGS = + + ifeq ($(USE_OPENAL),1) + CLIENT_CFLAGS += -DUSE_OPENAL + ifeq ($(USE_OPENAL_DLOPEN),1) + CLIENT_CFLAGS += -DUSE_OPENAL_DLOPEN + endif + endif + + ifeq ($(USE_CURL),1) + CLIENT_CFLAGS += -DUSE_CURL + ifeq ($(USE_CURL_DLOPEN),1) + CLIENT_CFLAGS += -DUSE_CURL_DLOPEN + endif + endif + + ifeq ($(USE_CODEC_VORBIS),1) + CLIENT_CFLAGS += -DUSE_CODEC_VORBIS + endif + + OPTIMIZEVM = -O3 -funroll-loops -fomit-frame-pointer + OPTIMIZE = $(OPTIMIZEVM) -ffast-math + + ifeq ($(ARCH),x86_64) + OPTIMIZEVM = -O3 -fomit-frame-pointer -funroll-loops \ + -falign-loops=2 -falign-jumps=2 -falign-functions=2 \ + -fstrength-reduce + OPTIMIZE = $(OPTIMIZEVM) -ffast-math + HAVE_VM_COMPILED = true + else + ifeq ($(ARCH),x86) + OPTIMIZEVM = -O3 -march=i586 -fomit-frame-pointer \ + -funroll-loops -falign-loops=2 -falign-jumps=2 \ + -falign-functions=2 -fstrength-reduce + OPTIMIZE = $(OPTIMIZEVM) -ffast-math + HAVE_VM_COMPILED=true + else + ifeq ($(ARCH),ppc) + BASE_CFLAGS += -maltivec + HAVE_VM_COMPILED=true + endif + ifeq ($(ARCH),ppc64) + BASE_CFLAGS += -maltivec + HAVE_VM_COMPILED=true + endif + ifeq ($(ARCH),sparc) + OPTIMIZE += -mtune=ultrasparc3 -mv8plus + OPTIMIZEVM += -mtune=ultrasparc3 -mv8plus + HAVE_VM_COMPILED=true + endif + ifeq ($(ARCH),alpha) + # According to http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=410555 + # -ffast-math will cause the client to die with SIGFPE on Alpha + OPTIMIZE = $(OPTIMIZEVM) + endif + endif + endif + + ifneq ($(HAVE_VM_COMPILED),true) + BASE_CFLAGS += -DNO_VM_COMPILED + endif + + SHLIBEXT=so + SHLIBCFLAGS=-fPIC -fvisibility=hidden + SHLIBLDFLAGS=-shared $(LDFLAGS) + + THREAD_LIBS=-lpthread + LIBS=-ldl -lm + + CLIENT_LIBS=$(SDL_LIBS) -lGL + + ifeq ($(USE_OPENAL),1) + ifneq ($(USE_OPENAL_DLOPEN),1) + CLIENT_LIBS += -lopenal + endif + endif + + ifeq ($(USE_CURL),1) + ifneq ($(USE_CURL_DLOPEN),1) + CLIENT_LIBS += -lcurl + endif + endif + + ifeq ($(USE_CODEC_VORBIS),1) + CLIENT_LIBS += -lvorbisfile -lvorbis -logg + endif + + ifeq ($(USE_MUMBLE),1) + CLIENT_LIBS += -lrt + endif + + ifeq ($(USE_LOCAL_HEADERS),1) + CLIENT_CFLAGS += -I$(SDLHDIR)/include + endif + + ifeq ($(ARCH),x86) + # linux32 make ... + BASE_CFLAGS += -m32 + else + ifeq ($(ARCH),ppc64) + BASE_CFLAGS += -m64 + endif + endif +else # ifeq Linux + +############################################################################# +# SETUP AND BUILD -- MAC OS X +############################################################################# + +ifeq ($(PLATFORM),darwin) + HAVE_VM_COMPILED=true + LIBS = -framework Cocoa + CLIENT_LIBS= + OPTIMIZEVM= + + BASE_CFLAGS = -Wall -Wimplicit -Wstrict-prototypes + CLIENT_CFLAGS = + SERVER_CFLAGS = + + ifeq ($(ARCH),ppc) + BASE_CFLAGS += -faltivec + OPTIMIZEVM += -O3 + endif + ifeq ($(ARCH),ppc64) + BASE_CFLAGS += -faltivec + endif + ifeq ($(ARCH),x86) + OPTIMIZEVM += -march=prescott -mfpmath=sse + # x86 vm will crash without -mstackrealign since MMX instructions will be + # used no matter what and they corrupt the frame pointer in VM calls + BASE_CFLAGS += -mstackrealign + endif + + BASE_CFLAGS += -fno-strict-aliasing -DMACOS_X -fno-common -pipe + + ifeq ($(USE_OPENAL),1) + BASE_CFLAGS += -DUSE_OPENAL + ifneq ($(USE_OPENAL_DLOPEN),1) + CLIENT_LIBS += -framework OpenAL + else + CLIENT_CFLAGS += -DUSE_OPENAL_DLOPEN + endif + endif + + ifeq ($(USE_CURL),1) + CLIENT_CFLAGS += -DUSE_CURL + ifneq ($(USE_CURL_DLOPEN),1) + CLIENT_LIBS += -lcurl + else + CLIENT_CFLAGS += -DUSE_CURL_DLOPEN + endif + endif + + ifeq ($(USE_CODEC_VORBIS),1) + CLIENT_CFLAGS += -DUSE_CODEC_VORBIS + CLIENT_LIBS += -lvorbisfile -lvorbis -logg + endif + + BASE_CFLAGS += -D_THREAD_SAFE=1 + + ifeq ($(USE_LOCAL_HEADERS),1) + BASE_CFLAGS += -I$(SDLHDIR)/include + endif + + # We copy sdlmain before ranlib'ing it so that subversion doesn't think + # the file has been modified by each build. + LIBSDLMAIN=$(B)/libSDLmain.a + LIBSDLMAINSRC=$(LIBSDIR)/macosx/libSDLmain.a + CLIENT_LIBS += -framework IOKit -framework OpenGL \ + $(LIBSDIR)/macosx/libSDL-1.2.0.dylib + + OPTIMIZEVM += -falign-loops=16 + OPTIMIZE = $(OPTIMIZEVM) -ffast-math + + ifneq ($(HAVE_VM_COMPILED),true) + BASE_CFLAGS += -DNO_VM_COMPILED + endif + + SHLIBEXT=dylib + SHLIBCFLAGS=-fPIC -fno-common + SHLIBLDFLAGS=-dynamiclib $(LDFLAGS) + + NOTSHLIBCFLAGS=-mdynamic-no-pic + + TOOLS_CFLAGS += -DMACOS_X + +else # ifeq darwin + + +############################################################################# +# SETUP AND BUILD -- MINGW32 +############################################################################# + +ifeq ($(PLATFORM),mingw32) + + # Some MinGW installations define CC to cc, but don't actually provide cc, + # so explicitly use gcc instead (which is the only option anyway) + ifeq ($(call bin_path, $(CC)),) + CC=gcc + endif + + ifndef WINDRES + WINDRES=windres + endif + + BASE_CFLAGS = -Wall -fno-strict-aliasing -Wimplicit -Wstrict-prototypes \ + -DUSE_ICON + CLIENT_CFLAGS = + SERVER_CFLAGS = + + # In the absence of wspiapi.h, require Windows XP or later + ifeq ($(shell test -e $(CMDIR)/wspiapi.h; echo $$?),1) + BASE_CFLAGS += -DWINVER=0x501 + endif + + ifeq ($(USE_OPENAL),1) + CLIENT_CFLAGS += -DUSE_OPENAL + CLIENT_CFLAGS += $(OPENAL_CFLAGS) + ifeq ($(USE_OPENAL_DLOPEN),1) + CLIENT_CFLAGS += -DUSE_OPENAL_DLOPEN + else + CLIENT_LDFLAGS += $(OPENAL_LDFLAGS) + endif + endif + + ifeq ($(USE_CODEC_VORBIS),1) + CLIENT_CFLAGS += -DUSE_CODEC_VORBIS + endif + + ifeq ($(ARCH),x64) + OPTIMIZEVM = -O3 -fno-omit-frame-pointer \ + -falign-loops=2 -funroll-loops -falign-jumps=2 -falign-functions=2 \ + -fstrength-reduce + OPTIMIZE = $(OPTIMIZEVM) --fast-math + HAVE_VM_COMPILED = true + endif + ifeq ($(ARCH),x86) + OPTIMIZEVM = -O3 -march=i586 -fno-omit-frame-pointer \ + -falign-loops=2 -funroll-loops -falign-jumps=2 -falign-functions=2 \ + -fstrength-reduce + OPTIMIZE = $(OPTIMIZEVM) -ffast-math + HAVE_VM_COMPILED = true + endif + + SHLIBEXT=dll + SHLIBCFLAGS= + SHLIBLDFLAGS=-shared $(LDFLAGS) + + BINEXT=.exe + + LIBS= -lws2_32 -lwinmm -lpsapi + CLIENT_LDFLAGS = -mwindows + CLIENT_LIBS = -lgdi32 -lole32 -lopengl32 + + ifeq ($(USE_CURL),1) + CLIENT_CFLAGS += -DUSE_CURL + CLIENT_CFLAGS += $(CURL_CFLAGS) + ifneq ($(USE_CURL_DLOPEN),1) + ifeq ($(USE_LOCAL_HEADERS),1) + CLIENT_CFLAGS += -DCURL_STATICLIB + ifeq ($(ARCH),x64) + CLIENT_LIBS += $(LIBSDIR)/win64/libcurl.a + else + CLIENT_LIBS += $(LIBSDIR)/win32/libcurl.a + endif + else + CLIENT_LIBS += $(CURL_LIBS) + endif + endif + endif + + ifeq ($(USE_CODEC_VORBIS),1) + CLIENT_LIBS += -lvorbisfile -lvorbis -logg + endif + + ifeq ($(ARCH),x86) + # build 32bit + BASE_CFLAGS += -m32 + else + BASE_CFLAGS += -m64 + endif + + # libmingw32 must be linked before libSDLmain + CLIENT_LIBS += -lmingw32 + ifeq ($(USE_LOCAL_HEADERS),1) + CLIENT_CFLAGS += -I$(SDLHDIR)/include + ifeq ($(ARCH), x86) + CLIENT_LIBS += $(LIBSDIR)/win32/libSDLmain.a \ + $(LIBSDIR)/win32/libSDL.dll.a + else + CLIENT_LIBS += $(LIBSDIR)/win64/libSDLmain.a \ + $(LIBSDIR)/win64/libSDL.dll.a \ + $(LIBSDIR)/win64/libSDL.a + endif + else + CLIENT_CFLAGS += $(SDL_CFLAGS) + CLIENT_LIBS += $(SDL_LIBS) + endif + + BUILD_CLIENT_SMP = 0 + +else # ifeq mingw32 + +############################################################################# +# SETUP AND BUILD -- FREEBSD +############################################################################# + +ifeq ($(PLATFORM),freebsd) + + # flags + BASE_CFLAGS = $(shell env MACHINE_ARCH=$(ARCH) make -f /dev/null -VCFLAGS) \ + -Wall -fno-strict-aliasing -Wimplicit -Wstrict-prototypes \ + -DUSE_ICON -DMAP_ANONYMOUS=MAP_ANON + CLIENT_CFLAGS = $(SDL_CFLAGS) + SERVER_CFLAGS = + HAVE_VM_COMPILED = true + + OPTIMIZEVM = -O3 -funroll-loops -fomit-frame-pointer + OPTIMIZE = $(OPTIMIZEVM) -ffast-math + + SHLIBEXT=so + SHLIBCFLAGS=-fPIC + SHLIBLDFLAGS=-shared $(LDFLAGS) + + THREAD_LIBS=-lpthread + # don't need -ldl (FreeBSD) + LIBS=-lm + + CLIENT_LIBS = + + CLIENT_LIBS += $(SDL_LIBS) -lGL + + # optional features/libraries + ifeq ($(USE_OPENAL),1) + CLIENT_CFLAGS += -DUSE_OPENAL + ifeq ($(USE_OPENAL_DLOPEN),1) + CLIENT_CFLAGS += -DUSE_OPENAL_DLOPEN + CLIENT_LIBS += $(THREAD_LIBS) -lopenal + endif + endif + + ifeq ($(USE_CURL),1) + CLIENT_CFLAGS += -DUSE_CURL + ifeq ($(USE_CURL_DLOPEN),1) + CLIENT_CFLAGS += -DUSE_CURL_DLOPEN + CLIENT_LIBS += -lcurl + endif + endif + + ifeq ($(USE_CODEC_VORBIS),1) + CLIENT_CFLAGS += -DUSE_CODEC_VORBIS + endif + + ifeq ($(USE_CODEC_VORBIS),1) + CLIENT_LIBS += -lvorbisfile -lvorbis -logg + endif + + # cross-compiling tweaks + ifeq ($(ARCH),i386) + ifeq ($(CROSS_COMPILING),1) + BASE_CFLAGS += -m32 + endif + endif + ifeq ($(ARCH),amd64) + ifeq ($(CROSS_COMPILING),1) + BASE_CFLAGS += -m64 + endif + endif + +else # ifeq freebsd + +############################################################################# +# SETUP AND BUILD -- OPENBSD +############################################################################# + +ifeq ($(PLATFORM),openbsd) + + #default to i386, no tests done on anything else + ARCH=i386 + + BASE_CFLAGS = -Wall -fno-strict-aliasing -Wimplicit -Wstrict-prototypes \ + -DUSE_ICON + CLIENT_CFLAGS = $(SDL_CFLAGS) + SERVER_CFLAGS = + + ifeq ($(USE_OPENAL),1) + CLIENT_CFLAGS += -DUSE_OPENAL + ifeq ($(USE_OPENAL_DLOPEN),1) + CLIENT_CFLAGS += -DUSE_OPENAL_DLOPEN + endif + endif + + ifeq ($(USE_CODEC_VORBIS),1) + CLIENT_CFLAGS += -DUSE_CODEC_VORBIS + endif + + ifeq ($(USE_CURL),1) + CLIENT_CFLAGS += -DUSE_CURL $(CURL_CFLAGS) + USE_CURL_DLOPEN=0 + endif + + BASE_CFLAGS += -DNO_VM_COMPILED + HAVE_VM_COMPILED=false + + SHLIBEXT=so + SHLIBNAME=.$(SHLIBEXT) + SHLIBCFLAGS=-fPIC + SHLIBLDFLAGS=-shared $(LDFLAGS) + + THREAD_LIBS=-pthread + LIBS=-lm + + CLIENT_LIBS = + + CLIENT_LIBS += $(SDL_LIBS) -lGL + + ifeq ($(USE_OPENAL),1) + ifneq ($(USE_OPENAL_DLOPEN),1) + CLIENT_LIBS += $(THREAD_LIBS) -lossaudio -lopenal + endif + endif + + ifeq ($(USE_CODEC_VORBIS),1) + CLIENT_LIBS += -lvorbisfile -lvorbis -logg + endif + + ifeq ($(USE_CURL),1) + ifneq ($(USE_CURL_DLOPEN),1) + CLIENT_LIBS += -lcurl + endif + endif + +else # ifeq openbsd + +############################################################################# +# SETUP AND BUILD -- NETBSD +############################################################################# + +ifeq ($(PLATFORM),netbsd) + + ifeq ($(shell uname -m),i386) + ARCH=x86 + endif + + LIBS=-lm + SHLIBEXT=so + SHLIBCFLAGS=-fPIC + SHLIBLDFLAGS=-shared $(LDFLAGS) + THREAD_LIBS=-lpthread + + BASE_CFLAGS = -Wall -fno-strict-aliasing -Wimplicit -Wstrict-prototypes + CLIENT_CFLAGS = + SERVER_CFLAGS = + + ifneq ($(ARCH),x86) + BASE_CFLAGS += -DNO_VM_COMPILED + endif + + BUILD_CLIENT = 0 + BUILD_GAME_QVM = 0 + +else # ifeq netbsd + +############################################################################# +# SETUP AND BUILD -- IRIX +############################################################################# + +ifeq ($(PLATFORM),irix64) + + ARCH=mips #default to MIPS + + CC = c99 + MKDIR = mkdir -p + + BASE_CFLAGS=-Dstricmp=strcasecmp -Xcpluscomm -woff 1185 \ + -I. -I$(ROOT)/usr/include -DNO_VM_COMPILED + CLIENT_CFLAGS = $(SDL_CFLAGS) + OPTIMIZE = -O3 + + SHLIBEXT=so + SHLIBCFLAGS= + SHLIBLDFLAGS=-shared + + LIBS=-ldl -lm -lgen + # FIXME: The X libraries probably aren't necessary? + CLIENT_LIBS=-L/usr/X11/$(LIB) $(SDL_LIBS) -lGL \ + -lX11 -lXext -lm + +else # ifeq IRIX + +############################################################################# +# SETUP AND BUILD -- SunOS +############################################################################# + +ifeq ($(PLATFORM),sunos) + + CC=gcc + INSTALL=ginstall + MKDIR=gmkdir + COPYDIR="/usr/local/share/games/tremulous" + + ifneq (,$(findstring i86pc,$(shell uname -m))) + ARCH=x86 + else #default to sparc + ARCH=sparc + endif + + ifneq ($(ARCH),x86) + ifneq ($(ARCH),sparc) + $(error arch $(ARCH) is currently not supported) + endif + endif + + BASE_CFLAGS = -Wall -fno-strict-aliasing -Wimplicit -Wstrict-prototypes \ + -pipe -DUSE_ICON + CLIENT_CFLAGS = $(SDL_CFLAGS) + SERVER_CFLAGS = + + OPTIMIZEVM = -O3 -funroll-loops + + ifeq ($(ARCH),sparc) + OPTIMIZEVM += -O3 \ + -fstrength-reduce -falign-functions=2 \ + -mtune=ultrasparc3 -mv8plus -mno-faster-structs + HAVE_VM_COMPILED=true + else + ifeq ($(ARCH),x86) + OPTIMIZEVM += -march=i586 -fomit-frame-pointer \ + -falign-loops=2 -falign-jumps=2 \ + -falign-functions=2 -fstrength-reduce + HAVE_VM_COMPILED=true + BASE_CFLAGS += -m32 + CLIENT_CFLAGS += -I/usr/X11/include/NVIDIA + CLIENT_LDFLAGS += -L/usr/X11/lib/NVIDIA -R/usr/X11/lib/NVIDIA + endif + endif + + OPTIMIZE = $(OPTIMIZEVM) -ffast-math + + ifneq ($(HAVE_VM_COMPILED),true) + BASE_CFLAGS += -DNO_VM_COMPILED + endif + + SHLIBEXT=so + SHLIBCFLAGS=-fPIC + SHLIBLDFLAGS=-shared $(LDFLAGS) + + THREAD_LIBS=-lpthread + LIBS=-lsocket -lnsl -ldl -lm + + BOTCFLAGS=-O0 + + CLIENT_LIBS +=$(SDL_LIBS) -lGL -lX11 -lXext -liconv -lm + +else # ifeq sunos + +############################################################################# +# SETUP AND BUILD -- GENERIC +############################################################################# + BASE_CFLAGS=-DNO_VM_COMPILED + OPTIMIZE = -O3 + + SHLIBEXT=so + SHLIBCFLAGS=-fPIC + SHLIBLDFLAGS=-shared + +endif #Linux +endif #darwin +endif #mingw32 +endif #FreeBSD +endif #OpenBSD +endif #NetBSD +endif #IRIX +endif #SunOS + +TARGETS = + +ifndef FULLBINEXT + FULLBINEXT=.$(ARCH)$(BINEXT) +endif + +ifndef SHLIBNAME + SHLIBNAME=$(ARCH).$(SHLIBEXT) +endif + +ifneq ($(BUILD_SERVER),0) + TARGETS += $(B)/tremded$(FULLBINEXT) +endif + +ifneq ($(BUILD_CLIENT),0) + TARGETS += $(B)/tremulous$(FULLBINEXT) + ifneq ($(BUILD_CLIENT_SMP),0) + TARGETS += $(B)/tremulous-smp$(FULLBINEXT) + endif +endif + +ifneq ($(BUILD_GAME_SO),0) + TARGETS += \ + $(B)/base/cgame$(SHLIBNAME) \ + $(B)/base/game$(SHLIBNAME) \ + $(B)/base/ui$(SHLIBNAME) +endif + +ifneq ($(BUILD_GAME_QVM),0) + ifneq ($(CROSS_COMPILING),1) + TARGETS += \ + $(B)/base/vm/cgame.qvm \ + $(B)/base/vm/game.qvm \ + $(B)/base/vm/ui.qvm + endif +endif + +ifeq ($(USE_MUMBLE),1) + CLIENT_CFLAGS += -DUSE_MUMBLE +endif + +ifeq ($(USE_VOIP),1) + CLIENT_CFLAGS += -DUSE_VOIP + SERVER_CFLAGS += -DUSE_VOIP + ifeq ($(USE_INTERNAL_SPEEX),1) + CLIENT_CFLAGS += -DFLOATING_POINT -DUSE_ALLOCA -I$(SPEEXDIR)/include + else + CLIENT_LIBS += -lspeex -lspeexdsp + endif +endif + +ifeq ($(USE_INTERNAL_ZLIB),1) + BASE_CFLAGS += -DNO_GZIP + BASE_CFLAGS += -I$(ZDIR) +else + LIBS += -lz +endif + +ifeq ($(USE_INTERNAL_JPEG),1) + BASE_CFLAGS += -DUSE_INTERNAL_JPEG + BASE_CFLAGS += -I$(JPDIR) +else + CLIENT_LIBS += -ljpeg +endif + +ifdef DEFAULT_BASEDIR + BASE_CFLAGS += -DDEFAULT_BASEDIR=\\\"$(DEFAULT_BASEDIR)\\\" +endif + +ifeq ($(USE_LOCAL_HEADERS),1) + BASE_CFLAGS += -DUSE_LOCAL_HEADERS +endif + +ifeq ($(BUILD_STANDALONE),1) + BASE_CFLAGS += -DSTANDALONE +endif + +ifeq ($(GENERATE_DEPENDENCIES),1) + DEPEND_CFLAGS = -MMD +else + DEPEND_CFLAGS = +endif + +ifeq ($(NO_STRIP),1) + STRIP_FLAG = +else + STRIP_FLAG = -s +endif + +BASE_CFLAGS += -DPRODUCT_VERSION=\\\"$(VERSION)\\\" + +ifeq ($(V),1) +echo_cmd=@: +Q= +else +echo_cmd=@echo +Q=@ +endif + +define DO_CC +$(echo_cmd) "CC $<" +$(Q)$(CC) $(NOTSHLIBCFLAGS) $(CFLAGS) $(CLIENT_CFLAGS) $(OPTIMIZE) -o $@ -c $< +endef + +define DO_SMP_CC +$(echo_cmd) "SMP_CC $<" +$(Q)$(CC) $(NOTSHLIBCFLAGS) $(CFLAGS) $(CLIENT_CFLAGS) $(OPTIMIZE) -DSMP -o $@ -c $< +endef + +ifeq ($(GENERATE_DEPENDENCIES),1) + DO_QVM_DEP=cat $(@:%.o=%.d) | sed -e 's/\.o/\.asm/g' >> $(@:%.o=%.d) +endif + +define DO_SHLIB_CC +$(echo_cmd) "SHLIB_CC $<" +$(Q)$(CC) $(SHLIBCFLAGS) $(CFLAGS) $(OPTIMIZEVM) -o $@ -c $< +$(Q)$(DO_QVM_DEP) +endef + +define DO_GAME_CC +$(echo_cmd) "GAME_CC $<" +$(Q)$(CC) -DGAME $(SHLIBCFLAGS) $(CFLAGS) $(OPTIMIZEVM) -o $@ -c $< +$(Q)$(DO_QVM_DEP) +endef + +define DO_CGAME_CC +$(echo_cmd) "CGAME_CC $<" +$(Q)$(CC) -DCGAME $(SHLIBCFLAGS) $(CFLAGS) $(OPTIMIZEVM) -o $@ -c $< +$(Q)$(DO_QVM_DEP) +endef + +define DO_UI_CC +$(echo_cmd) "UI_CC $<" +$(Q)$(CC) -DUI $(SHLIBCFLAGS) $(CFLAGS) $(OPTIMIZEVM) -o $@ -c $< +$(Q)$(DO_QVM_DEP) +endef + +define DO_AS +$(echo_cmd) "AS $<" +$(Q)$(CC) $(CFLAGS) $(OPTIMIZE) -x assembler-with-cpp -o $@ -c $< +endef + +define DO_DED_CC +$(echo_cmd) "DED_CC $<" +$(Q)$(CC) $(NOTSHLIBCFLAGS) -DDEDICATED $(CFLAGS) $(SERVER_CFLAGS) $(OPTIMIZE) -o $@ -c $< +endef + +define DO_WINDRES +$(echo_cmd) "WINDRES $<" +$(Q)$(WINDRES) -i $< -o $@ +endef + + +############################################################################# +# MAIN TARGETS +############################################################################# + +default: release +all: debug release + +debug: + @$(MAKE) targets B=$(BD) CFLAGS="$(CFLAGS) $(BASE_CFLAGS) $(DEPEND_CFLAGS)" \ + OPTIMIZE="$(DEBUG_CFLAGS)" OPTIMIZEVM="$(DEBUG_CFLAGS)" \ + CLIENT_CFLAGS="$(CLIENT_CFLAGS)" SERVER_CFLAGS="$(SERVER_CFLAGS)" V=$(V) +ifeq ($(BUILD_MASTER_SERVER),1) + $(MAKE) -C $(MASTERDIR) debug +endif + +release: + @$(MAKE) targets B=$(BR) CFLAGS="$(CFLAGS) $(BASE_CFLAGS) $(DEPEND_CFLAGS)" \ + OPTIMIZE="-DNDEBUG $(OPTIMIZE)" OPTIMIZEVM="-DNDEBUG $(OPTIMIZEVM)" \ + CLIENT_CFLAGS="$(CLIENT_CFLAGS)" SERVER_CFLAGS="$(SERVER_CFLAGS)" V=$(V) +ifeq ($(BUILD_MASTER_SERVER),1) + $(MAKE) -C $(MASTERDIR) release +endif + +# Create the build directories, check libraries and print out +# an informational message, then start building +targets: makedirs + @echo "" + @echo "Building Tremulous in $(B):" + @echo " PLATFORM: $(PLATFORM)" + @echo " ARCH: $(ARCH)" + @echo " VERSION: $(VERSION)" + @echo " COMPILE_PLATFORM: $(COMPILE_PLATFORM)" + @echo " COMPILE_ARCH: $(COMPILE_ARCH)" + @echo " CC: $(CC)" + @echo "" + @echo " CFLAGS:" + -@for i in $(CFLAGS); \ + do \ + echo " $$i"; \ + done + -@for i in $(OPTIMIZE); \ + do \ + echo " $$i"; \ + done + @echo "" + @echo " CLIENT_CFLAGS:" + -@for i in $(CLIENT_CFLAGS); \ + do \ + echo " $$i"; \ + done + @echo "" + @echo " SERVER_CFLAGS:" + -@for i in $(SERVER_CFLAGS); \ + do \ + echo " $$i"; \ + done + @echo "" + @echo " LDFLAGS:" + -@for i in $(LDFLAGS); \ + do \ + echo " $$i"; \ + done + @echo "" + @echo " LIBS:" + -@for i in $(LIBS); \ + do \ + echo " $$i"; \ + done + @echo "" + @echo " CLIENT_LIBS:" + -@for i in $(CLIENT_LIBS); \ + do \ + echo " $$i"; \ + done + @echo "" + @echo " Output:" + -@for i in $(TARGETS); \ + do \ + echo " $$i"; \ + done + @echo "" +ifneq ($(TARGETS),) + @$(MAKE) $(TARGETS) V=$(V) +endif + +makedirs: + @if [ ! -d $(BUILD_DIR) ];then $(MKDIR) $(BUILD_DIR);fi + @if [ ! -d $(B) ];then $(MKDIR) $(B);fi + @if [ ! -d $(B)/client ];then $(MKDIR) $(B)/client;fi + @if [ ! -d $(B)/clientsmp ];then $(MKDIR) $(B)/clientsmp;fi + @if [ ! -d $(B)/ded ];then $(MKDIR) $(B)/ded;fi + @if [ ! -d $(B)/base ];then $(MKDIR) $(B)/base;fi + @if [ ! -d $(B)/base/cgame ];then $(MKDIR) $(B)/base/cgame;fi + @if [ ! -d $(B)/base/game ];then $(MKDIR) $(B)/base/game;fi + @if [ ! -d $(B)/base/ui ];then $(MKDIR) $(B)/base/ui;fi + @if [ ! -d $(B)/base/qcommon ];then $(MKDIR) $(B)/base/qcommon;fi + @if [ ! -d $(B)/base/vm ];then $(MKDIR) $(B)/base/vm;fi + @if [ ! -d $(B)/tools ];then $(MKDIR) $(B)/tools;fi + @if [ ! -d $(B)/tools/asm ];then $(MKDIR) $(B)/tools/asm;fi + @if [ ! -d $(B)/tools/etc ];then $(MKDIR) $(B)/tools/etc;fi + @if [ ! -d $(B)/tools/rcc ];then $(MKDIR) $(B)/tools/rcc;fi + @if [ ! -d $(B)/tools/cpp ];then $(MKDIR) $(B)/tools/cpp;fi + @if [ ! -d $(B)/tools/lburg ];then $(MKDIR) $(B)/tools/lburg;fi + +############################################################################# +# QVM BUILD TOOLS +############################################################################# + +TOOLS_OPTIMIZE = -g -Wall -fno-strict-aliasing +TOOLS_CFLAGS += $(TOOLS_OPTIMIZE) \ + -DTEMPDIR=\"$(TEMPDIR)\" -DSYSTEM=\"\" \ + -I$(Q3LCCSRCDIR) \ + -I$(LBURGDIR) +TOOLS_LIBS = +TOOLS_LDFLAGS = + +ifeq ($(GENERATE_DEPENDENCIES),1) + TOOLS_CFLAGS += -MMD +endif + +define DO_TOOLS_CC +$(echo_cmd) "TOOLS_CC $<" +$(Q)$(CC) $(TOOLS_CFLAGS) -o $@ -c $< +endef + +define DO_TOOLS_CC_DAGCHECK +$(echo_cmd) "TOOLS_CC_DAGCHECK $<" +$(Q)$(CC) $(TOOLS_CFLAGS) -Wno-unused -o $@ -c $< +endef + +LBURG = $(B)/tools/lburg/lburg$(BINEXT) +DAGCHECK_C = $(B)/tools/rcc/dagcheck.c +Q3RCC = $(B)/tools/q3rcc$(BINEXT) +Q3CPP = $(B)/tools/q3cpp$(BINEXT) +Q3LCC = $(B)/tools/q3lcc$(BINEXT) +Q3ASM = $(B)/tools/q3asm$(BINEXT) + +LBURGOBJ= \ + $(B)/tools/lburg/lburg.o \ + $(B)/tools/lburg/gram.o + +$(B)/tools/lburg/%.o: $(LBURGDIR)/%.c + $(DO_TOOLS_CC) + +$(LBURG): $(LBURGOBJ) + $(echo_cmd) "LD $@" + $(Q)$(CC) $(TOOLS_CFLAGS) $(TOOLS_LDFLAGS) -o $@ $^ $(TOOLS_LIBS) + +Q3RCCOBJ = \ + $(B)/tools/rcc/alloc.o \ + $(B)/tools/rcc/bind.o \ + $(B)/tools/rcc/bytecode.o \ + $(B)/tools/rcc/dag.o \ + $(B)/tools/rcc/dagcheck.o \ + $(B)/tools/rcc/decl.o \ + $(B)/tools/rcc/enode.o \ + $(B)/tools/rcc/error.o \ + $(B)/tools/rcc/event.o \ + $(B)/tools/rcc/expr.o \ + $(B)/tools/rcc/gen.o \ + $(B)/tools/rcc/init.o \ + $(B)/tools/rcc/inits.o \ + $(B)/tools/rcc/input.o \ + $(B)/tools/rcc/lex.o \ + $(B)/tools/rcc/list.o \ + $(B)/tools/rcc/main.o \ + $(B)/tools/rcc/null.o \ + $(B)/tools/rcc/output.o \ + $(B)/tools/rcc/prof.o \ + $(B)/tools/rcc/profio.o \ + $(B)/tools/rcc/simp.o \ + $(B)/tools/rcc/stmt.o \ + $(B)/tools/rcc/string.o \ + $(B)/tools/rcc/sym.o \ + $(B)/tools/rcc/symbolic.o \ + $(B)/tools/rcc/trace.o \ + $(B)/tools/rcc/tree.o \ + $(B)/tools/rcc/types.o + +$(DAGCHECK_C): $(LBURG) $(Q3LCCSRCDIR)/dagcheck.md + $(echo_cmd) "LBURG $(Q3LCCSRCDIR)/dagcheck.md" + $(Q)$(LBURG) $(Q3LCCSRCDIR)/dagcheck.md $@ + +$(B)/tools/rcc/dagcheck.o: $(DAGCHECK_C) + $(DO_TOOLS_CC_DAGCHECK) + +$(B)/tools/rcc/%.o: $(Q3LCCSRCDIR)/%.c + $(DO_TOOLS_CC) + +$(Q3RCC): $(Q3RCCOBJ) + $(echo_cmd) "LD $@" + $(Q)$(CC) $(TOOLS_CFLAGS) $(TOOLS_LDFLAGS) -o $@ $^ $(TOOLS_LIBS) + +Q3CPPOBJ = \ + $(B)/tools/cpp/cpp.o \ + $(B)/tools/cpp/lex.o \ + $(B)/tools/cpp/nlist.o \ + $(B)/tools/cpp/tokens.o \ + $(B)/tools/cpp/macro.o \ + $(B)/tools/cpp/eval.o \ + $(B)/tools/cpp/include.o \ + $(B)/tools/cpp/hideset.o \ + $(B)/tools/cpp/getopt.o \ + $(B)/tools/cpp/unix.o + +$(B)/tools/cpp/%.o: $(Q3CPPDIR)/%.c + $(DO_TOOLS_CC) + +$(Q3CPP): $(Q3CPPOBJ) + $(echo_cmd) "LD $@" + $(Q)$(CC) $(TOOLS_CFLAGS) $(TOOLS_LDFLAGS) -o $@ $^ $(TOOLS_LIBS) + +Q3LCCOBJ = \ + $(B)/tools/etc/lcc.o \ + $(B)/tools/etc/bytecode.o + +$(B)/tools/etc/%.o: $(Q3LCCETCDIR)/%.c + $(DO_TOOLS_CC) + +$(Q3LCC): $(Q3LCCOBJ) $(Q3RCC) $(Q3CPP) + $(echo_cmd) "LD $@" + $(Q)$(CC) $(TOOLS_CFLAGS) $(TOOLS_LDFLAGS) -o $@ $(Q3LCCOBJ) $(TOOLS_LIBS) + +define DO_Q3LCC +$(echo_cmd) "Q3LCC $<" +$(Q)$(Q3LCC) -o $@ $< +endef + +define DO_CGAME_Q3LCC +$(echo_cmd) "CGAME_Q3LCC $<" +$(Q)$(Q3LCC) -DPRODUCT_VERSION=\"$(VERSION)\" -DCGAME -o $@ $< +endef + +define DO_GAME_Q3LCC +$(echo_cmd) "GAME_Q3LCC $<" +$(Q)$(Q3LCC) -DPRODUCT_VERSION=\"$(VERSION)\" -DGAME -o $@ $< +endef + +define DO_UI_Q3LCC +$(echo_cmd) "UI_Q3LCC $<" +$(Q)$(Q3LCC) -DPRODUCT_VERSION=\"$(VERSION)\" -DUI -o $@ $< +endef + + +Q3ASMOBJ = \ + $(B)/tools/asm/q3asm.o \ + $(B)/tools/asm/cmdlib.o + +$(B)/tools/asm/%.o: $(Q3ASMDIR)/%.c + $(DO_TOOLS_CC) + +$(Q3ASM): $(Q3ASMOBJ) + $(echo_cmd) "LD $@" + $(Q)$(CC) $(TOOLS_CFLAGS) $(TOOLS_LDFLAGS) -o $@ $^ $(TOOLS_LIBS) + + +############################################################################# +# CLIENT/SERVER +############################################################################# + +Q3OBJ = \ + $(B)/client/cl_cgame.o \ + $(B)/client/cl_cin.o \ + $(B)/client/cl_console.o \ + $(B)/client/cl_input.o \ + $(B)/client/cl_keys.o \ + $(B)/client/cl_main.o \ + $(B)/client/cl_net_chan.o \ + $(B)/client/cl_parse.o \ + $(B)/client/cl_scrn.o \ + $(B)/client/cl_ui.o \ + $(B)/client/cl_avi.o \ + \ + $(B)/client/cm_load.o \ + $(B)/client/cm_patch.o \ + $(B)/client/cm_polylib.o \ + $(B)/client/cm_test.o \ + $(B)/client/cm_trace.o \ + \ + $(B)/client/cmd.o \ + $(B)/client/common.o \ + $(B)/client/cvar.o \ + $(B)/client/files.o \ + $(B)/client/md4.o \ + $(B)/client/md5.o \ + $(B)/client/msg.o \ + $(B)/client/net_chan.o \ + $(B)/client/net_ip.o \ + $(B)/client/huffman.o \ + $(B)/client/parse.o \ + \ + $(B)/client/snd_adpcm.o \ + $(B)/client/snd_dma.o \ + $(B)/client/snd_mem.o \ + $(B)/client/snd_mix.o \ + $(B)/client/snd_wavelet.o \ + \ + $(B)/client/snd_main.o \ + $(B)/client/snd_codec.o \ + $(B)/client/snd_codec_wav.o \ + $(B)/client/snd_codec_ogg.o \ + \ + $(B)/client/qal.o \ + $(B)/client/snd_openal.o \ + \ + $(B)/client/cl_curl.o \ + \ + $(B)/client/sv_ccmds.o \ + $(B)/client/sv_client.o \ + $(B)/client/sv_game.o \ + $(B)/client/sv_init.o \ + $(B)/client/sv_main.o \ + $(B)/client/sv_net_chan.o \ + $(B)/client/sv_snapshot.o \ + $(B)/client/sv_world.o \ + \ + $(B)/client/q_math.o \ + $(B)/client/q_shared.o \ + \ + $(B)/client/unzip.o \ + $(B)/client/ioapi.o \ + $(B)/client/puff.o \ + $(B)/client/vm.o \ + $(B)/client/vm_interpreted.o \ + \ + $(B)/client/tr_animation.o \ + $(B)/client/tr_backend.o \ + $(B)/client/tr_bsp.o \ + $(B)/client/tr_cmds.o \ + $(B)/client/tr_curve.o \ + $(B)/client/tr_flares.o \ + $(B)/client/tr_font.o \ + $(B)/client/tr_image.o \ + $(B)/client/tr_image_png.o \ + $(B)/client/tr_image_jpg.o \ + $(B)/client/tr_image_bmp.o \ + $(B)/client/tr_image_tga.o \ + $(B)/client/tr_image_pcx.o \ + $(B)/client/tr_init.o \ + $(B)/client/tr_light.o \ + $(B)/client/tr_main.o \ + $(B)/client/tr_marks.o \ + $(B)/client/tr_mesh.o \ + $(B)/client/tr_model.o \ + $(B)/client/tr_noise.o \ + $(B)/client/tr_scene.o \ + $(B)/client/tr_shade.o \ + $(B)/client/tr_shade_calc.o \ + $(B)/client/tr_shader.o \ + $(B)/client/tr_shadows.o \ + $(B)/client/tr_sky.o \ + $(B)/client/tr_surface.o \ + $(B)/client/tr_world.o \ + \ + $(B)/client/sdl_gamma.o \ + $(B)/client/sdl_input.o \ + $(B)/client/sdl_snd.o \ + \ + $(B)/client/con_passive.o \ + $(B)/client/con_log.o \ + $(B)/client/sys_main.o + +ifneq ($(USE_INTERNAL_JPEG),0) + Q3OBJ += \ + $(B)/client/jaricom.o \ + $(B)/client/jcapimin.o \ + $(B)/client/jcapistd.o \ + $(B)/client/jcarith.o \ + $(B)/client/jccoefct.o \ + $(B)/client/jccolor.o \ + $(B)/client/jcdctmgr.o \ + $(B)/client/jchuff.o \ + $(B)/client/jcinit.o \ + $(B)/client/jcmainct.o \ + $(B)/client/jcmarker.o \ + $(B)/client/jcmaster.o \ + $(B)/client/jcomapi.o \ + $(B)/client/jcparam.o \ + $(B)/client/jcprepct.o \ + $(B)/client/jcsample.o \ + $(B)/client/jctrans.o \ + $(B)/client/jdapimin.o \ + $(B)/client/jdapistd.o \ + $(B)/client/jdarith.o \ + $(B)/client/jdatadst.o \ + $(B)/client/jdatasrc.o \ + $(B)/client/jdcoefct.o \ + $(B)/client/jdcolor.o \ + $(B)/client/jddctmgr.o \ + $(B)/client/jdhuff.o \ + $(B)/client/jdinput.o \ + $(B)/client/jdmainct.o \ + $(B)/client/jdmarker.o \ + $(B)/client/jdmaster.o \ + $(B)/client/jdmerge.o \ + $(B)/client/jdpostct.o \ + $(B)/client/jdsample.o \ + $(B)/client/jdtrans.o \ + $(B)/client/jerror.o \ + $(B)/client/jfdctflt.o \ + $(B)/client/jfdctfst.o \ + $(B)/client/jfdctint.o \ + $(B)/client/jidctflt.o \ + $(B)/client/jidctfst.o \ + $(B)/client/jidctint.o \ + $(B)/client/jmemmgr.o \ + $(B)/client/jmemnobs.o \ + $(B)/client/jquant1.o \ + $(B)/client/jquant2.o \ + $(B)/client/jutils.o +endif + +ifeq ($(ARCH),x86) + Q3OBJ += \ + $(B)/client/snd_mixa.o \ + $(B)/client/matha.o \ + $(B)/client/ftola.o \ + $(B)/client/snapvectora.o +endif + +ifeq ($(USE_VOIP),1) +ifeq ($(USE_INTERNAL_SPEEX),1) +Q3OBJ += \ + $(B)/client/bits.o \ + $(B)/client/buffer.o \ + $(B)/client/cb_search.o \ + $(B)/client/exc_10_16_table.o \ + $(B)/client/exc_10_32_table.o \ + $(B)/client/exc_20_32_table.o \ + $(B)/client/exc_5_256_table.o \ + $(B)/client/exc_5_64_table.o \ + $(B)/client/exc_8_128_table.o \ + $(B)/client/fftwrap.o \ + $(B)/client/filterbank.o \ + $(B)/client/filters.o \ + $(B)/client/gain_table.o \ + $(B)/client/gain_table_lbr.o \ + $(B)/client/hexc_10_32_table.o \ + $(B)/client/hexc_table.o \ + $(B)/client/high_lsp_tables.o \ + $(B)/client/jitter.o \ + $(B)/client/kiss_fft.o \ + $(B)/client/kiss_fftr.o \ + $(B)/client/lpc.o \ + $(B)/client/lsp.o \ + $(B)/client/lsp_tables_nb.o \ + $(B)/client/ltp.o \ + $(B)/client/mdf.o \ + $(B)/client/modes.o \ + $(B)/client/modes_wb.o \ + $(B)/client/nb_celp.o \ + $(B)/client/preprocess.o \ + $(B)/client/quant_lsp.o \ + $(B)/client/resample.o \ + $(B)/client/sb_celp.o \ + $(B)/client/smallft.o \ + $(B)/client/speex.o \ + $(B)/client/speex_callbacks.o \ + $(B)/client/speex_header.o \ + $(B)/client/stereo.o \ + $(B)/client/vbr.o \ + $(B)/client/vq.o \ + $(B)/client/window.o +endif +endif + +ifeq ($(USE_INTERNAL_ZLIB),1) +Q3OBJ += \ + $(B)/client/adler32.o \ + $(B)/client/crc32.o \ + $(B)/client/inffast.o \ + $(B)/client/inflate.o \ + $(B)/client/inftrees.o \ + $(B)/client/zutil.o +endif + +ifeq ($(HAVE_VM_COMPILED),true) + ifeq ($(ARCH),x86) + Q3OBJ += $(B)/client/vm_x86.o + endif + ifeq ($(ARCH),x86_64) + Q3OBJ += $(B)/client/vm_x86_64.o $(B)/client/vm_x86_64_assembler.o + endif + ifeq ($(ARCH),amd64) + Q3OBJ += $(B)/client/vm_x86_64.o $(B)/client/vm_x86_64_assembler.o + endif + ifeq ($(ARCH),x64) + Q3OBJ += $(B)/client/vm_x86_64.o $(B)/client/vm_x86_64_assembler.o + endif + ifeq ($(ARCH),ppc) + Q3OBJ += $(B)/client/vm_powerpc.o $(B)/client/vm_powerpc_asm.o + endif + ifeq ($(ARCH),ppc64) + Q3OBJ += $(B)/client/vm_powerpc.o $(B)/client/vm_powerpc_asm.o + endif + ifeq ($(ARCH),sparc) + Q3OBJ += $(B)/client/vm_sparc.o + endif +endif + +ifeq ($(PLATFORM),mingw32) + Q3OBJ += \ + $(B)/client/win_resource.o \ + $(B)/client/sys_win32.o +else + Q3OBJ += \ + $(B)/client/sys_unix.o +endif + +ifeq ($(PLATFORM),darwin) + Q3OBJ += \ + $(B)/client/sys_osx.o +endif + +ifeq ($(USE_MUMBLE),1) + Q3OBJ += \ + $(B)/client/libmumblelink.o +endif + +Q3POBJ += \ + $(B)/client/sdl_glimp.o + +Q3POBJ_SMP += \ + $(B)/clientsmp/sdl_glimp.o + +$(B)/tremulous$(FULLBINEXT): $(Q3OBJ) $(Q3POBJ) $(LIBSDLMAIN) + $(echo_cmd) "LD $@" + $(Q)$(CC) $(CLIENT_CFLAGS) $(CFLAGS) $(CLIENT_LDFLAGS) $(LDFLAGS) \ + -o $@ $(Q3OBJ) $(Q3POBJ) \ + $(LIBSDLMAIN) $(CLIENT_LIBS) $(LIBS) + +$(B)/tremulous-smp$(FULLBINEXT): $(Q3OBJ) $(Q3POBJ_SMP) $(LIBSDLMAIN) + $(echo_cmd) "LD $@" + $(Q)$(CC) $(CLIENT_CFLAGS) $(CFLAGS) $(CLIENT_LDFLAGS) $(LDFLAGS) $(THREAD_LDFLAGS) \ + -o $@ $(Q3OBJ) $(Q3POBJ_SMP) \ + $(THREAD_LIBS) $(LIBSDLMAIN) $(CLIENT_LIBS) $(LIBS) + +ifneq ($(strip $(LIBSDLMAIN)),) +ifneq ($(strip $(LIBSDLMAINSRC)),) +$(LIBSDLMAIN) : $(LIBSDLMAINSRC) + cp $< $@ + ranlib $@ +endif +endif + + + +############################################################################# +# DEDICATED SERVER +############################################################################# + +Q3DOBJ = \ + $(B)/ded/sv_client.o \ + $(B)/ded/sv_ccmds.o \ + $(B)/ded/sv_game.o \ + $(B)/ded/sv_init.o \ + $(B)/ded/sv_main.o \ + $(B)/ded/sv_net_chan.o \ + $(B)/ded/sv_snapshot.o \ + $(B)/ded/sv_world.o \ + \ + $(B)/ded/cm_load.o \ + $(B)/ded/cm_patch.o \ + $(B)/ded/cm_polylib.o \ + $(B)/ded/cm_test.o \ + $(B)/ded/cm_trace.o \ + $(B)/ded/cmd.o \ + $(B)/ded/common.o \ + $(B)/ded/cvar.o \ + $(B)/ded/files.o \ + $(B)/ded/md4.o \ + $(B)/ded/msg.o \ + $(B)/ded/net_chan.o \ + $(B)/ded/net_ip.o \ + $(B)/ded/huffman.o \ + $(B)/ded/parse.o \ + \ + $(B)/ded/q_math.o \ + $(B)/ded/q_shared.o \ + \ + $(B)/ded/unzip.o \ + $(B)/ded/ioapi.o \ + $(B)/ded/vm.o \ + $(B)/ded/vm_interpreted.o \ + \ + $(B)/ded/null_client.o \ + $(B)/ded/null_input.o \ + $(B)/ded/null_snddma.o \ + \ + $(B)/ded/con_log.o \ + $(B)/ded/sys_main.o + +ifeq ($(ARCH),x86) + Q3DOBJ += \ + $(B)/ded/ftola.o \ + $(B)/ded/snapvectora.o \ + $(B)/ded/matha.o +endif + +ifeq ($(USE_INTERNAL_ZLIB),1) +Q3DOBJ += \ + $(B)/ded/adler32.o \ + $(B)/ded/crc32.o \ + $(B)/ded/inffast.o \ + $(B)/ded/inflate.o \ + $(B)/ded/inftrees.o \ + $(B)/ded/zutil.o +endif + +ifeq ($(HAVE_VM_COMPILED),true) + ifeq ($(ARCH),x86) + Q3DOBJ += $(B)/ded/vm_x86.o + endif + ifeq ($(ARCH),x86_64) + Q3DOBJ += $(B)/ded/vm_x86_64.o $(B)/ded/vm_x86_64_assembler.o + endif + ifeq ($(ARCH),amd64) + Q3DOBJ += $(B)/ded/vm_x86_64.o $(B)/ded/vm_x86_64_assembler.o + endif + ifeq ($(ARCH),x64) + Q3DOBJ += $(B)/ded/vm_x86_64.o $(B)/ded/vm_x86_64_assembler.o + endif + ifeq ($(ARCH),ppc) + Q3DOBJ += $(B)/ded/vm_powerpc.o $(B)/ded/vm_powerpc_asm.o + endif + ifeq ($(ARCH),ppc64) + Q3DOBJ += $(B)/ded/vm_powerpc.o $(B)/ded/vm_powerpc_asm.o + endif + ifeq ($(ARCH),sparc) + Q3DOBJ += $(B)/ded/vm_sparc.o + endif +endif + +ifeq ($(PLATFORM),mingw32) + Q3DOBJ += \ + $(B)/ded/win_resource.o \ + $(B)/ded/sys_win32.o \ + $(B)/ded/con_win32.o +else + Q3DOBJ += \ + $(B)/ded/sys_unix.o \ + $(B)/ded/con_tty.o +endif + +ifeq ($(PLATFORM),darwin) + Q3DOBJ += \ + $(B)/ded/sys_osx.o +endif + +$(B)/tremded$(FULLBINEXT): $(Q3DOBJ) + $(echo_cmd) "LD $@" + $(Q)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(Q3DOBJ) $(LIBS) + + + +############################################################################# +## TREMULOUS CGAME +############################################################################# + +CGOBJ_ = \ + $(B)/base/cgame/cg_main.o \ + $(B)/base/cgame/bg_misc.o \ + $(B)/base/cgame/bg_pmove.o \ + $(B)/base/cgame/bg_slidemove.o \ + $(B)/base/cgame/bg_lib.o \ + $(B)/base/cgame/bg_alloc.o \ + $(B)/base/cgame/bg_voice.o \ + $(B)/base/cgame/cg_consolecmds.o \ + $(B)/base/cgame/cg_buildable.o \ + $(B)/base/cgame/cg_animation.o \ + $(B)/base/cgame/cg_animmapobj.o \ + $(B)/base/cgame/cg_draw.o \ + $(B)/base/cgame/cg_drawtools.o \ + $(B)/base/cgame/cg_ents.o \ + $(B)/base/cgame/cg_event.o \ + $(B)/base/cgame/cg_marks.o \ + $(B)/base/cgame/cg_players.o \ + $(B)/base/cgame/cg_playerstate.o \ + $(B)/base/cgame/cg_predict.o \ + $(B)/base/cgame/cg_servercmds.o \ + $(B)/base/cgame/cg_snapshot.o \ + $(B)/base/cgame/cg_view.o \ + $(B)/base/cgame/cg_weapons.o \ + $(B)/base/cgame/cg_scanner.o \ + $(B)/base/cgame/cg_attachment.o \ + $(B)/base/cgame/cg_trails.o \ + $(B)/base/cgame/cg_particles.o \ + $(B)/base/cgame/cg_tutorial.o \ + $(B)/base/ui/ui_shared.o \ + \ + $(B)/base/qcommon/q_math.o \ + $(B)/base/qcommon/q_shared.o + +CGOBJ = $(CGOBJ_) $(B)/base/cgame/cg_syscalls.o +CGVMOBJ = $(CGOBJ_:%.o=%.asm) + +$(B)/base/cgame$(SHLIBNAME): $(CGOBJ) + $(echo_cmd) "LD $@" + $(Q)$(CC) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(CGOBJ) + +$(B)/base/vm/cgame.qvm: $(CGVMOBJ) $(CGDIR)/cg_syscalls.asm $(Q3ASM) + $(echo_cmd) "Q3ASM $@" + $(Q)$(Q3ASM) -o $@ $(CGVMOBJ) $(CGDIR)/cg_syscalls.asm + + + +############################################################################# +## TREMULOUS GAME +############################################################################# + +GOBJ_ = \ + $(B)/base/game/g_main.o \ + $(B)/base/game/bg_misc.o \ + $(B)/base/game/bg_pmove.o \ + $(B)/base/game/bg_slidemove.o \ + $(B)/base/game/bg_lib.o \ + $(B)/base/game/bg_alloc.o \ + $(B)/base/game/bg_voice.o \ + $(B)/base/game/g_active.o \ + $(B)/base/game/g_client.o \ + $(B)/base/game/g_cmds.o \ + $(B)/base/game/g_combat.o \ + $(B)/base/game/g_physics.o \ + $(B)/base/game/g_buildable.o \ + $(B)/base/game/g_misc.o \ + $(B)/base/game/g_missile.o \ + $(B)/base/game/g_mover.o \ + $(B)/base/game/g_session.o \ + $(B)/base/game/g_spawn.o \ + $(B)/base/game/g_svcmds.o \ + $(B)/base/game/g_target.o \ + $(B)/base/game/g_team.o \ + $(B)/base/game/g_trigger.o \ + $(B)/base/game/g_utils.o \ + $(B)/base/game/g_maprotation.o \ + $(B)/base/game/g_weapon.o \ + $(B)/base/game/g_admin.o \ + $(B)/base/game/g_namelog.o \ + \ + $(B)/base/qcommon/q_math.o \ + $(B)/base/qcommon/q_shared.o + +GOBJ = $(GOBJ_) $(B)/base/game/g_syscalls.o +GVMOBJ = $(GOBJ_:%.o=%.asm) + +$(B)/base/game$(SHLIBNAME): $(GOBJ) + $(echo_cmd) "LD $@" + $(Q)$(CC) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(GOBJ) + +$(B)/base/vm/game.qvm: $(GVMOBJ) $(GDIR)/g_syscalls.asm $(Q3ASM) + $(echo_cmd) "Q3ASM $@" + $(Q)$(Q3ASM) -o $@ $(GVMOBJ) $(GDIR)/g_syscalls.asm + + + +############################################################################# +## TREMULOUS UI +############################################################################# + +UIOBJ_ = \ + $(B)/base/ui/ui_main.o \ + $(B)/base/ui/ui_atoms.o \ + $(B)/base/ui/ui_shared.o \ + $(B)/base/ui/ui_gameinfo.o \ + \ + $(B)/base/ui/bg_misc.o \ + $(B)/base/ui/bg_lib.o \ + $(B)/base/qcommon/q_math.o \ + $(B)/base/qcommon/q_shared.o + +UIOBJ = $(UIOBJ_) $(B)/base/ui/ui_syscalls.o +UIVMOBJ = $(UIOBJ_:%.o=%.asm) + +$(B)/base/ui$(SHLIBNAME): $(UIOBJ) + $(echo_cmd) "LD $@" + $(Q)$(CC) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(UIOBJ) + +$(B)/base/vm/ui.qvm: $(UIVMOBJ) $(UIDIR)/ui_syscalls.asm $(Q3ASM) + $(echo_cmd) "Q3ASM $@" + $(Q)$(Q3ASM) -o $@ $(UIVMOBJ) $(UIDIR)/ui_syscalls.asm + + + +############################################################################# +## CLIENT/SERVER RULES +############################################################################# + +$(B)/client/%.o: $(ASMDIR)/%.s + $(DO_AS) + +$(B)/client/%.o: $(CDIR)/%.c + $(DO_CC) + +$(B)/client/%.o: $(SDIR)/%.c + $(DO_CC) + +$(B)/client/%.o: $(CMDIR)/%.c + $(DO_CC) + +$(B)/client/%.o: $(JPDIR)/%.c + $(DO_CC) + +$(B)/client/%.o: $(SPEEXDIR)/%.c + $(DO_CC) + +$(B)/client/%.o: $(ZDIR)/%.c + $(DO_CC) + +$(B)/client/%.o: $(RDIR)/%.c + $(DO_CC) + +$(B)/client/%.o: $(SDLDIR)/%.c + $(DO_CC) + +$(B)/clientsmp/%.o: $(SDLDIR)/%.c + $(DO_SMP_CC) + +$(B)/client/%.o: $(SYSDIR)/%.c + $(DO_CC) + +$(B)/client/%.o: $(SYSDIR)/%.m + $(DO_CC) + +$(B)/client/%.o: $(SYSDIR)/%.rc + $(DO_WINDRES) + + +$(B)/ded/%.o: $(ASMDIR)/%.s + $(DO_AS) + +$(B)/ded/%.o: $(SDIR)/%.c + $(DO_DED_CC) + +$(B)/ded/%.o: $(CMDIR)/%.c + $(DO_DED_CC) + +$(B)/ded/%.o: $(ZDIR)/%.c + $(DO_DED_CC) + +$(B)/ded/%.o: $(SYSDIR)/%.c + $(DO_DED_CC) + +$(B)/ded/%.o: $(SYSDIR)/%.m + $(DO_DED_CC) + +$(B)/ded/%.o: $(SYSDIR)/%.rc + $(DO_WINDRES) + +$(B)/ded/%.o: $(NDIR)/%.c + $(DO_DED_CC) + +# Extra dependencies to ensure the SVN version is incorporated +ifeq ($(USE_SVN),1) + $(B)/client/cl_console.o : .svn/entries + $(B)/client/common.o : .svn/entries + $(B)/ded/common.o : .svn/entries +endif + + +############################################################################# +## GAME MODULE RULES +############################################################################# + +$(B)/base/cgame/bg_%.o: $(GDIR)/bg_%.c + $(DO_CGAME_CC) + +$(B)/base/cgame/%.o: $(CGDIR)/%.c + $(DO_CGAME_CC) + +$(B)/base/cgame/bg_%.asm: $(GDIR)/bg_%.c $(Q3LCC) + $(DO_CGAME_Q3LCC) + +$(B)/base/cgame/%.asm: $(CGDIR)/%.c $(Q3LCC) + $(DO_CGAME_Q3LCC) + + +$(B)/base/game/%.o: $(GDIR)/%.c + $(DO_GAME_CC) + +$(B)/base/game/%.asm: $(GDIR)/%.c $(Q3LCC) + $(DO_GAME_Q3LCC) + + +$(B)/base/ui/bg_%.o: $(GDIR)/bg_%.c + $(DO_UI_CC) + +$(B)/base/ui/%.o: $(UIDIR)/%.c + $(DO_UI_CC) + +$(B)/base/ui/bg_%.asm: $(GDIR)/bg_%.c $(Q3LCC) + $(DO_UI_Q3LCC) + +$(B)/base/ui/%.asm: $(UIDIR)/%.c $(Q3LCC) + $(DO_UI_Q3LCC) + + +$(B)/base/qcommon/%.o: $(CMDIR)/%.c + $(DO_SHLIB_CC) + +$(B)/base/qcommon/%.asm: $(CMDIR)/%.c $(Q3LCC) + $(DO_Q3LCC) + + +############################################################################# +# MISC +############################################################################# + +OBJ = $(Q3OBJ) $(Q3POBJ) $(Q3POBJ_SMP) $(Q3DOBJ) \ + $(GOBJ) $(CGOBJ) $(UIOBJ) \ + $(GVMOBJ) $(CGVMOBJ) $(UIVMOBJ) +TOOLSOBJ = $(LBURGOBJ) $(Q3CPPOBJ) $(Q3RCCOBJ) $(Q3LCCOBJ) $(Q3ASMOBJ) + + +clean: clean-debug clean-release + @$(MAKE) -C $(MASTERDIR) clean + +clean-debug: + @$(MAKE) clean2 B=$(BD) + +clean-release: + @$(MAKE) clean2 B=$(BR) + +clean2: + @echo "CLEAN $(B)" + @rm -f $(OBJ) + @rm -f $(OBJ_D_FILES) + @rm -f $(TARGETS) + +toolsclean: toolsclean-debug toolsclean-release + +toolsclean-debug: + @$(MAKE) toolsclean2 B=$(BD) + +toolsclean-release: + @$(MAKE) toolsclean2 B=$(BR) + +toolsclean2: + @echo "TOOLS_CLEAN $(B)" + @rm -f $(TOOLSOBJ) + @rm -f $(TOOLSOBJ_D_FILES) + @rm -f $(LBURG) $(DAGCHECK_C) $(Q3RCC) $(Q3CPP) $(Q3LCC) $(Q3ASM) + +distclean: clean toolsclean + @rm -rf $(BUILD_DIR) + +dist: + rm -rf tremulous-$(SVN_VERSION) + svn export . tremulous-$(SVN_VERSION) + tar --owner=root --group=root --force-local -cjf tremulous-$(SVN_VERSION).tar.bz2 tremulous-$(SVN_VERSION) + rm -rf tremulous-$(SVN_VERSION) + +############################################################################# +# DEPENDENCIES +############################################################################# + +ifneq ($(B),) + OBJ_D_FILES=$(filter %.d,$(OBJ:%.o=%.d)) + TOOLSOBJ_D_FILES=$(filter %.d,$(TOOLSOBJ:%.o=%.d)) + -include $(OBJ_D_FILES) $(TOOLSOBJ_D_FILES) +endif + +.PHONY: all clean clean2 clean-debug clean-release copyfiles \ + debug default dist distclean makedirs \ + release targets \ + toolsclean toolsclean2 toolsclean-debug toolsclean-release \ + $(OBJ_D_FILES) $(TOOLSOBJ_D_FILES) diff --git a/assets/armour/bsuit.armour b/assets/armour/bsuit.armour new file mode 100755 index 0000000..c05a09d --- /dev/null +++ b/assets/armour/bsuit.armour @@ -0,0 +1,19 @@ + +{ + name "bsuit body" + minHeight 0.0 + maxHeight 0.8 + minAngle 0 + maxAngle 360 + modifier 0.2 +} + +{ + name "bsuit head" + minHeight 0.8 + maxHeight 1.0 + minAngle 0 + maxAngle 360 + modifier 0.27 +} + diff --git a/assets/armour/helmet.armour b/assets/armour/helmet.armour new file mode 100755 index 0000000..f595bf2 --- /dev/null +++ b/assets/armour/helmet.armour @@ -0,0 +1,19 @@ + +{ + name "helmet" + minHeight 0.8 + maxHeight 1.0 + minAngle 0 + maxAngle 360 + modifier 0.4 +} + +{ + name "helmet crouch" + minHeight 0.7 + maxHeight 1.0 + minAngle 0 + maxAngle 360 + modifier 0.4 + crouch +} diff --git a/assets/armour/larmour.armour b/assets/armour/larmour.armour new file mode 100755 index 0000000..5e313fa --- /dev/null +++ b/assets/armour/larmour.armour @@ -0,0 +1,95 @@ + +{ + name "larmour chest" + minHeight 0.5 + maxHeight 0.8 + minAngle 310 + maxAngle 50 + modifier 0.35 +} + +{ + name "larmour left arm" + minHeight 0.5 + maxHeight 0.8 + minAngle 50 + maxAngle 130 + modifier 0.3 +} + +{ + name "larmour back" + minHeight 0.5 + maxHeight 0.8 + minAngle 130 + maxAngle 230 + modifier 0.4 +} + +{ + name "larmour right arm" + minHeight 0.5 + maxHeight 0.8 + minAngle 230 + maxAngle 310 + modifier 0.3 +} + +{ + name "larmour legs" + minHeight 0.0 + maxHeight 0.5 + minAngle 0 + maxAngle 360 + modifier 0.3 +} + +{ + name "larmour chest crouch" + minHeight 0.3 + maxHeight 0.7 + minAngle 310 + maxAngle 50 + modifier 0.35 + crouch +} + +{ + name "larmour left arm crouch" + minHeight 0.3 + maxHeight 0.7 + minAngle 50 + maxAngle 130 + modifier 0.3 + crouch +} + +{ + name "larmour back crouch" + minHeight 0.3 + maxHeight 0.7 + minAngle 130 + maxAngle 230 + modifier 0.4 + crouch +} + +{ + name "larmour right arm crouch" + minHeight 0.3 + maxHeight 0.7 + minAngle 230 + maxAngle 310 + modifier 0.3 + crouch +} + +{ + name "larmour legs crouch" + minHeight 0.0 + maxHeight 0.3 + minAngle 0 + maxAngle 360 + modifier 0.3 + crouch +} diff --git a/assets/configs/buildables/acid_tube.cfg b/assets/configs/buildables/acid_tube.cfg new file mode 100755 index 0000000..e44ed48 --- /dev/null +++ b/assets/configs/buildables/acid_tube.cfg @@ -0,0 +1,5 @@ +model 0 models/buildables/acid_tube/acid_tube.md3 +modelScale 0.6 +mins -15 -15 -15 +maxs 15 15 15 +zOffset -8.5 diff --git a/assets/configs/buildables/arm.cfg b/assets/configs/buildables/arm.cfg new file mode 100755 index 0000000..3e45fc2 --- /dev/null +++ b/assets/configs/buildables/arm.cfg @@ -0,0 +1,5 @@ +model 0 models/buildables/arm/arm.md3 +modelScale 1.0 +mins -40 -40 -13 +maxs 40 40 50 +zOffset -2.0 diff --git a/assets/configs/buildables/barricade.cfg b/assets/configs/buildables/barricade.cfg new file mode 100755 index 0000000..5614647 --- /dev/null +++ b/assets/configs/buildables/barricade.cfg @@ -0,0 +1,5 @@ +model 0 models/buildables/barricade/barricade.md3 +modelScale 1.0 +mins -35 -35 -15 +maxs 35 35 60 +zOffset 0 diff --git a/assets/configs/buildables/booster.cfg b/assets/configs/buildables/booster.cfg new file mode 100755 index 0000000..b0903df --- /dev/null +++ b/assets/configs/buildables/booster.cfg @@ -0,0 +1,5 @@ +model 0 models/buildables/booster/booster.md3 +modelScale 1.0 +mins -26 -26 -9 +maxs 26 26 9 +zOffset 0 diff --git a/assets/configs/buildables/dcc.cfg b/assets/configs/buildables/dcc.cfg new file mode 100755 index 0000000..932e302 --- /dev/null +++ b/assets/configs/buildables/dcc.cfg @@ -0,0 +1,5 @@ +model 0 models/buildables/dcc/dcc.md3 +modelScale 1.0 +mins -35 -35 -13 +maxs 35 35 47 +zOffset 0 diff --git a/assets/configs/buildables/eggpod.cfg b/assets/configs/buildables/eggpod.cfg new file mode 100755 index 0000000..71cb6c7 --- /dev/null +++ b/assets/configs/buildables/eggpod.cfg @@ -0,0 +1,5 @@ +model 0 models/buildables/eggpod/eggpod.md3 +modelScale 1.0 +mins -15 -15 -15 +maxs 15 15 15 +zOffset 0 diff --git a/assets/configs/buildables/hive.cfg b/assets/configs/buildables/hive.cfg new file mode 100755 index 0000000..bd427a2 --- /dev/null +++ b/assets/configs/buildables/hive.cfg @@ -0,0 +1,5 @@ +model 0 models/buildables/hive/hive.md3 +modelScale 1.0 +mins -20 -20 -20 +maxs 20 20 20 +zOffset -10 diff --git a/assets/configs/buildables/hovel.cfg b/assets/configs/buildables/hovel.cfg new file mode 100755 index 0000000..5e2922c --- /dev/null +++ b/assets/configs/buildables/hovel.cfg @@ -0,0 +1,5 @@ +model 0 models/buildables/hovel/hovel.md3 +modelScale 1.0 +mins -50 -50 -20 +maxs 50 50 20 +zOffset 0 diff --git a/assets/configs/buildables/medistat.cfg b/assets/configs/buildables/medistat.cfg new file mode 100755 index 0000000..179a052 --- /dev/null +++ b/assets/configs/buildables/medistat.cfg @@ -0,0 +1,5 @@ +model 0 models/buildables/medistat/medistat.md3 +modelScale 1.0 +mins -35 -35 -7 +maxs 35 35 4 +zOffset 0 diff --git a/assets/configs/buildables/mgturret.cfg b/assets/configs/buildables/mgturret.cfg new file mode 100755 index 0000000..83a2309 --- /dev/null +++ b/assets/configs/buildables/mgturret.cfg @@ -0,0 +1,7 @@ +model 0 models/buildables/mgturret/turret_base.md3 +model 1 models/buildables/mgturret/turret_barrel.md3 +model 2 models/buildables/mgturret/turret_top.md3 +modelScale 1.0 +mins -25 -25 -20 +maxs 25 25 20 +zOffset 0 diff --git a/assets/configs/buildables/overmind.cfg b/assets/configs/buildables/overmind.cfg new file mode 100755 index 0000000..f9baca5 --- /dev/null +++ b/assets/configs/buildables/overmind.cfg @@ -0,0 +1,5 @@ +model 0 models/buildables/overmind/overmind.md3 +modelScale 1.0 +mins -45 -45 -15 +maxs 45 45 95 +zOffset 0 diff --git a/assets/configs/buildables/reactor.cfg b/assets/configs/buildables/reactor.cfg new file mode 100755 index 0000000..d724c44 --- /dev/null +++ b/assets/configs/buildables/reactor.cfg @@ -0,0 +1,5 @@ +model 0 models/buildables/reactor/reactor.md3 +mins -41 -41 -15 +maxs 41 41 95 +zOffset -2.0 +modelScale 0.85 diff --git a/assets/configs/buildables/repeater.cfg b/assets/configs/buildables/repeater.cfg new file mode 100755 index 0000000..eec2824 --- /dev/null +++ b/assets/configs/buildables/repeater.cfg @@ -0,0 +1,5 @@ +model 0 models/buildables/repeater/repeater.md3 +modelScale 1.0 +mins -15 -15 -15 +maxs 15 15 25 +zOffset 0 diff --git a/assets/configs/buildables/telenode.cfg b/assets/configs/buildables/telenode.cfg new file mode 100755 index 0000000..173a92f --- /dev/null +++ b/assets/configs/buildables/telenode.cfg @@ -0,0 +1,5 @@ +model 0 models/buildables/telenode/telenode.md3 +modelScale 1.0 +mins -40 -40 -4 +maxs 40 40 6 +zOffset 0 diff --git a/assets/configs/buildables/tesla.cfg b/assets/configs/buildables/tesla.cfg new file mode 100755 index 0000000..36d1e33 --- /dev/null +++ b/assets/configs/buildables/tesla.cfg @@ -0,0 +1,5 @@ +model 0 models/buildables/tesla/tesla.md3 +modelScale 1.0 +mins -22 -22 -40 +maxs 22 22 40 +zOffset 0 diff --git a/assets/configs/buildables/trapper.cfg b/assets/configs/buildables/trapper.cfg new file mode 100755 index 0000000..0c3f0d0 --- /dev/null +++ b/assets/configs/buildables/trapper.cfg @@ -0,0 +1,5 @@ +model 0 models/buildables/trapper/trapper.md3 +modelScale 1.0 +mins -15 -15 -15 +maxs 15 15 15 +zOffset 0 diff --git a/assets/configs/classes/builder.cfg b/assets/configs/classes/builder.cfg new file mode 100755 index 0000000..dd1d665 --- /dev/null +++ b/assets/configs/classes/builder.cfg @@ -0,0 +1,17 @@ +name "Granger" +model builder +modelScale 1.0 +skin default +shadowScale 1.0 +hud alien_builder_hud + +mins -20 -20 -20 +maxs 20 20 20 +crouchMaxs 20 20 20 +deadMins -20 -20 -4 +deadMaxs 20 20 4 +zOffset 0.0 + +viewheight 0 +crouchViewheight 0 +shoulderOffsets -8 15 13 diff --git a/assets/configs/classes/builderupg.cfg b/assets/configs/classes/builderupg.cfg new file mode 100755 index 0000000..e1b73fc --- /dev/null +++ b/assets/configs/classes/builderupg.cfg @@ -0,0 +1,17 @@ +name "Advanced Granger" +model builder +modelScale 1.0 +skin advanced +shadowScale 1.0 +hud alien_builder_hud + +mins -20 -20 -20 +maxs 20 20 20 +crouchMaxs 20 20 20 +deadMins -20 -20 -4 +deadMaxs 20 20 4 +zOffset 0.0 + +viewheight 0 +crouchViewheight 0 +shoulderOffsets -8 15 13 diff --git a/assets/configs/classes/human_base.cfg b/assets/configs/classes/human_base.cfg new file mode 100755 index 0000000..6749bad --- /dev/null +++ b/assets/configs/classes/human_base.cfg @@ -0,0 +1,17 @@ +name "Human Base" +model human_base +modelScale 1.0 +skin default +shadowScale 1.0 +hud human_hud + +mins -15 -15 -24 +maxs 15 15 32 +crouchMaxs 15 15 16 +deadMins -15 -15 -4 +deadMaxs 15 15 4 +zOffset -2.0 + +viewheight 24 +crouchViewheight 7 +shoulderOffsets -10 15 0 diff --git a/assets/configs/classes/human_bsuit.cfg b/assets/configs/classes/human_bsuit.cfg new file mode 100755 index 0000000..0cdca1e --- /dev/null +++ b/assets/configs/classes/human_bsuit.cfg @@ -0,0 +1,17 @@ +name "Human Battlesuit" +model human_bsuit +modelScale 1.0 +skin default +shadowScale 1.0 +hud human_hud + +mins -15 -15 -38 +maxs 15 15 38 +crouchMaxs 15 15 38 +deadMins -15 -15 -4 +deadMaxs 15 15 4 +zOffset -16.0 + +viewheight 29 +crouchViewheight 29 +shoulderOffsets -30 25 -2 diff --git a/assets/configs/classes/level0.cfg b/assets/configs/classes/level0.cfg new file mode 100755 index 0000000..1497918 --- /dev/null +++ b/assets/configs/classes/level0.cfg @@ -0,0 +1,17 @@ +name "Dretch" +model level0 +modelScale 1.2 +skin default +shadowScale 0.5 +hud alien_general_hud + +mins -15 -15 -15 +maxs 15 15 15 +crouchMaxs 15 15 15 +deadMins -15 -15 -15 +deadMaxs 15 15 15 +zOffset -5.0 + +viewheight 0 +crouchViewheight 0 +shoulderOffsets -5 0 17 diff --git a/assets/configs/classes/level1.cfg b/assets/configs/classes/level1.cfg new file mode 100755 index 0000000..3add57e --- /dev/null +++ b/assets/configs/classes/level1.cfg @@ -0,0 +1,17 @@ +name "Basilisk" +model level1 +modelScale 1.0 +skin default +shadowScale 1.0 +hud alien_general_hud + +mins -18 -18 -18 +maxs 18 18 18 +crouchMaxs 18 18 18 +deadMins -18 -18 -4 +deadMaxs 18 18 4 +zOffset 0.0 + +viewheight 0 +crouchViewheight 0 +shoulderOffsets -10 0 18 diff --git a/assets/configs/classes/level1upg.cfg b/assets/configs/classes/level1upg.cfg new file mode 100755 index 0000000..28a4beb --- /dev/null +++ b/assets/configs/classes/level1upg.cfg @@ -0,0 +1,17 @@ +name "Advanced Basilisk" +model level1 +modelScale 1.1666 +skin upgrade +shadowScale 1.0 +hud alien_general_hud + +mins -21 -21 -21 +maxs 21 21 21 +crouchMaxs 21 21 21 +deadMins -21 -21 -4.666 +deadMaxs 21 21 4.666 +zOffset 0.0 + +viewheight 0 +crouchViewheight 0 +shoulderOffsets -10 0 18 diff --git a/assets/configs/classes/level2.cfg b/assets/configs/classes/level2.cfg new file mode 100755 index 0000000..73fc4ab --- /dev/null +++ b/assets/configs/classes/level2.cfg @@ -0,0 +1,17 @@ +name "Marauder" +model level2 +modelScale 1.0 +skin default +shadowScale 1.0 +hud alien_general_hud + +mins -23 -23 -22 +maxs 23 23 14 +crouchMaxs 23 23 14 +deadMins -23 -23 -4 +deadMaxs 23 23 4 +zOffset 0.0 + +viewheight 8 +crouchViewheight 8 +shoulderOffsets 0 12 5 diff --git a/assets/configs/classes/level2upg.cfg b/assets/configs/classes/level2upg.cfg new file mode 100755 index 0000000..3ef853f --- /dev/null +++ b/assets/configs/classes/level2upg.cfg @@ -0,0 +1,17 @@ +name "Advanced Marauder" +model level2 +modelScale 1.1 +skin adv +shadowScale 1.0 +hud alien_general_hud + +mins -25 -25 -24 +maxs 25 25 16 +crouchMaxs 25 25 16 +deadMins -25 -25 -4 +deadMaxs 25 25 4 +zOffset 0.0 + +viewheight 10 +crouchViewheight 10 +shoulderOffsets 0 12 5 diff --git a/assets/configs/classes/level3.cfg b/assets/configs/classes/level3.cfg new file mode 100755 index 0000000..6073201 --- /dev/null +++ b/assets/configs/classes/level3.cfg @@ -0,0 +1,17 @@ +name "Dragoon" +model level3 +modelScale 1.0 +skin default +shadowScale 1.0 +hud alien_general_hud + +mins -26 -26 -23 +maxs 26 26 32 +crouchMaxs 26 26 32 +deadMins -26 -26 -4 +deadMaxs 26 26 4 +zOffset 0.0 + +viewheight 24 +crouchViewheight 24 +shoulderOffsets -10 15 8 diff --git a/assets/configs/classes/level3upg.cfg b/assets/configs/classes/level3upg.cfg new file mode 100755 index 0000000..e0e7455 --- /dev/null +++ b/assets/configs/classes/level3upg.cfg @@ -0,0 +1,17 @@ +name "Advanced Dragoon" +model level3 +modelScale 1.15 +skin adv +shadowScale 1.0 +hud alien_general_hud + +mins -29 -29 -29 +maxs 29 29 37 +crouchMaxs 29 29 38 +deadMins -29 -29 -4 +deadMaxs 29 29 4 +zOffset 0.0 + +viewheight 27 +crouchViewheight 27 +shoulderOffsets -10 17 12 diff --git a/assets/configs/classes/level4.cfg b/assets/configs/classes/level4.cfg new file mode 100755 index 0000000..ad8482e --- /dev/null +++ b/assets/configs/classes/level4.cfg @@ -0,0 +1,17 @@ +name "Tyrant" +model level4 +modelScale 1.0 +skin default +shadowScale 2.0 +hud alien_general_hud + +mins -32 -32 -22 +maxs 32 32 70 +crouchMaxs 32 32 70 +deadMins -32 -32 -34 +deadMaxs 32 32 34 +zOffset 0.0 + +viewheight 64 +crouchViewheight 64 +shoulderOffsets -20 -25 30 diff --git a/assets/configs/classes/spectator.cfg b/assets/configs/classes/spectator.cfg new file mode 100755 index 0000000..bfe7bf2 --- /dev/null +++ b/assets/configs/classes/spectator.cfg @@ -0,0 +1,17 @@ +name "Spectator" +model "" +modelScale 1.0 +skin "" +shadowScale 1.0 +hud "" + +mins -15 -15 -15 +maxs 15 15 15 +crouchMaxs 15 15 15 +deadMins -15 -15 -15 +deadMaxs 15 15 15 +zOffset 0.0 + +viewheight 0 +crouchViewheight 0 +shoulderOffsets 0 0 0 diff --git a/assets/models/buildables/acid_tube/animation.cfg b/assets/models/buildables/acid_tube/animation.cfg new file mode 100755 index 0000000..19f616e --- /dev/null +++ b/assets/models/buildables/acid_tube/animation.cfg @@ -0,0 +1,15 @@ +//acid tube +0 12 0 24 // CONSTRUCT1 +0 12 0 24 // CONSTRUCT2 +12 1 0 24 // IDLE1 +0 0 0 0 // IDLE2 +0 0 0 0 // IDLE3 +13 19 0 24 // ATTACK1 +0 0 0 1 // ATTACK2 +0 0 0 1 // SPAWN1 +0 0 0 1 // SPAWN2 +12 8 0 12 // PAIN1 +0 0 0 1 // PAIN2 +0 -12 0 16 // DESTROY +12 0 0 12 // DESTROY2 +0 1 1 1 // DESTROYED diff --git a/assets/models/buildables/barricade/animation.cfg b/assets/models/buildables/barricade/animation.cfg new file mode 100755 index 0000000..b4703ea --- /dev/null +++ b/assets/models/buildables/barricade/animation.cfg @@ -0,0 +1,17 @@ +//barricade +0 12 0 24 // CONSTRUCT1 +0 12 0 24 // CONSTRUCT1 +12 1 1 24 // IDLE1 +0 0 0 24 // IDLE2 +0 0 0 0 // IDLE3 +39 9 0 48 // ATTACK1 (shrink) +39 -9 0 48 // ATTACK2 (unshrink) +0 0 0 0 // SPAWN1 +0 0 0 0 // SPAWN2 +12 12 0 24 // PAIN1 +48 1 0 24 // PAIN2 +36 12 0 24 // DESTROY +0 0 0 0 // DESTROY2 +48 1 1 1 // DEAD + +//12 frames for each pain, 6 going down 6 going up diff --git a/assets/models/buildables/medistat/animation.cfg b/assets/models/buildables/medistat/animation.cfg new file mode 100755 index 0000000..5a5ab0f --- /dev/null +++ b/assets/models/buildables/medistat/animation.cfg @@ -0,0 +1,18 @@ +//medistation +0 8 0 24 // CONSTRUCT +0 8 0 24 // CONSTRUCT +8 19 19 12 // IDLE +32 1 1 1 // IDLE2-HEAL +0 1 1 1 // IDLE3-NOPOWER +27 6 0 24 // ATTACK1-HEAL +0 0 0 0 // ATTACK2 +0 0 0 0 // SPAWN1 +0 0 0 0 // SPAWN2 +0 0 0 0 // PAIN1 +0 0 0 0 // PAIN2 +33 1 0 5 // DESTROY +0 0 0 0 // DESTROY2 +33 1 1 1 // DEAD + +//attack is the heal activate +//idle2 is the heal idle diff --git a/assets/models/buildables/mgturret/animation.cfg b/assets/models/buildables/mgturret/animation.cfg new file mode 100755 index 0000000..7b80fb7 --- /dev/null +++ b/assets/models/buildables/mgturret/animation.cfg @@ -0,0 +1,15 @@ +//mgturret +0 1 0 1 // CONSTRUCT1 +0 1 0 1 // CONSTRUCT1 +0 1 1 1 // IDLE1 +0 1 1 1 // IDLE2 +0 1 1 1 // IDLE3-NOPOWER +1 1 0 10 // ATTACK1 +0 1 0 0 // ATTACK2 +0 1 0 0 // SPAWN1 +0 1 0 0 // SPAWN2 +0 1 0 0 // PAIN1 +0 1 0 0 // PAIN2 +0 1 0 1 // DESTROY1 +0 1 0 0 // DESTROY2 +0 1 1 1 // DEAD diff --git a/assets/models/buildables/repeater/animation.cfg b/assets/models/buildables/repeater/animation.cfg new file mode 100755 index 0000000..fdfdb65 --- /dev/null +++ b/assets/models/buildables/repeater/animation.cfg @@ -0,0 +1,15 @@ +//repeater +0 12 0 24 // CONSTRUCT1 +0 12 0 24 // CONSTRUCT1 +12 24 24 36 // IDLE1 +0 0 0 0 // IDLE2 +12 24 24 6 // IDLE3-NOPOWER +0 0 0 0 // ATTACK1 +0 0 0 0 // ATTACK2 +0 0 0 0 // SPAWN1 +0 0 0 0 // SPAWN2 +0 0 0 0 // PAIN1 +0 0 0 0 // PAIN2 +37 1 0 5 // DESTROY +0 0 0 0 // DESTROY2 +37 1 1 1 // DEAD diff --git a/assets/models/buildables/tesla/animation.cfg b/assets/models/buildables/tesla/animation.cfg new file mode 100755 index 0000000..2c3f1d9 --- /dev/null +++ b/assets/models/buildables/tesla/animation.cfg @@ -0,0 +1,15 @@ +// tesla +0 8 0 12 // CONSTRUCT1 +0 8 0 12 // CONSTRUCT1 +8 24 24 24 // IDLE1 +0 0 0 0 // IDLE2 +32 1 1 1 // IDLE3-NOPOWER +0 0 0 0 // ATTACK1 +0 0 0 0 // ATTACK2 +0 0 0 0 // SPAWN1 +0 0 0 0 // SPAWN2 +0 0 0 0 // PAIN1 +0 0 0 0 // PAIN2 +32 2 0 12 // DESTROY1 +0 0 0 0 // DESTROY2 +34 1 1 1 // DESTROYED diff --git a/assets/models/players/human_base/locdamage.cfg b/assets/models/players/human_base/locdamage.cfg new file mode 100755 index 0000000..3beeb16 --- /dev/null +++ b/assets/models/players/human_base/locdamage.cfg @@ -0,0 +1,60 @@ +// These regions must cover the entire body and cannot overlap otherwise +// the non-locational damage calculation will not be correct! + +{ + name "legs" + minHeight 0.0 + maxHeight 0.5 + minAngle 0 + maxAngle 360 + modifier 0.5 +} + +{ + name "torso" + minHeight 0.5 + maxHeight 0.8 + minAngle 0 + maxAngle 360 + modifier 1.0 +} + +{ + name "head" + minHeight 0.8 + maxHeight 1.0 + minAngle 0 + maxAngle 360 + modifier 1.5 +} + +{ + name "legs crouch" + minHeight 0.0 + maxHeight 0.3 + minAngle 0 + maxAngle 360 + modifier 0.5 + crouch +} + +{ + name "torso crouch" + minHeight 0.3 + maxHeight 0.7 + minAngle 0 + maxAngle 360 + modifier 1.0 + crouch +} + +{ + name "head crouch" + minHeight 0.7 + maxHeight 1.0 + minAngle 0 + maxAngle 360 + modifier 1.5 + crouch +} + diff --git a/assets/models/players/human_bsuit/locdamage.cfg b/assets/models/players/human_bsuit/locdamage.cfg new file mode 100755 index 0000000..a2ed6d9 --- /dev/null +++ b/assets/models/players/human_bsuit/locdamage.cfg @@ -0,0 +1,29 @@ +// These regions must cover the entire body and cannot overlap otherwise +// the non-locational damage calculation will not be correct! + +{ + name "legs" + minHeight 0.0 + maxHeight 0.5 + minAngle 0 + maxAngle 360 + modifier 0.5 +} + +{ + name "torso" + minHeight 0.5 + maxHeight 0.8 + minAngle 0 + maxAngle 360 + modifier 1.0 +} + +{ + name "head" + minHeight 0.8 + maxHeight 1.0 + minAngle 0 + maxAngle 360 + modifier 1.5 +} diff --git a/assets/models/players/level1/animation.cfg b/assets/models/players/level1/animation.cfg new file mode 100755 index 0000000..1c474f9 --- /dev/null +++ b/assets/models/players/level1/animation.cfg @@ -0,0 +1,48 @@ +// animation config file +// Tremulous: level1 alien + +sex n + +// first frame, num frames, looping frames, frames per second + +footsteps none + +nonsegmented + +0 40 40 30 //NSPA_STAND + +41 141 0 60 //NSPA_GESTURE + +182 31 31 30 //NSPA_WALK +182 31 31 60 //NSPA_RUN +182 -31 31 60 //NSPA_RUNBACK + +0 0 0 30 //NSPA_CHARGE + +213 31 31 60 //NSPA_RUNLEFT +213 31 31 30 //NSPA_WALKLEFT +244 31 31 60 //NSPA_RUNRIGHT +244 31 31 30 //NSPA_WALKRIGHT + +182 31 31 30 //NSPA_SWIM + +275 41 20 30 //NSPA_JUMP +316 20 0 30 //NSPA_LAND +275 41 20 30 //NSPA_JUMPBACK +316 20 0 30 //NSPA_LANDBACK + +182 31 31 30 //NSPA_TURN + +336 31 0 30 //NSPA_ATTACK1 +336 31 0 30 //NSPA_ATTACK2 +336 31 0 30 //NSPA_ATTACK3 + +367 11 0 30 //NSPA_PAIN1 +367 11 0 30 //NSPA_PAIN2 + +378 41 0 30 //NSPA_DEATH1 +418 1 0 30 //NSPA_DEAD1 +378 41 0 30 //NSPA_DEATH2 +418 1 0 30 //NSPA_DEAD2 +378 41 0 30 //NSPA_DEATH3 +418 1 0 30 //NSPA_DEAD3 diff --git a/assets/models/weapons/abuild/weapon.cfg b/assets/models/weapons/abuild/weapon.cfg new file mode 100755 index 0000000..46cfdaa --- /dev/null +++ b/assets/models/weapons/abuild/weapon.cfg @@ -0,0 +1,11 @@ +disableIn3rdPerson +crosshair 15 gfx/2d/crosshair-alien_s + +icon icons/icona_builder + +secondary +{ + flashSound 0 models/weapons/abuildupg/flash0.wav + impactFleshSound 0 models/weapons/abuildupg/impactflesh0.wav + alwaysImpact +} diff --git a/assets/models/weapons/abuildupg/weapon.cfg b/assets/models/weapons/abuildupg/weapon.cfg new file mode 100755 index 0000000..0646359 --- /dev/null +++ b/assets/models/weapons/abuildupg/weapon.cfg @@ -0,0 +1,19 @@ +disableIn3rdPerson +crosshair 15 gfx/2d/crosshair-alien_s + +icon icons/icona_builder + +secondary +{ + flashSound 0 models/weapons/abuildupg/flash0.wav + impactFleshSound 0 models/weapons/abuildupg/impactflesh0.wav + alwaysImpact +} + +tertiary +{ + missileModel models/weapons/level3upg/missile.md3 + + impactMark 64 creep + impactSound 0 sound/misc/organic_bounce.wav +} diff --git a/assets/models/weapons/lcannon/weapon.cfg b/assets/models/weapons/lcannon/weapon.cfg new file mode 100755 index 0000000..be3ae30 --- /dev/null +++ b/assets/models/weapons/lcannon/weapon.cfg @@ -0,0 +1,33 @@ +weaponModel models/weapons/lcannon/lcannon.md3 +icon icons/iconw_lucifer +crosshair 48 gfx/2d/crosshair-lcannon_s +idleSound models/weapons/lcannon/idle.wav + +primary +{ + missileSprite 16 gfx/lcannon/primary + missileSpriteCharge 0.25 + missileSound models/weapons/lcannon/missle.wav + missileParticleSystem models/weapons/lcannon/missilePS + + flashDlightColor 1.0 1.0 0.0 + flashSound 0 models/weapons/lcannon/flash0.wav + + impactMark 32 gfx/marks/bullet_mrk + impactSound 0 models/weapons/lcannon/impact0.wav + impactParticleSystem models/weapons/lcannon/impactPS +} + +secondary +{ + missileSprite 16 gfx/lcannon/primary + missileSound models/weapons/lcannon/missle.wav + missileParticleSystem models/weapons/lcannon/secondaryMissilePS + + flashDlightColor 1.0 1.0 0.0 + flashSound 0 models/weapons/lcannon/flash0.wav + + impactMark 8 gfx/marks/bullet_mrk + impactSound 0 models/weapons/lcannon/impact0.wav + impactParticleSystem models/weapons/lcannon/secondaryImpactPS +} diff --git a/assets/models/weapons/level0/weapon.cfg b/assets/models/weapons/level0/weapon.cfg new file mode 100755 index 0000000..2e52551 --- /dev/null +++ b/assets/models/weapons/level0/weapon.cfg @@ -0,0 +1,9 @@ +disableIn3rdPerson +crosshair 15 gfx/2d/crosshair-alien_s + +icon icons/icona_lev0 + +primary +{ + flashSound 0 models/weapons/level0/flash0.wav +} diff --git a/assets/models/weapons/level1/weapon.cfg b/assets/models/weapons/level1/weapon.cfg new file mode 100755 index 0000000..5932283 --- /dev/null +++ b/assets/models/weapons/level1/weapon.cfg @@ -0,0 +1,11 @@ +disableIn3rdPerson +crosshair 15 gfx/2d/crosshair-alien_s + +icon icons/icona_lev1 + +primary +{ + flashSound 0 models/weapons/level1/flash0.wav + impactFleshSound 0 models/weapons/level1/impactflesh0.wav + alwaysImpact +} diff --git a/assets/models/weapons/level1upg/weapon.cfg b/assets/models/weapons/level1upg/weapon.cfg new file mode 100755 index 0000000..5b60e8c --- /dev/null +++ b/assets/models/weapons/level1upg/weapon.cfg @@ -0,0 +1,17 @@ +disableIn3rdPerson +crosshair 15 gfx/2d/crosshair-alien_s + +icon icons/icona_lev1 + +primary +{ + flashSound 0 models/weapons/level1/flash0.wav + impactFleshSound 0 models/weapons/level1/impactflesh0.wav + alwaysImpact +} + +secondary +{ + flashSound 0 models/weapons/level1upg/gas.wav + muzzleParticleSystem models/weapons/level1upg/muzzlePS +} diff --git a/assets/models/weapons/level2/weapon.cfg b/assets/models/weapons/level2/weapon.cfg new file mode 100755 index 0000000..927a731 --- /dev/null +++ b/assets/models/weapons/level2/weapon.cfg @@ -0,0 +1,11 @@ +disableIn3rdPerson +crosshair 15 gfx/2d/crosshair-alien_s + +icon icons/icona_lev2 + +primary +{ + flashSound 0 models/weapons/level2/flash0.wav + impactFleshSound 0 models/weapons/level2/impactflesh0.wav + alwaysImpact +} diff --git a/assets/models/weapons/level2upg/weapon.cfg b/assets/models/weapons/level2upg/weapon.cfg new file mode 100755 index 0000000..7a1f26c --- /dev/null +++ b/assets/models/weapons/level2upg/weapon.cfg @@ -0,0 +1,18 @@ +disableIn3rdPerson + +icon icons/icona_lev2 +crosshair 15 gfx/2d/crosshair-alien_s + +primary +{ + flashSound 0 models/weapons/level2/flash0.wav + impactFleshSound 0 models/weapons/level2/impactflesh0.wav + alwaysImpact +} + +secondary +{ + flashSound 0 models/weapons/level2upg/electric.wav + + impactMark 24 gfx/marks/plasma_mrk +} diff --git a/assets/models/weapons/level3/weapon.cfg b/assets/models/weapons/level3/weapon.cfg new file mode 100755 index 0000000..faa2c18 --- /dev/null +++ b/assets/models/weapons/level3/weapon.cfg @@ -0,0 +1,16 @@ +disableIn3rdPerson +crosshair 15 gfx/2d/crosshair-alien_s + +icon icons/icona_lev3 + +primary +{ + flashSound 0 models/weapons/level3/flash0.wav + impactFleshSound 0 models/weapons/level3/impactflesh0.wav + alwaysImpact +} + +secondary +{ + flashSound 0 models/weapons/level3/pounce.wav +} diff --git a/assets/models/weapons/level3upg/weapon.cfg b/assets/models/weapons/level3upg/weapon.cfg new file mode 100755 index 0000000..51192f7 --- /dev/null +++ b/assets/models/weapons/level3upg/weapon.cfg @@ -0,0 +1,28 @@ +disableIn3rdPerson + +icon icons/icona_lev3 +crosshair 15 gfx/2d/crosshair-alien_s + +primary +{ + flashSound 0 models/weapons/level3/flash0.wav + impactFleshSound 0 models/weapons/level3/impactflesh0.wav + alwaysImpact +} + +secondary +{ + flashSound 0 models/weapons/level3/pounce.wav +} + +tertiary +{ + flashSound 0 models/weapons/level3upg/flash0.wav + + missileModel models/weapons/level3upg/missile.md3 + missileSound models/weapons/level3upg/missile.wav + + impactMark 30 gfx/marks/bullet_mrk + impactSound 0 models/weapons/rifle/ricochet0.wav + impactParticleSystem models/weapons/level3upg/impactPS +} diff --git a/assets/models/weapons/level4/weapon.cfg b/assets/models/weapons/level4/weapon.cfg new file mode 100755 index 0000000..b890af1 --- /dev/null +++ b/assets/models/weapons/level4/weapon.cfg @@ -0,0 +1,11 @@ +disableIn3rdPerson +crosshair 15 gfx/2d/crosshair-alien_s + +icon icons/icona_lev4 + +primary +{ + flashSound 0 models/weapons/level4/flash0.wav + impactFleshSound 0 models/weapons/level4/impactflesh0.wav + alwaysImpact +} diff --git a/assets/models/weapons/mdriver/weapon.cfg b/assets/models/weapons/mdriver/weapon.cfg new file mode 100755 index 0000000..938e7ae --- /dev/null +++ b/assets/models/weapons/mdriver/weapon.cfg @@ -0,0 +1,12 @@ +weaponModel models/weapons/mdriver/mdriver.md3 +icon icons/iconw_driver +crosshair 24 gfx/2d/crosshair-mdriver_s + +primary +{ + flashDlightColor 0.0 1.0 0.0 + flashSound 0 models/weapons/mdriver/flash0.wav + + impactMark 6 gfx/marks/bullet_mrk + impactParticleSystem models/weapons/mdriver/impactPS +} diff --git a/assets/models/weapons/prifle/weapon.cfg b/assets/models/weapons/prifle/weapon.cfg new file mode 100755 index 0000000..ca99f4f --- /dev/null +++ b/assets/models/weapons/prifle/weapon.cfg @@ -0,0 +1,17 @@ +weaponModel models/weapons/prifle/prifle.md3 +icon icons/iconw_pulse +crosshair 24 gfx/2d/crosshair-prifle_s + +primary +{ + missileSprite 3 gfx/prifle/red_blob + missileTrailSystem models/weapons/prifle/missileTS + + flashDlightColor 1.0 0.0 0.0 + flashSound 0 models/weapons/prifle/flash0.wav + + impactMark 16 gfx/marks/bullet_mrk + impactParticleSystem models/weapons/prifle/impactPS + impactSound 0 models/weapons/prifle/impact0.wav + alwaysImpact +} diff --git a/assets/models/weapons/psaw/weapon.cfg b/assets/models/weapons/psaw/weapon.cfg new file mode 100755 index 0000000..7b87940 --- /dev/null +++ b/assets/models/weapons/psaw/weapon.cfg @@ -0,0 +1,13 @@ +weaponModel models/weapons/psaw/psaw.md3 +icon icons/iconw_saw +idleSound models/weapons/psaw/idle.wav +crosshair 24 gfx/2d/crosshair-psaw + +primary +{ + flashDlightColor 1.0 1.0 1.0 + firingSound models/weapons/psaw/firing.wav + + impactParticleSystem models/weapons/psaw/impactPS + alwaysImpact +} \ No newline at end of file diff --git a/assets/scripts/crosshairs.shader b/assets/scripts/crosshairs.shader new file mode 100755 index 0000000..278a296 --- /dev/null +++ b/assets/scripts/crosshairs.shader @@ -0,0 +1,96 @@ +gfx/2d/crosshair-alien_s +{ + nopicmip + { + map gfx/2d/crosshair-alien.tga + blendfunc blend + rgbGen vertex + } +} + +gfx/2d/crosshair-rifle_s +{ + nopicmip + { + map gfx/2d/crosshair-rifle.tga + blendfunc blend + rgbGen vertex + } +} + +gfx/2d/crosshair-prifle_s +{ + nopicmip + { + map gfx/2d/crosshair-prifle.tga + blendfunc blend + rgbGen vertex + } +} + +gfx/2d/crosshair-chaingun_s +{ + nopicmip + { + map gfx/2d/crosshair-chaingun.tga + blendfunc blend + rgbGen vertex + } +} + +gfx/2d/crosshair-mdriver_s +{ + nopicmip + { + map gfx/2d/crosshair-mdriver.tga + blendfunc blend + rgbGen vertex + } +} + +gfx/2d/crosshair-lcannon_s +{ + nopicmip + { + map gfx/2d/crosshair-lcannon.tga + blendfunc blend + rgbGen vertex + } +} + +gfx/2d/crosshair-lgun_s +{ + nopicmip + { + map gfx/2d/crosshair-lgun.tga + blendfunc blend + rgbGen vertex + } +} + +gfx/2d/crosshair-flamer_s +{ + nopicmip + { + clampmap gfx/2d/crosshair-flamer1.tga + blendfunc blend + tcmod rotate 5 + rgbGen vertex + } + { + clampmap gfx/2d/crosshair-flamer1.tga + blendfunc blend + tcmod rotate -5 + rgbGen vertex + } +} + +gfx/2d/crosshair-psaw +{ + nopicmip + { + map gfx/2d/crosshair-psaw.tga + blendfunc blend + rgbGen vertex + } +} \ No newline at end of file diff --git a/assets/scripts/mdriver.trail b/assets/scripts/mdriver.trail new file mode 100755 index 0000000..b1545e6 --- /dev/null +++ b/assets/scripts/mdriver.trail @@ -0,0 +1,10 @@ +models/weapons/mdriver/fireTS +{ + beam + { + shader gfx/mdriver/trail + width 3.0 3.0 + textureType stretch 0.94 0.03 + } + lifeTime 70 +} diff --git a/assets/scripts/misc.particle b/assets/scripts/misc.particle new file mode 100755 index 0000000..40f3cc0 --- /dev/null +++ b/assets/scripts/misc.particle @@ -0,0 +1,378 @@ +firstPersonPoisonCloudPS +{ + ejector + { + particle + { + shader sync gfx/sprites/poisoncloud + + displacement 0 0 0 ~32.0 + + parentVelocityFraction 1.0 + velocityType static + velocityDir linear + velocityMagnitude 16 + velocity 0 0 1 ~0 + + accelerationType static + accelerationDir linear + accelerationMagnitude 300 + acceleration 0 0 1 0 + + radius 0 10.0 40.0 + alpha 0 0.5 0.0 + rotation 0 ~360 - + bounce 0.5 + + lifeTime 1000 + } + + count 400 + delay 0 + period 20 - ~0% + } +} + +poisonCloudedPS +{ + ejector + { + particle + { + shader sync gfx/sprites/poisoncloud + + displacement 0 0 0 ~6.0 + + velocityType static + velocityDir linear + velocityMagnitude 60 + velocity 0 0 0 ~50 + + radius 0 4.0 12.0 + alpha 0 0.25 0.0 + rotation 0 ~360 - + + lifeTime 800 + } + + count 100 + delay 0 + period 50 200 ~0% + } +} + + +alienEvolvePS +{ + ejector + { + particle + { + shader sync gfx/sprites/green_acid + + displacement 0 0 0 ~0 + + velocityType static + velocityDir linear + velocityMagnitude 150~75% + velocity 0 0 1 ~50 + + accelerationType static + accelerationDir linear + accelerationMagnitude 800 + acceleration 0 0 -1 0 + + radius 0 5.0 30.0 + alpha 0 1.0 0.0 + rotation 0 ~360 - + bounce 0.2 + + lifeTime 1000 + } + + count 30 + delay 0 + period 5 - ~0% + } +} + +alienBleedPS +{ + ejector + { + particle + { + shader sync gfx/damage/blood.tga + displacement 0 0 0 0 + + velocityType normal + + velocityDir linear + + velocityMagnitude 15 + velocity 0 0 0 ~35 + + accelerationType static + accelerationDir linear + acceleration 0 0 -1 ~5 + accelerationMagnitude 25 + + radius 0 5 8 + alpha 250 .85 0 + rotation 0 ~-15 ~15 + bounce 0.0 + color 0 { 1.0 1.0 0.6 } - + + lifeTime 400~100 + } + + particle + { + shader sync gfx/damage/blood.tga + displacement 0 0 0 0 + + velocityType normal + + velocityDir linear + + velocityMagnitude 15 + velocity 0 0 0 ~35 + + accelerationType static + accelerationDir linear + acceleration 0 0 -1 ~5 + accelerationMagnitude 25 + + radius 0 5 8 + alpha 250 .85 0 + rotation 0 ~165 ~195 + bounce 0.0 + color 0 { 1.0 1.0 0.6 } - + + lifeTime 400~100 + } + + count 2 + delay 0 + period 0 - 0 + } + + thirdPersonOnly +} + +alienBuildableBleedPS +{ + ejector + { + particle + { + shader sync gfx/damage/blood.tga + displacement 0 0 0 0 + + velocityType normal + + velocityDir linear + + velocityMagnitude 15 + velocity 0 0 0 ~35 + + accelerationType static + accelerationDir linear + acceleration 0 0 -1 ~5 + accelerationMagnitude 25 + + radius 0 5 8 + alpha 250 .85 0 + rotation 0 ~-15 ~15 + bounce 0.0 + color 0 { 1.0 1.0 0.6 } - + + lifeTime 400~100 + } + + particle + { + shader sync gfx/damage/blood.tga + displacement 0 0 0 0 + + velocityType normal + + velocityDir linear + + velocityMagnitude 15 + velocity 0 0 0 ~35 + + accelerationType static + accelerationDir linear + acceleration 0 0 -1 ~5 + accelerationMagnitude 25 + + radius 0 5 8 + alpha 250 .85 0 + rotation 0 ~165 ~195 + bounce 0.0 + color 0 { 1.0 1.0 0.6 } - + + lifeTime 400~100 + } + + count 2 + delay 0 + period 0 - 0 + } +} + + +humanBleedPS +{ + ejector + { + particle + { + shader sync gfx/damage/blood.tga + displacement 0 0 0 0 + + velocityType normal + + velocityDir linear + + velocityMagnitude 15 + velocity 0 0 0 ~35 + + accelerationType static + accelerationDir linear + acceleration 0 0 -1 ~5 + accelerationMagnitude 25 + + radius 0 5 8 + alpha 250 .75 0 + rotation 0 ~-15 ~15 + bounce 0.0 + color 0 { 0.8 0.2 0.2 } - + + lifeTime 400~100 + } + + particle + { + shader sync gfx/damage/blood.tga + displacement 0 0 0 0 + + velocityType normal + + velocityDir linear + + velocityMagnitude 15 + velocity 0 0 0 ~35 + + accelerationType static + accelerationDir linear + acceleration 0 0 -1 ~5 + accelerationMagnitude 25 + + radius 0 5 8 + alpha 250 .75 0 + rotation 0 ~-15 ~15 + bounce 0.0 + color 0 { 0.8 0.2 0.2 } - + + lifeTime 400~100 + } + + count 2 + delay 0 + period 0 - 0 + } + + thirdPersonOnly +} + +humanBuildableBleedPS +{ + ejector + { + particle + { + shader sync flame3 flame4 flame5 flame6 flame7 flame8 flame9 flame10 flame11 flame12 flame13 flame14 flame15 flame16 flame17 flame18 flame19 flame20 flame21 flame22 flame23 flame24 flame25 + displacement 0 0 0 0 + + velocityType normal + + velocityDir linear + + velocityMagnitude 15 + velocity 0 0 0 ~35 + + accelerationType static + accelerationDir linear + acceleration 0 0 -1 ~5 + accelerationMagnitude 25 + + radius 0 5 8 + alpha 250 .75 0 + rotation 0 ~-15 ~15 + bounce 0.0 + color 0 { 0.8 0.2 0.2 } - + + lifeTime 200~50 + } + + particle + { + shader sync flame3 flame4 flame5 flame6 flame7 flame8 flame9 flame10 flame11 flame12 flame13 flame14 flame15 flame16 flame17 flame18 flame19 flame20 flame21 flame22 flame23 flame24 flame25 + displacement 0 0 0 0 + + velocityType normal + + velocityDir linear + + velocityMagnitude 15 + velocity 0 0 0 ~35 + + accelerationType static + accelerationDir linear + acceleration 0 0 -1 ~5 + accelerationMagnitude 25 + + radius 0 5 8 + alpha 250 .75 0 + rotation 0 ~-15 ~15 + bounce 0.0 + color 0 { 0.8 0.2 0.2 } - + + lifeTime 200~50 + } + + count 2 + delay 0 + period 0 - 0 + } + + +} + +disconnectPS +{ + ejector + { + particle + { + shader sync gfx/sprites/bubble + displacement 0 0 0 ~60 + + velocityType static + velocityDir linear + velocityMagnitude 15 + velocity 0 0 1 ~90 + + radius 0 24 32 + alpha 0 1.0 - + + lifeTime 1000~300 + } + + count 3 + delay 0 + period 0 - 0 + } +} diff --git a/assets/scripts/ui.shader b/assets/scripts/ui.shader new file mode 100755 index 0000000..a99d4f7 --- /dev/null +++ b/assets/scripts/ui.shader @@ -0,0 +1,19 @@ +ui/assets/neutral/squad_h +{ + nopicmip + { + map ui/assets/neutral/squad_h.tga + blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + rgbgen vertex + } +} + +ui/assets/neutral/squad_v +{ + nopicmip + { + map ui/assets/neutral/squad_v.tga + blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + rgbgen vertex + } +} diff --git a/assets/scripts/weapons.particle b/assets/scripts/weapons.particle new file mode 100755 index 0000000..5851fc6 --- /dev/null +++ b/assets/scripts/weapons.particle @@ -0,0 +1,890 @@ +models/weapons/hive/missilePS +{ + ejector + { + particle + { + shader 20 models/weapons/hive/sprite1.tga models/weapons/hive/sprite2.tga + + displacement 0 0 0 ~4.0 + + parentVelocityFraction 0.5 + velocityType static + velocityDir linear + velocityMagnitude 100 + velocity 0 0 1 ~180 + + accelerationType cent + accelerationDir point + accelerationMagnitude 2000 + + rotation 0 -20.0~40.0 -20.0~40.0 + radius 0 2.0 2.0 + alpha 0 1.0 0.0 + bounce 0.5 + + lifeTime 4000 + } + + count infinite + delay 0 + period 100 - ~0% + } +} + +models/weapons/rifle/impactPS +{ + ejector + { + particle + { + shader sync gfx/rifle/verysmallrock + + displacement 0 0 0 ~4.0 + + velocityType normal + velocityDir linear + velocityMagnitude 100 + velocity 0 0 0 ~20 + + accelerationType static + accelerationDir linear + accelerationMagnitude 600 + acceleration 0 0 -1 0 + + radius 0 1.0 1.0 + alpha 0 1.0 0.0 + rotation 0 ~360 - + bounce 0.0 + + lifeTime 350 + } + + count 0~2 + delay ~100 + period 0 - ~0% + } + + ejector + { + particle + { + shader sync gfx/sprites/smoke + + displacement 0 0 0 ~1.0 + normalDisplacement 3.0 + + velocityType normal + velocityDir linear + velocityMagnitude 20 + velocity 0 0 0 0 + + accelerationType static + accelerationDir linear + accelerationMagnitude 300 + acceleration 0 0 1 0 + + radius 0 4.0 6.0 + alpha 0 0.5 0.0 + rotation 0 ~360 - + bounce 0.0 + + lifeTime 250 + } + + count 1 + delay 0 + period 0 - ~0% + } + + ejector + { + particle + { + shader sync gfx/blaster/orange_particle + + normalDisplacement 3.0 + + velocityType normal + velocityDir linear + velocityMagnitude 200 + velocity 0 0 0 ~160 + + accelerationType static + accelerationDir linear + accelerationMagnitude 600 + acceleration 0 0 -1 0 + + radius 0 3.0 0.0 + alpha 0 1.0 0.0 + rotation 0 ~360 - + bounce 0.0 + + lifeTime 200 + } + + count 0~1 + delay 0 + period 0 - ~0% + } +} + +models/weapons/rifle/muzzlePS +{ + ejector + { + particle + { + shader sync gfx/sprites/smoke + + displacement 0 0 0 ~0.0 + + parentVelocityFraction 0.9 + + velocityType static + velocityDir linear + velocityMagnitude 20 + velocity 0 0 0 0 + + accelerationType static + accelerationDir linear + accelerationMagnitude 300 + acceleration 0 0 1 0 + + radius 0 2.0 4.0 + alpha 0 0.4 0.0 + rotation 0 ~360 - + bounce 0.0 + + lifeTime 200 + } + + count 1 + delay 0 + period 0 - ~0% + } + + ejector + { + particle + { + model models/weapons/shells/rifle-shell.md3 + + displacement -5 -3 0 ~0.0 + + parentVelocityFraction 0.85 + + velocityType static_transform + velocityDir linear + velocityMagnitude 200 + velocity 0 -1 3 ~10 + + accelerationType static + accelerationDir linear + accelerationMagnitude 800 + acceleration 0 0 -1 0 + + radius 0 1.0 - + bounce 0.5 + + lifeTime 5000 + } + + count 1 + delay 0 + period 0 - ~0% + } +} + +models/weapons/shotgun/muzzlePS +{ + ejector + { + particle + { + shader sync gfx/sprites/smoke + + displacement 0 0 0 ~0.0 + + parentVelocityFraction 0.9 + + velocityType static + velocityDir linear + velocityMagnitude 20 + velocity 0 0 0 0 + + accelerationType static + accelerationDir linear + accelerationMagnitude 300 + acceleration 0 0 1 0 + + radius 0 2.0 4.0 + alpha 0 0.4 0.0 + rotation 0 ~360 - + bounce 0.0 + + lifeTime 200 + } + + count 1 + delay 0 + period 0 - ~0% + } + + ejector + { + particle + { + model models/weapons/shells/shotgun-shell.md3 + + displacement -5 -3 0 ~0.0 + + parentVelocityFraction 0.85 + + velocityType static_transform + velocityDir linear + velocityMagnitude 200 + velocity 0 -1 3 ~10 + + accelerationType static + accelerationDir linear + accelerationMagnitude 800 + acceleration 0 0 -1 0 + + radius 0 1.0 - + bounce 0.5 + + lifeTime 5000 + } + + count 1 + delay 0 + period 0 - ~0% + } +} + +models/weapons/chaingun/muzzlePS +{ + ejector + { + particle + { + model models/weapons/shells/rifle-shell.md3 + + displacement -5 -3 0 ~0.0 + + parentVelocityFraction 0.85 + + velocityType static_transform + velocityDir linear + velocityMagnitude 200 + velocity 0 -1 3 ~10 + + accelerationType static + accelerationDir linear + accelerationMagnitude 800 + acceleration 0 0 -1 0 + + radius 0 1.0 - + bounce 0.5 + + lifeTime 5000 + } + + count 1 + delay 0 + period 0 - ~0% + } +} + +models/weapons/flamer/muzzlePS +{ + ejector + { + particle + { + shader sync flame3 flame4 flame5 flame6 flame7 flame8 flame9 flame10 flame11 flame12 flame13 flame14 flame15 flame16 flame17 flame18 flame19 flame20 flame21 flame22 flame23 flame24 flame25 + displacement 0 0 0 ~0.0 + + parentVelocityFraction 0.65 + + velocityType cent + velocityDir linear + velocityMagnitude 500 + velocity 0 0 0 ~0 + + physicsRadius 15 + + radius 0 4.0 40.0 + alpha 0 1.0 1.0 + rotation 0 ~360 - + bounce 0.1 + + lifeTime 800 + } + + count infinite + delay 0 + period 15 - ~0% + } +} + +models/weapons/level1upg/muzzlePS +{ + ejector + { + particle + { + shader sync gfx/sprites/poisoncloud + + displacement 0 0 0 ~0.0 + + parentVelocityFraction 1.0 + + velocityType cent + velocityDir linear + velocityMagnitude 80 + velocity 0 0 0 ~50 + + radius 0 10.0 25.0 + alpha 0 0.5 0.0 + rotation 0 ~360 - + bounce 1.0 + + lifeTime 800 + } + + count 20 + delay 0 + period 40 - ~0% + } +} + +models/weapons/blaster/missilePS +{ + ejector + { + particle + { + shader sync gfx/blaster/orange_particle + + displacement 0 0 0 ~2.0 + + parentVelocityFraction 0.5 + + radius 0 1.5 0.0 + alpha 0 1.0 0.0 + bounce 0.01 + + lifeTime 400 + } + + count infinite + delay 0 + period 10 - ~0% + } +} + +models/weapons/prifle/impactPS +{ + ejector + { + particle + { + shader sync gfx/prifle/red_blob + + radius 0 3.0 6.0 + alpha 70 1.0 0.0 + rotation 0 ~360 - + + lifeTime 140 + } + + count 1 + delay 0 + period 0 - ~0% + } +} + +models/weapons/prifle/missilePS +{ + ejector + { + particle + { + shader sync gfx/prifle/red_blob + + parentVelocityFraction 0.8 + + radius 0 2.0 1.5 + alpha 0 0.8 0.0 + bounce 0.01 + + lifeTime 400 + } + + count infinite + delay 0 + period 10 - ~0% + } +} + +models/weapons/mdriver/impactPS +{ + ejector + { + particle + { + shader sync gfx/mdriver/green_particle + + displacement 0 0 0 ~2.0 + + normalDisplacement 10.0 + + velocityType normal + velocityDir linear + velocityMagnitude 400 + velocity 0 0 0 ~80 + + accelerationType normal + accelerationDir linear + accelerationMagnitude 200 + acceleration 0 0 1 ~360 + + radius 0 6.0 4.0 + alpha 0 1.0 0.0 + rotation 0 ~360 - + bounce 0.5 + + lifeTime 1000 + } + + count 10 + delay 0 + period 0 - ~0% + } +} + +models/weapons/lcannon/missilePS +{ + ejector + { + particle + { + shader sync gfx/blaster/orange_particle + + displacement 0 0 0 ~3.0 + + parentVelocityFraction 1.0 + velocityType static + velocityDir linear + velocityMagnitude 120 + velocity 0 0 1 ~360 + + radius 0 1.0 5.0 + alpha 0 1.0 0.0 + bounce 0.1 + + lifeTime 1000 + } + + count infinite + delay 0 + period 50 - ~0% + } +} + +models/weapons/lcannon/secondaryMissilePS +{ + ejector + { + particle + { + shader sync gfx/blaster/orange_particle + + displacement 0 0 0 ~3.0 + + parentVelocityFraction 0.5 + + radius 0 2.0 0.0 + alpha 0 1.0 0.0 + bounce 0.1 + + lifeTime 400 + } + + count infinite + delay 0 + period 25 - ~0% + } +} + +models/weapons/lcannon/impactPS +{ + ejector + { + particle + { + shader sync gfx/blaster/orange_particle + + radius 0 8.0 16.0 + alpha 0 1.0 0.0 + rotation 0 ~360 - + + scaleWithCharge 0.10 + + lifeTime 250 + } + + count 1 + delay 0 + period 0 - ~0% + } + + ejector + { + particle + { + shader sync gfx/blaster/orange_particle + + displacement 0 0 0 ~2.0 + + normalDisplacement 10.0 + + velocityType normal + velocityDir linear + velocityMagnitude 200 + velocity 0 0 0 ~160 + + accelerationType static + accelerationDir linear + accelerationMagnitude 300 + acceleration 0 0 -1 0 + + radius 0 1.0 5.0 + alpha 0 1.0 0.0 + rotation 0 ~360 - + bounce 0.8 + + lifeTime 2000~1000 + } + + count 30 + delay 0 + period 0 - ~0% + } + + ejector + { + particle + { + shader sync gfx/lcannon/primary + + displacement 0 0 0 ~10.0 + + normalDisplacement 15.0 + + velocityType normal + velocityDir linear + velocityMagnitude 100 + velocity 0 0 0 ~160 + + accelerationType static + accelerationDir linear + accelerationMagnitude 150 + acceleration 0 0 -1 0 + + radius 0 1.0 0.0 + alpha 0 1.0 0.0 + rotation 0 ~360 - + bounce 1.0 + + scaleWithCharge 0.10 + + lifeTime 1000~1000 + } + + count 6 + delay 0 + period 0 - ~0% + } +} + +models/weapons/lcannon/secondaryImpactPS +{ + ejector + { + particle + { + shader sync gfx/blaster/orange_particle + + radius 0 8.0 16.0 + alpha 0 1.0 0.0 + rotation 0 ~360 - + + lifeTime 250 + } + + count 1 + delay 0 + period 0 - ~0% + } + + ejector + { + particle + { + shader sync gfx/blaster/orange_particle + + displacement 0 0 0 ~2.0 + + normalDisplacement 10.0 + + velocityType normal + velocityDir linear + velocityMagnitude 150 + velocity 0 0 0 ~160 + + accelerationType static + accelerationDir linear + accelerationMagnitude 300 + acceleration 0 0 -1 0 + + radius 0 1.0 5.0 + alpha 0 1.0 0.0 + rotation 0 ~360 - + bounce 0.8 + + lifeTime 2000~1000 + } + + count 10 + delay 0 + period 0 - ~0% + } +} + +models/weapons/psaw/impactPS +{ + ejector + { + particle + { + shader sync gfx/psaw/blue_particle + + displacement 0 0 0 ~2.0 + + velocityType static + velocityDir linear + velocityMagnitude 100 + velocity 0 0 -1 ~25 + + accelerationType static + accelerationDir linear + accelerationMagnitude 800 + acceleration 0 0 -1 ~10 + + radius 0 1.0~2.0 3.0~2.0 + alpha 0 1.0 1.0 + rotation 0 ~360 - + bounce 0.5 + + lifeTime 1000 + } + + count 3 + delay 0 + period 0 - ~0% + } +} + +models/weapons/lasgun/impactPS +{ + ejector + { + particle + { + shader sync gfx/lasgun/purple_particle + + displacement 0 0 0 ~2.0 + normalDisplacement 7.0 + + velocityType normal + velocityDir linear + velocityMagnitude 100 + velocity 0 0 0 ~90 + + accelerationType static + accelerationDir linear + accelerationMagnitude 600 + acceleration 0 0 -1 ~10 + + radius 0 3.0~2.0 0.0 + alpha 0 1.0 1.0 + rotation 0 ~360 - + bounce 0.5 + + lifeTime 500 + } + + count 3 + delay 0 + period 0 - ~0% + } +} + +models/weapons/grenade/impactTrailPS +{ + ejector + { + particle + { + shader sync flame3 flame4 flame5 flame6 flame7 flame8 flame9 flame10 flame11 flame12 flame13 flame14 flame15 flame16 flame17 flame18 flame19 flame20 flame21 flame22 flame23 flame24 flame25 + + displacement 0 0 0 ~0 + + velocityType static + velocityDir linear + velocityMagnitude 30 + velocity 0 0 -1 ~0 + + radius 0 30.0 10.0 + alpha 0 1.0 0.0 + rotation 0 ~360 - + bounce 0 + + lifeTime 500 + } + + count 5 + delay 0 + period 40 - 0 + } +} + +models/weapons/grenade/impactPS +{ + ejector + { + particle + { + shader sync flame3 flame4 flame5 flame6 flame7 flame8 flame9 flame10 flame11 flame12 flame13 flame14 flame15 flame16 flame17 flame18 flame19 flame20 flame21 flame22 flame23 flame24 flame25 + + displacement 0 0 11 ~0 + + velocityType static + velocityDir linear + velocityMagnitude 200~75% + velocity 0 0 1 ~10 + + accelerationType static + accelerationDir linear + accelerationMagnitude 300 + acceleration 0 0 -1 0 + + radius 0 10.0 40.0 + alpha 0 1.0 0.0 + rotation 0 ~360 - + bounce 0 + + lifeTime 500 + + childSystem models/weapons/grenade/impactTrailPS + } + + count 5 + delay 0 + period 10 - ~0% + } + + ejector + { + particle + { + shader sync gfx/grenade/flare_01 + + displacement 0 0 8 ~0 + + velocityType static + velocityDir linear + velocityMagnitude 10~50% + velocity 0 0 1 ~60 + + radius 0 100.0 200.0 + alpha 250 1.0 0.0 + rotation 0 ~360 - + bounce 0.0 + + lifeTime 300 + } + + count 1 + delay 0 + period 10 - ~0% + } + + ejector + { + particle + { + shader sync gfx/sprites/spark + + displacement 0 0 8 ~0 + + velocityType static + velocityDir linear + velocityMagnitude 700~3% + velocity 0 0 1 ~180 + + accelerationType static + accelerationDir linear + accelerationMagnitude 800 + acceleration 0 0 1 0 + + radius 0 10.0 2.0 + alpha 0 1.0 0.0 + rotation 0 ~360 - + bounce 0 + + lifeTime 300 + } + + count 150 + delay 0 + period 0 - ~0% + } +} + +models/weapons/level3upg/impactPS +{ + ejector + { + particle + { + shader sync gfx/level3upg/barb_splash + + displacement 0 0 0 ~8 + + velocityType normal + velocityDir linear + velocityMagnitude 800 + velocity 0 0 1 ~80 + + accelerationType static + accelerationDir linear + accelerationMagnitude 800 + acceleration 0 0 -1 0 + + radius 0 3.0~2.0 0.0 + alpha 0 1.0 1.0 + rotation 0 ~360 - + bounce 0.4~100% + + lifeTime 175 + } + + count 12 + delay 0 + period 0 - ~0% + } +} diff --git a/assets/scripts/weapons.shader b/assets/scripts/weapons.shader new file mode 100755 index 0000000..960aecb --- /dev/null +++ b/assets/scripts/weapons.shader @@ -0,0 +1,93 @@ +gfx/blaster/orange_particle +{ + cull disable + { + map gfx/blaster/orange_particle.tga + blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + alphaGen vertex + rgbGen vertex + } +} + +gfx/mdriver/green_particle +{ + cull disable + { + map gfx/mdriver/green_particle.tga + blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + rgbGen vertex + alphaGen vertex + } +} + +gfx/mdriver/trail +{ + nomipmaps + cull disable + { + map gfx/mdriver/trail.tga + blendFunc blend + } +} + +gfx/psaw/blue_particle +{ + cull disable + { + map gfx/psaw/blue_particle.jpg + blendFunc GL_ONE GL_ONE + alphaGen vertex + rgbGen vertex + } +} + +gfx/rifle/verysmallrock +{ + cull disable + { + map gfx/rifle/verysmallrock.tga + blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + alphaGen vertex + rgbGen vertex + } +} + +gfx/prifle/red_blob +{ + cull disable + { + map gfx/prifle/red_blob.tga + blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + alphaGen vertex + } +} + +gfx/prifle/red_streak +{ + nomipmaps + cull disable + { + map gfx/prifle/red_streak.tga + blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + alphaGen vertex + } +} + +gfx/lcannon/primary +{ + cull disable + { + animmap 24 gfx/lcannon/primary_1.jpg gfx/lcannon/primary_2.jpg gfx/lcannon/primary_3.jpg gfx/lcannon/primary_4.jpg + blendFunc GL_ONE GL_ONE + } +} + +gfx/lasgun/purple_particle +{ + cull disable + { + map gfx/lasgun/purple_particle.tga + blendFunc GL_ONE GL_ONE + } +} + diff --git a/assets/sound/buildables/barricade/sound.cfg b/assets/sound/buildables/barricade/sound.cfg new file mode 100755 index 0000000..caa49e4 --- /dev/null +++ b/assets/sound/buildables/barricade/sound.cfg @@ -0,0 +1,14 @@ +1 0 //construct1.wav +0 0 //construct2.wav +0 0 //idle1.wav +0 0 //idle2.wav +0 0 //idle3.wav +1 0 //attack1.wav +1 0 //attack2.wav +0 0 //spawn1.wav +0 0 //spawn2.wav +1 0 //pain1.wav +1 0 //pain2.wav +0 0 //destroy1.wav +0 0 //destroy2.wav +0 0 //destroyed.wav diff --git a/assets/ui/assets/alien/buildstat.cfg b/assets/ui/assets/alien/buildstat.cfg new file mode 100755 index 0000000..318d401 --- /dev/null +++ b/assets/ui/assets/alien/buildstat.cfg @@ -0,0 +1,37 @@ +// config for the building status indicators that builders see +// NOTES: +// * all characters (text/icons) are square +// * character size is derived totally from frameHeight and vertialMargin +// * healthPadding is NOT used compensated for in the margins + +frameShader "ui/assets/alien/buildstat/frame" +frameWidth 150 +frameHeight 30 + +healthPadding 2 +healthSevereColor 0.24 0.02 0.02 1 +healthHighColor 0.32 0.04 0.04 1 +healthElevatedColor 0.40 0.06 0.06 1 +healthGuardedColor 0.48 0.08 0.08 1 +healthLowColor 0.56 0.10 0.10 1 + +// this gets drawn over frame and health, but numbers and icons go on top of it +overlayShader "ui/assets/alien/buildstat/overlay" +overlayWidth 156 +overlayHeight 36 + +// PERCENT of frameHeight to use for top/bottom margin of icons/text +// value is for total of top and bottom margins +// valid values between 0.0 and 1.0 +verticalMargin 0.5 + +// number of CHARS worth of space that should be used for left/right margins +// value is for one side only +// char width is determined by frameHeight and verticalMargin +horizontalMargin 1.0 + +markedShader "ui/assets/alien/buildstat/mark" +noPowerShader "ui/assets/alien/buildstat/nopower" + +backColor 1.0 1.0 1.0 1 +foreColor 0.0 0.0 0.0 1 diff --git a/assets/ui/assets/human/buildstat.cfg b/assets/ui/assets/human/buildstat.cfg new file mode 100755 index 0000000..c66b618 --- /dev/null +++ b/assets/ui/assets/human/buildstat.cfg @@ -0,0 +1,39 @@ +// config for the building status indicators that builders see +// NOTES: +// * all characters (text/icons) are square +// * character size is derived totally from frameHeight and vertialMargin +// * healthPadding is NOT used compensated for in the margins + +frameShader "ui/assets/human/buildstat/frame" +frameWidth 150 +frameHeight 30 + +healthPadding 2 + +// Homeworld Security Advisory System +healthSevereColor 0.83 0.03 0.02 1 +healthHighColor 0.84 0.48 0.03 1 +healthElevatedColor 0.82 0.82 0.00 1 +healthGuardedColor 0.19 0.65 0.00 1 +healthLowColor 0.27 0.49 0.55 1 + +// this gets drawn over frame and health, but numbers and icons go on top of it +overlayShader "" +overlayWidth 160 +overlayHeight 40 + +// PERCENT of frameHeight to use for top/bottom margin of icons/text +// value is for total of top and bottom margins +// valid values between 0.0 and 1.0 +verticalMargin 0.5 + +// number of CHARS worth of space that should be used for left/right margins +// value is for one side only +// char width is determined by frameHeight and verticalMargin +horizontalMargin 1.0 + +markedShader "ui/assets/human/buildstat/mark" +noPowerShader "ui/assets/human/buildstat/nopower" + +backColor 1.0 1.0 1.0 1 +foreColor 0.0 0.0 0.0 1 diff --git a/assets/ui/connect.menu b/assets/ui/connect.menu new file mode 100755 index 0000000..108e33c --- /dev/null +++ b/assets/ui/connect.menu @@ -0,0 +1,14 @@ +#include "ui/menudef.h" + +{ + menuDef + { + name "Connect" + background "gfx/2d/load_screen" + rect 0 0 640 480 + fullScreen MENU_FALSE + visible MENU_FALSE + style WINDOW_STYLE_SHADER + aspectBias ASPECT_NONE + } +} diff --git a/assets/ui/createfavorite.menu b/assets/ui/createfavorite.menu new file mode 100755 index 0000000..c66ecff --- /dev/null +++ b/assets/ui/createfavorite.menu @@ -0,0 +1,115 @@ +#include "ui/menudef.h" + +{ + \\ CREATE FAVORITE POPUP MENU \\ + +#define BUTT_W 45 +#define BUTT_H 35 +#define BORDER 10 +#define INPUT_H 20 +#define W 250 +#define H ((3*BORDER)+(2*INPUT_H)+BUTT_H) + + menuDef + { + name "createfavorite_popmenu" + visible MENU_FALSE + fullscreen MENU_FALSE + rect (320-(W/2)) (240-(H/2)) W H + focusColor 1 .75 0 1 + style WINDOW_STYLE_FILLED + border WINDOW_BORDER_FULL + popup + onESC + { + close createfavorite_popmenu + } + + itemDef + { + name window + rect 0 0 W H + style WINDOW_STYLE_FILLED + backcolor 0 0 0 1 + visible MENU_TRUE + decoration + + border WINDOW_BORDER_FULL + borderSize 1.0 + borderColor 0.5 0.5 0.5 1 + } + + // ENTER NAME AND ADDRESS // + + itemDef + { + name nameEntry + type ITEM_TYPE_EDITFIELD + style WINDOW_STYLE_EMPTY + maxchars 40 + text "Name:" + textscale .4 + cvar "ui_favoriteName" + rect BORDER BORDER (W-(2*BORDER)) INPUT_H + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_TRUE + } + + itemDef + { + name addressEntry + type ITEM_TYPE_EDITFIELD + style WINDOW_STYLE_EMPTY + maxchars 40 + text "Address:" + textscale .4 + cvar "ui_favoriteAddress" + rect BORDER ((2*BORDER)+INPUT_H) (W-(2*BORDER)) INPUT_H + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_TRUE + } + + itemDef + { + name yes + text "OK" + type ITEM_TYPE_BUTTON + textscale .25 + style WINDOW_STYLE_EMPTY + rect (W-(2*BUTT_W)) (H-BUTT_H) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + uiScript CreateFavorite; + close createfavorite_popmenu + } + } + + itemDef + { + name yes + text "Cancel" + type ITEM_TYPE_BUTTON + textscale .25 + style WINDOW_STYLE_EMPTY + rect (W-BUTT_W) (H-BUTT_H) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + close createfavorite_popmenu + } + } + } +} diff --git a/assets/ui/createserver.menu b/assets/ui/createserver.menu new file mode 100755 index 0000000..f64ba1d --- /dev/null +++ b/assets/ui/createserver.menu @@ -0,0 +1,499 @@ +#include "ui/menudef.h" + +{ + \\ Server Creation \\ + +#define W 640 +#define H 480 +#define BORDER 10 + +#define PREVIEW_W 300 +#define PREVIEW_H 225 +#define PREVIEW_X BORDER +#define PREVIEW_Y BORDER + +#define BC_W (W-(2*BORDER)) +#define BC_H 50 +#define BC_X BORDER +#define BC_Y (H-(BC_H+BORDER)) +#define ARROW_W 50 +#define ARROW_H BC_H + +#define MAPS_W PREVIEW_W +#define MAPS_H (H-((4*BORDER)+PREVIEW_H+BC_H)) +#define MAPS_X BORDER +#define MAPS_Y ((2*BORDER)+PREVIEW_H) + +#define OPTIONS_W (W-((3*BORDER)+PREVIEW_W)) +#define OPTIONS_H (H-((3*BORDER)+BC_H)) +#define OPTIONS_X ((2*BORDER)+PREVIEW_W) +#define OPTIONS_Y BORDER +#define ELEM_OFF_Y 20 +#define ELEM_OFF_X -135 +#define ELEM_H 21 + + menuDef + { + name "createserver" + visible MENU_FALSE + fullscreen MENU_TRUE + rect 0 0 W H + focusColor 1 .75 0 1 + outOfBoundsClick + style WINDOW_STYLE_EMPTY + aspectBias ASPECT_NONE + + onOpen + { + uiScript loadArenas; + hide accept_alt; + show accept; + hide back_alt; + show back + } + + onEsc + { + close createserver + } + + itemDef + { + name background + rect 0 0 W H + style WINDOW_STYLE_FILLED + backcolor 0 0 0 1 + visible MENU_TRUE + decoration + } + + // map selection + + itemDef + { + name mappreview + style WINDOW_STYLE_EMPTY + ownerdraw UI_SELECTEDMAPPREVIEW + rect PREVIEW_X PREVIEW_Y PREVIEW_W PREVIEW_H + border WINDOW_BORDER_FULL + bordercolor .5 .5 .5 1 + visible MENU_TRUE + } + + itemDef + { + name maplist + rect MAPS_X MAPS_Y MAPS_W MAPS_H + type ITEM_TYPE_LISTBOX + style WINDOW_STYLE_EMPTY + elementwidth 120 + elementheight 20 + textscale .33 + elementtype LISTBOX_TEXT + feeder FEEDER_MAPS + border WINDOW_BORDER_FULL + bordercolor 0.5 0.5 0.5 1 + forecolor 1 1 1 1 + backcolor 0.2 0.2 0.2 1 + outlinecolor 0.1 0.1 0.1 0.5 + visible MENU_TRUE + columns 1 + 2 190 ALIGN_LEFT + } + + + // SETTINGS // + + itemDef + { + name window + rect OPTIONS_X OPTIONS_Y OPTIONS_W OPTIONS_H + style WINDOW_STYLE_FILLED + backcolor 0 0 0 1 + visible MENU_TRUE + decoration + + border WINDOW_BORDER_FULL + borderSize 1.0 + borderColor 0.5 0.5 0.5 1 + } + + itemDef + { + name expert + type ITEM_TYPE_EDITFIELD + text "Host Name:" + cvar "sv_hostname" + maxChars 40 + rect (OPTIONS_X+BORDER) (OPTIONS_Y+ELEM_OFF_Y+(0*ELEM_H)) (OPTIONS_W-(2*BORDER)) ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx ELEM_OFF_X + textscale .36 + forecolor 1 1 1 1 + visible MENU_TRUE + } + + itemDef + { + name normal + type ITEM_TYPE_NUMERICFIELD + text "Time Limit:" + cvar "timelimit" + rect (OPTIONS_X+BORDER) (OPTIONS_Y+ELEM_OFF_Y+(1*ELEM_H)) (OPTIONS_W-(2*BORDER)) ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx ELEM_OFF_X + maxchars 4 + textscale .36 + forecolor 1 1 1 1 + visible MENU_TRUE + } + + itemDef + { + name expert + type ITEM_TYPE_NUMERICFIELD + text "Maximum Players:" + cvar "sv_maxclients" + rect (OPTIONS_X+BORDER) (OPTIONS_Y+ELEM_OFF_Y+(2*ELEM_H)) (OPTIONS_W-(2*BORDER)) ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx ELEM_OFF_X + maxchars 4 + textscale .36 + forecolor 1 1 1 1 + visible MENU_TRUE + } + + itemDef + { + name expert + type ITEM_TYPE_YESNO + text "Require Password:" + cvar "g_needpassword" + rect (OPTIONS_X+BORDER) (OPTIONS_Y+ELEM_OFF_Y+(3*ELEM_H)) (OPTIONS_W-(2*BORDER)) ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx ELEM_OFF_X + textscale .36 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav" + } + } + + itemDef + { + name expert + type ITEM_TYPE_EDITFIELD + text "Password:" + cvar "g_password" + rect (OPTIONS_X+BORDER) (OPTIONS_Y+ELEM_OFF_Y+(4*ELEM_H)) (OPTIONS_W-(2*BORDER)) ELEM_H + maxchars 10 + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx ELEM_OFF_X + textscale .36 + forecolor 1 1 1 1 + visible MENU_TRUE + } + + + + itemDef + { + name normal + type ITEM_TYPE_YESNO + text "Pure Server:" + cvar "sv_pure" + rect (OPTIONS_X+BORDER) (OPTIONS_Y+ELEM_OFF_Y+(6*ELEM_H)) (OPTIONS_W-(2*BORDER)) ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx ELEM_OFF_X + textscale .36 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav" + } + } + + itemDef + { + name normal + type ITEM_TYPE_MULTI + text "Dedicated:" + // dedicated is a special cvar in that as soon as it is set, + // the game goes to console only so the ui catches this one specifically + cvar "ui_dedicated" + cvarFloatList { "No" 0 "LAN" 1 "Internet" 2 } + rect (OPTIONS_X+BORDER) (OPTIONS_Y+ELEM_OFF_Y+(7*ELEM_H)) (OPTIONS_W-(2*BORDER)) ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx ELEM_OFF_X + textscale .36 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav" + } + } + + itemDef + { + name expert + type ITEM_TYPE_YESNO + text "Auto Download:" + cvar "sv_allowdownload" + rect (OPTIONS_X+BORDER) (OPTIONS_Y+ELEM_OFF_Y+(8*ELEM_H)) (OPTIONS_W-(2*BORDER)) ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx ELEM_OFF_X + textscale .36 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav" + } + } + + itemDef + { + name expert + type ITEM_TYPE_YESNO + text "Enable Voting:" + cvar "g_allowvote" + rect (OPTIONS_X+BORDER) (OPTIONS_Y+ELEM_OFF_Y+(9*ELEM_H)) (OPTIONS_W-(2*BORDER)) ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx ELEM_OFF_X + textscale .36 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav" + } + } + + + + itemDef + { + name expert + type ITEM_TYPE_NUMERICFIELD + text "Minimum Ping:" + cvar "sv_minping" + rect (OPTIONS_X+BORDER) (OPTIONS_Y+ELEM_OFF_Y+(11*ELEM_H)) (OPTIONS_W-(2*BORDER)) ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx ELEM_OFF_X + maxchars 4 + textscale .36 + forecolor 1 1 1 1 + visible MENU_TRUE + } + + itemDef + { + name expert + type ITEM_TYPE_NUMERICFIELD + text "Maximum Ping:" + cvar "sv_maxping" + rect (OPTIONS_X+BORDER) (OPTIONS_Y+ELEM_OFF_Y+(12*ELEM_H)) (OPTIONS_W-(2*BORDER)) ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx ELEM_OFF_X + maxchars 4 + textscale .36 + forecolor 1 1 1 1 + visible MENU_TRUE + } + + itemDef + { + name expert + type ITEM_TYPE_YESNO + text "Synchronous Client:" + cvar "g_synchronousclients" + rect (OPTIONS_X+BORDER) (OPTIONS_Y+ELEM_OFF_Y+(13*ELEM_H)) (OPTIONS_W-(2*BORDER)) ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx ELEM_OFF_X + textscale .36 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav" + } + } + + itemDef + { + name expert + type ITEM_TYPE_NUMERICFIELD + text "Max Rate:" + cvar "sv_maxrate" + rect (OPTIONS_X+BORDER) (OPTIONS_Y+ELEM_OFF_Y+(14*ELEM_H)) (OPTIONS_W-(2*BORDER)) ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx ELEM_OFF_X + maxchars 4 + textscale .36 + forecolor 1 1 1 1 + visible MENU_TRUE + } + + itemDef + { + name expert + type ITEM_TYPE_NUMERICFIELD + text "Zombie Time:" + cvar "sv_zombietime" + rect (OPTIONS_X+BORDER) (OPTIONS_Y+ELEM_OFF_Y+(15*ELEM_H)) (OPTIONS_W-(2*BORDER)) ELEM_H + maxchars 4 + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx ELEM_OFF_X + textscale .36 + forecolor 1 1 1 1 + visible MENU_TRUE + } + + itemDef + { + name expert + type ITEM_TYPE_NUMERICFIELD + text "Reconnect Limit:" + cvar "sv_reconnectlimit" + maxchars 4 + rect (OPTIONS_X+BORDER) (OPTIONS_Y+ELEM_OFF_Y+(16*ELEM_H)) (OPTIONS_W-(2*BORDER)) ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx ELEM_OFF_X + textscale .36 + forecolor 1 1 1 1 + visible MENU_TRUE + } + + + + // BACK BAR // + + itemDef + { + name back + style WINDOW_STYLE_SHADER + background "ui/assets/backarrow.tga" + rect BC_X BC_Y ARROW_H ARROW_W + aspectBias ALIGN_LEFT + visible MENU_TRUE + action + { + play "sound/misc/menu4.wav"; + close createserver + } + + mouseEnter + { + hide back; + show back_alt + } + } + + itemDef + { + name back_alt + style WINDOW_STYLE_SHADER + background "ui/assets/backarrow_alt.tga" + rect BC_X BC_Y ARROW_H ARROW_W + aspectBias ALIGN_LEFT + backcolor 0 0 0 0 + forecolor 1 1 1 1 + visible MENU_FALSE + type ITEM_TYPE_BUTTON + + text "Back" + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + textalignx ARROW_W + textscale .6 + + mouseExit + { + hide back_alt; + show back + } + + action + { + play "sound/misc/menu4.wav"; + close createserver + } + } + + + + + itemDef + { + name accept + style WINDOW_STYLE_SHADER + rect ((BC_X+BC_W)-ARROW_W) BC_Y ARROW_H ARROW_W + aspectBias ALIGN_RIGHT + background "ui/assets/forwardarrow.tga" + backcolor 0 0 0 0 + forecolor 1 1 1 1 + visible MENU_TRUE + mouseEnter + { + hide accept; + show accept_alt + } + + action + { + play "sound/misc/menu1.wav"; + uiScript StartServer + } + } + + itemDef + { + name accept_alt + style WINDOW_STYLE_SHADER + rect ((BC_X+BC_W)-ARROW_W) BC_Y ARROW_H ARROW_W + aspectBias ALIGN_RIGHT + background "ui/assets/forwardarrow_alt.tga" + backcolor 0 0 0 0 + type ITEM_TYPE_BUTTON + forecolor 1 1 1 1 + visible MENU_FALSE + + text "Create" + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx -ARROW_W + textscale .6 + + mouseExit + { + hide accept_alt; + show accept + } + + action + { + play "sound/misc/menu1.wav"; + uiScript StartServer + } + } + } +} diff --git a/assets/ui/demo.menu b/assets/ui/demo.menu new file mode 100755 index 0000000..bec3a05 --- /dev/null +++ b/assets/ui/demo.menu @@ -0,0 +1,108 @@ +#include "ui/menudef.h" + +{ + \\ DEMO \\ + +#define W 300 +#define H 240 +#define BUTT_W 45 +#define BUTT_H 35 +#define BORDER 10 + + menuDef + { + name "demo" + visible MENU_FALSE + fullscreen MENU_FALSE + rect (320-(W/2)) (240-(H/2)) W H + focusColor 1 .75 0 1 + style WINDOW_STYLE_FILLED + border WINDOW_BORDER_FULL + popup + onEsc + { + close demo + } + onOpen + { + uiScript loadDemos + } + + itemDef + { + name window + rect 0 0 W H + style WINDOW_STYLE_FILLED + backcolor 0 0 0 1 + visible MENU_TRUE + decoration + + border WINDOW_BORDER_FULL + borderSize 1.0 + borderColor 0.5 0.5 0.5 1 + } + + itemDef + { + name demolist + rect BORDER BORDER (W-(2*BORDER)) (H-(BUTT_H+BORDER)) + type ITEM_TYPE_LISTBOX + style WINDOW_STYLE_EMPTY + elementwidth 120 + elementheight 20 + textscale .25 + elementtype LISTBOX_TEXT + feeder FEEDER_DEMOS + textalign 3 + textaligny 14 + border WINDOW_BORDER_FULL + bordercolor 0.5 0.5 0.5 0.5 + forecolor 1 1 1 1 + backcolor 0.2 0.2 0.2 1 + outlinecolor 0.1 0.1 0.1 0.5 + visible MENU_TRUE + doubleClick + { + play "sound/misc/menu1.wav"; + uiScript RunDemo + } + } + + itemDef + { + name play + text "Play" + type ITEM_TYPE_BUTTON + textscale .25 + rect (W-(2*BUTT_W)) (H-BUTT_H) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + close demo; + uiScript RunDemo + } + } + + itemDef + { + name cancel + text "Cancel" + type ITEM_TYPE_BUTTON + textscale .25 + rect (W-BUTT_W) (H-BUTT_H) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu3.wav"; + close demo + } + } + } +} diff --git a/assets/ui/download.menu b/assets/ui/download.menu new file mode 100755 index 0000000..dc8247f --- /dev/null +++ b/assets/ui/download.menu @@ -0,0 +1,167 @@ +#include "ui/menudef.h" + +{ + \\ DOWNLOAD \\ + + menuDef + { + name "download_popmenu" + visible MENU_FALSE + fullscreen MENU_FALSE + rect 158 80 320 320 + focusColor 1 .75 0 1 + style WINDOW_STYLE_FILLED + border WINDOW_BORDER_FULL + popup + onClose { } + onOpen + { + uiScript loadServerInfo; + } + onESC + { + play "sound/misc/menu1.wav"; + close download_popmenu; + uiScript downloadIgnore; + } + + itemDef + { + name window + rect 10 15 300 320 + style WINDOW_STYLE_FILLED + backcolor 0 0 0 1 + visible MENU_TRUE + decoration + + border WINDOW_BORDER_FULL + borderSize 1.0 + borderColor 0.5 0.5 0.5 1 + } + + itemDef + { + name downloadinfo + rect 0 50 320 20 + type ITEM_TYPE_TEXT + text "Download" + textalign ALIGN_CENTER + textstyle ITEM_TEXTSTYLE_SHADOWEDMORE + textscale .333 + forecolor 1 1 1 1 + visible MENU_TRUE + decoration + } + + itemDef + { + name downloadinfo + rect 60 80 200 270 + type ITEM_TYPE_TEXT + style WINDOW_STYLE_FILLED + textstyle ITEM_TEXTSTYLE_SHADOWED + wrapped + cvar "com_downloadPromptText" + textalign ALIGN_CENTER + textvalign VALIGN_TOP + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + decoration + } + + + // BUTTON // + + + itemDef + { + name curl + text "Download from website" + textscale .25 + group grpControlbutton + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + rect 60 250 200 15 + textalign ALIGN_CENTER + forecolor 1 1 1 1 + backcolor .37 .1 .1 1 + visible MENU_TRUE + cvarTest "ui_serverinfo_allowdl" + showCvar { 1 5 9 13 } + action + { + play "sound/misc/menu1.wav"; + close download_popmenu; + uiScript downloadCURL; + } + } + + itemDef + { + name udp + text "Download from server" + type ITEM_TYPE_BUTTON + textscale .25 + group grpControlbutton + style WINDOW_STYLE_EMPTY + rect 60 265 200 15 + textalign ALIGN_CENTER + forecolor 1 1 1 1 + backcolor .37 .1 .1 1 + visible MENU_TRUE + cvarTest "ui_serverinfo_allowdl" + showCvar { 1 3 9 11 } + action + { + play "sound/misc/menu1.wav"; + close download_popmenu; + uiScript downloadUDP; + } + } + + itemDef + { + name ignore + text "Ignore" + type ITEM_TYPE_BUTTON + textscale .25 + group grpControlbutton + style WINDOW_STYLE_EMPTY + rect 60 280 200 15 + textalign ALIGN_CENTER + forecolor 1 1 1 1 + backcolor .37 .1 .1 1 + visible MENU_TRUE + cvarTest "sv_pure" + hideCvar { 1 } + action + { + play "sound/misc/menu1.wav"; + close download_popmenu; + uiScript downloadIgnore; + } + } + + itemDef + { + name disconnect + text "Disconnect" + type ITEM_TYPE_BUTTON + textscale .25 + group grpControlbutton + style WINDOW_STYLE_EMPTY + rect 60 295 200 15 + textalign ALIGN_CENTER + forecolor 1 1 1 1 + backcolor .37 .1 .1 1 + visible 1 + action + { + play "sound/misc/menu1.wav"; + close download_popmenu; + exec "disconnect"; + } + } + } +} diff --git a/assets/ui/drop.menu b/assets/ui/drop.menu new file mode 100755 index 0000000..162a019 --- /dev/null +++ b/assets/ui/drop.menu @@ -0,0 +1,122 @@ +#include "ui/menudef.h" + +{ + +#define W 320 +#define H 320 +#define BORDER 10 + +#define BUTT_H 25 +#define BUTT_W 65 + +#define INFO_W (W-(2*BORDER)) +#define INFO_H (H-((4*BORDER)+(2*BUTT_H))) +#define INFO_X BORDER +#define INFO_Y ((2*BORDER)+BUTT_H) + + menuDef + { + name "drop_popmenu" + visible MENU_FALSE + fullscreen MENU_FALSE + rect (320-(W/2)) (240-(H/2)) W H + focusColor 1 .75 0 1 + style WINDOW_STYLE_FILLED + border WINDOW_BORDER_FULL + popup + onClose { uiScript clearError } + onESC + { + play "sound/misc/menu1.wav"; + close drop_popmenu; + open main + } + + + itemDef + { + name window + rect 0 0 W H + style WINDOW_STYLE_FILLED + backcolor 0 0 0 1 + visible MENU_TRUE + decoration + + border WINDOW_BORDER_FULL + borderSize 1.0 + borderColor 0.5 0.5 0.5 1 + } + + itemDef + { + name dropinfo + rect BORDER BORDER INFO_W BUTT_H + type ITEM_TYPE_TEXT + text "Disconnected" + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .4 + forecolor 1 1 1 1 + visible MENU_TRUE + decoration + } + + itemDef + { + name dropinfo + rect INFO_X INFO_Y INFO_W INFO_H + type ITEM_TYPE_TEXT + style WINDOW_STYLE_FILLED + wrapped + cvar "com_errorMessage" + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .33 + forecolor 1 1 1 1 + visible MENU_TRUE + decoration + } + + itemDef + { + name exit + text "OK" + type ITEM_TYPE_BUTTON + textscale .4 + style WINDOW_STYLE_EMPTY + rect (W-((2*BORDER)+(2*BUTT_W))) (H-(BORDER+BUTT_H)) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + backcolor .37 .1 .1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + close drop_popmenu + } + } + + itemDef + { + name reconnect + text "Reconnect" + type ITEM_TYPE_BUTTON + textscale .4 + style WINDOW_STYLE_EMPTY + rect (W-(BORDER+BUTT_W)) (H-(BORDER+BUTT_H)) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + backcolor .37 .1 .1 1 + visible MENU_TRUE + action + { + close drop_popmenu; + exec "reconnect"; + } + } + } +} + + diff --git a/assets/ui/error.menu b/assets/ui/error.menu new file mode 100755 index 0000000..2c54d2d --- /dev/null +++ b/assets/ui/error.menu @@ -0,0 +1,102 @@ +#include "ui/menudef.h" + +{ + +#define W 320 +#define H 320 +#define BORDER 10 + +#define BUTT_H 25 +#define BUTT_W 65 + +#define INFO_W (W-(2*BORDER)) +#define INFO_H (H-((4*BORDER)+(2*BUTT_H))) +#define INFO_X BORDER +#define INFO_Y ((2*BORDER)+BUTT_H) + + menuDef + { + name "error_popmenu" + visible MENU_FALSE + fullscreen MENU_FALSE + rect (320-(W/2)) (240-(H/2)) W H + focusColor 1 .75 0 1 + style WINDOW_STYLE_FILLED + border WINDOW_BORDER_FULL + popup + onClose { uiScript clearError } + onESC + { + play "sound/misc/menu1.wav"; + close error_popmenu; + open main + } + + + itemDef + { + name window + rect 0 0 W H + style WINDOW_STYLE_FILLED + backcolor 0 0 0 1 + visible MENU_TRUE + decoration + + border WINDOW_BORDER_FULL + borderSize 1.0 + borderColor 0.5 0.5 0.5 1 + } + + itemDef + { + name dropinfo + rect BORDER BORDER INFO_W BUTT_H + type ITEM_TYPE_TEXT + text "Error" + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .4 + forecolor 1 1 1 1 + visible MENU_TRUE + decoration + } + + itemDef + { + name dropinfo + rect INFO_X INFO_Y INFO_W INFO_H + type ITEM_TYPE_TEXT + style WINDOW_STYLE_FILLED + wrapped + cvar "com_errorMessage" + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .33 + forecolor 1 1 1 1 + visible MENU_TRUE + decoration + } + + itemDef + { + name exit + text "OK" + type ITEM_TYPE_BUTTON + textscale .4 + style WINDOW_STYLE_EMPTY + rect (W-(BORDER+BUTT_W)) (H-(BORDER+BUTT_H)) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + backcolor .37 .1 .1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + close error_popmenu + } + } + } +} + + diff --git a/assets/ui/findplayer.menu b/assets/ui/findplayer.menu new file mode 100755 index 0000000..09d715a --- /dev/null +++ b/assets/ui/findplayer.menu @@ -0,0 +1,173 @@ +#include "ui/menudef.h" + +{ + \\ FIND PLAYER POPUP MENU \\ + +#define W 400 +#define H 400 +#define BUTT_W 45 +#define BUTT_H 35 +#define BORDER 10 +#define LIST_W (W-(2*BORDER)) +#define LIST_DW (LIST_W-40) +#define LEFT_C 0.13 +#define RIGHT_C 0.61 +#define SEARCH_H 30 +#define SERVERS_H 105 + + menuDef + { + name "findplayer_popmenu" + visible MENU_FALSE + fullscreen MENU_FALSE + rect (320-(W/2)) (240-(H/2)) W H + focusColor 1 .75 0 1 + style WINDOW_STYLE_FILLED + border WINDOW_BORDER_FULL + popup + onClose { } + onOpen + { + uiScript FindPlayer + } + + onESC + { + close findplayer_popmenu + } + + itemDef + { + name window + rect 0 0 W H + style WINDOW_STYLE_FILLED + backcolor 0 0 0 1 + visible MENU_TRUE + decoration + + border WINDOW_BORDER_FULL + borderSize 1.0 + borderColor 0.5 0.5 0.5 1 + } + + itemDef + { + name namefield + type ITEM_TYPE_EDITFIELD + style WINDOW_STYLE_EMPTY + text "Name:" + cvar "ui_findplayer" + maxChars 20 + rect BORDER BORDER (W-((2*BORDER)+BUTT_W)) SEARCH_H + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + textscale .3 + outlinecolor .2 .2 .2 .5 + backcolor 0 0 0 0 + forecolor 1 1 1 1 + border WINDOW_BORDER_NONE + bordercolor 0 0 0 0 + action { ui_script FindPlayer } + visible MENU_TRUE + } + + itemDef + { + name search + text "Search" + textscale .25 + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + rect (W-(BORDER+BUTT_W)) BORDER BUTT_W SEARCH_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + ui_script FindPlayer + } + } + + + itemDef + { + name serverNameList + rect BORDER ((2*BORDER)+SEARCH_H) LIST_W SERVERS_H + type ITEM_TYPE_LISTBOX + style WINDOW_STYLE_EMPTY + elementwidth 120 + elementheight 16 + textscale .25 + outlinecolor .2 .2 .2 .5 + border WINDOW_BORDER_FULL + bordersize 1 + bordercolor .5 .5 .5 1 + elementtype LISTBOX_TEXT + feeder FEEDER_FINDPLAYER + visible MENU_TRUE + } + + itemDef + { + name serverInfoList + rect BORDER ((3*BORDER)+SEARCH_H+SERVERS_H) LIST_W (H-(SEARCH_H+SERVERS_H+BUTT_H+(3*BORDER))) + type ITEM_TYPE_LISTBOX + style WINDOW_STYLE_EMPTY + elementwidth 120 + elementheight 16 + textscale .25 + border WINDOW_BORDER_FULL + bordersize 1 + bordercolor .5 .5 .5 1 + elementtype LISTBOX_TEXT + feeder FEEDER_SERVERSTATUS + notselectable + visible MENU_TRUE + columns 4 + 0 ((2*LEFT_C)*LIST_DW) ALIGN_LEFT + (LEFT_C*LIST_DW) (LEFT_C*LIST_DW) ALIGN_LEFT + ((2*LEFT_C)*LIST_DW) (LEFT_C*LIST_DW) ALIGN_LEFT + ((1-RIGHT_C)*LIST_DW) (RIGHT_C*LIST_DW) ALIGN_LEFT + } + + // BUTTON // + + itemDef + { + name join + text "Join" + textscale .25 + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + rect (W-(2*BUTT_W)) (H-BUTT_H) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_TRUE + action { ui_script FoundPlayerJoinServer } + } + + itemDef + { + name close + text "Close" + textscale .25 + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + rect (W-BUTT_W) (H-BUTT_H) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + close findplayer_popmenu + } + } + } +} + + diff --git a/assets/ui/help.txt b/assets/ui/help.txt new file mode 100755 index 0000000..bd4c6a3 --- /dev/null +++ b/assets/ui/help.txt @@ -0,0 +1,135 @@ +{ + "^3Welcome^7" + { + "In this section you will find a summary of major changes since 1.1. It is " + "not a complete list. In general, all things have been tweaked for balance in " + "some way.\n\n" + "We hope you enjoy playing. Your support gives us valuable data and " + "feedback as we work to bring you Tremulous 1.2. Please report all bugs. Thank " + "you." + } + "Alien Healing" + { + "The most important change for Alien players to know is that their healing " + "rate is slower away from creep. To counter this, healing near Boosters " + "and Basilisks is greatly accelerated.\n\n" + "Watch the health cross icon on your " + "HUD to see what your healing rate is. If the icon glows, you are on " + "creep. If you are near a booster or basilisk, you will see two " + "(2X healing) or four (3X healing) barbs around the health cross." + } + "Build-point Changes" + { + "Structures destroyed by enemy players will not immediately become available " + "for reuse, but instead enter a queue. Build points will gradually leave the " + "queue to become available again, at a rate proportional to the amount of " + "points in the queue.\n\n Repeaters can be built at any stage and come with 20 " + "BP that can only be used nearby to facilitate making small outposts. Aliens " + "do not have a structure that provides additional buildpoints, but they have 150 " + "overall BP to compensate." + } + "Marked Deconstruction" + { + "The deconstruction method has changed. Buildables are no longer instantly " + "deconstructed. Instead, a deconstruct mark appears on the health bar. " + "Go ahead and build a new buildable somewhere else and the old one will " + "be removed automatically. Buildables that are about to be removed by " + "constructing the selected buildable glow red." + } + "Alien Buildables" + { + "Nearly useless in 1.1, Barricades now have more health, are cheaper to " + "build, and will shrink to allow Aliens to pass over them. Acid tubes " + "will fire from behind barricades, providing a formidable defense. " + "Experiment with blocking off hallways and building staged defenses, but " + "keep in mind that low ceilings will prevent Tyrants from returning inside " + "the base. Hives are also much improved to become worth building in stage 3." + } + "Human Buildables" + { + "Turrets now have a small spin up delay before firing, but they have " + "increased range and damage output.\n\n" + "To protect against small Aliens getting inside " + "the base, build Tesla Generators at Stage 3. Tesla Generators no longer " + "require the Defense Computer to function. Instead, the Defense Computer " + "will automatically repair Human buildables. Tesla Generators can fire " + "over turrets. " + } + "Human Weapons" + { + "Most of the human projeciles have a small volume now, making them more " + "effective against smaller targets.\n" + "The Lucifer Cannon projectile can be fired faster but now takes longer " + "to charge. You will be able to hear your teammates overcharge " + "their Lucifer Cannon.\n" + "The Flamer projectile now gains more of the velocity of its wielder, " + "making it easier to chase down aliens without burning yourself to a " + "crisp. Other weapons also have smaller changes." + } + "Lag Correction" + { + "While the Tremulous implementation of Neil Toronto's unlagged is " + "becoming widely accepted, we also implement client-side improvements " + "not possible in 1.1 servers. For those who insist on leading their " + "attacks, setting cg_unlagged to 0 will disable backward reconcilliation " + "on your hitscan weapons." + } + "Sprint" + { + "The sprint bind has changed from \"boost\" to \"+button8\"; you can bind it " + "in the options menu or in the console (\\bind shift +button8). Now, instead " + "of tapping the button while moving to start sprinting, just hold it down " + "and let go to stop. Alternately, you can change this to a toggle behavior " + "with cg_sprintToggle. \n\n" + } + "Dodge" + { + "Humans also have a new movement ability: dodge. You can bind it in the " + "options menu or the console (\\bind shift +button6). When strafing or " + "walking backwards, press the dodge key to make a quick, low jump. You " + "can bind this to the same key as sprint in the console with \\bind shift " + "\"+button8; +button6\"" + } + "Headshots" + { + "Headshots on unarmored humans only cause 150% damage. Battlesuit and " + "helmet protection have been reduced so headshot damage remains the same." + } + "Dretch" + { + "Dretches are slightly faster and can now damage any human structure while it " + "is still building, but can no longer damage turrets and teslas that " + "have been completed." + } + "Basilisk" + { + "Basilisks provide regeneration boosting auras to nearby teammates: 2x " + "from regular and 3x from advanced basilisks. Their footsteps are also " + "silent for greater stealth." + } + "Marauder" + { + "The Adv. Marauder's electric shock damage is no longer split between its " + "targets, making it more effective against large groups of humans and " + "buildables. Targets are now chosen slightly differently: instead of " + "each new chain section originating from the previous target, it will " + "originate from the first target." + } + "Dragoon" + { + "Advanced dragoons are now available at stage 2. Both dragoons have the " + "range of their chomp attacks lowered, but their pounce attacks are much " + "more useful. Try to use pounce to pin a human to the wall before chomping." + } + "Tyrant" + { + "The Tyrant is now a weaker class as its health has been lowered and " + "turret damage is greater. To counter this, Tyrants can charge for longer " + "periods of time, hit targets multiple times in a single charge, " + "and crush any Humans they land on top of. Trample charge does not " + "instantly release when full but can be held for two seconds. Trample " + "attacks on a human pinned against a wall are VERY powerful. Use this to " + "your advantage. The Tyrant's healing aura has been removed; find a " + "booster or a basilisk to heal faster." + } +} diff --git a/assets/ui/hud.txt b/assets/ui/hud.txt new file mode 100755 index 0000000..ed3aa43 --- /dev/null +++ b/assets/ui/hud.txt @@ -0,0 +1,11 @@ +// hud menu defs +// +{ + loadMenu { "ui/tremulous_human_hud.menu" } + loadMenu { "ui/tremulous_alien_builder_hud.menu" } + loadMenu { "ui/tremulous_alien_general_hud.menu" } + loadMenu { "ui/tremulous_default_hud.menu" } + + loadMenu { "ui/teamscore.menu" } + loadMenu { "ui/loading.menu" } +} diff --git a/assets/ui/ingame.menu b/assets/ui/ingame.menu new file mode 100755 index 0000000..808287e --- /dev/null +++ b/assets/ui/ingame.menu @@ -0,0 +1,140 @@ +#include "ui/menudef.h" +{ + +#define BUTT_BAR_X 25 +#define BUTT_BAR_Y 0 +#define BUTT_BAR_W 250 +#define BUTT_BAR_H 56 +#define BUTT_W (BUTT_BAR_W/4) +#define BUTT_H BUTT_BAR_H +#define BUTT_TEXT_S 20 + + assetGlobalDef + { + font "fonts/font" 26 // font + smallFont "fonts/smallfont" 20 // font + bigFont "fonts/bigfont" 34 // font + cursor "ui/assets/3_cursor3" // cursor + gradientBar "ui/assets/gradientbar2.tga" // gradient bar + itemFocusSound "sound/misc/menu2.wav" // sound for item getting focus (via keyboard or mouse ) + + fadeClamp 1.0 // sets the fadeup alpha + fadeCycle 1 // how often fade happens in milliseconds + fadeAmount 0.1 // amount to adjust alpha per cycle + + shadowColor 0.1 0.1 0.1 0.25 // shadow color + } + + + \\ INGAME MENU \\ + + menuDef + { + name "ingame" + style WINDOW_STYLE_FILLED + visible MENU_FALSE + fullScreen 0 + outOfBoundsClick // this closes the window if it gets a click out of the rectangle + rect 0 0 1280 56 + focusColor 1 .75 0 1 + disableColor .5 .5 .5 1 + backColor 0 0 0 1 + aspectBias ALIGN_LEFT + + onEsc + { + close ingame; + } + + itemDef + { + name splashmodel + rect 0 -10 640 66 + type ITEM_TYPE_MODEL + style WINDOW_STYLE_FILLED + asset_model "models/splash/splash_screen.md3" + model_fovx 32.0 + model_fovy 3.8 + model_angle 180 + visible MENU_TRUE + decoration + backcolor 0 0 0 1 + } + + itemdef + { + name game + text "Game" + rect BUTT_BAR_X BUTT_BAR_Y BUTT_W BUTT_H + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .4 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + open ingame_game + } + } + + itemDef + { + name options + text "Options" + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + rect (BUTT_BAR_X+BUTT_W) BUTT_BAR_Y BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .4 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + open ingame_options + } + } + + itemDef + { + name leave + text "Help" + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + rect (BUTT_BAR_X+(2*BUTT_W)) BUTT_BAR_Y BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .4 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + open ingame_help + } + } + + itemDef + { + name leave + text "Exit" + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + rect (BUTT_BAR_X+(3*BUTT_W)) BUTT_BAR_Y BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .4 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + open ingame_leave + } + } + } +} diff --git a/assets/ui/ingame.txt b/assets/ui/ingame.txt new file mode 100755 index 0000000..2caf449 --- /dev/null +++ b/assets/ui/ingame.txt @@ -0,0 +1,9 @@ +// menu defs +// +{ + loadMenu { "ui/ingame.menu" } + loadMenu { "ui/ingame_game.menu" } + loadMenu { "ui/ingame_options.menu" } + loadMenu { "ui/ingame_leave.menu" } + loadMenu { "ui/ingame_help.menu" } +} diff --git a/assets/ui/ingame_game.menu b/assets/ui/ingame_game.menu new file mode 100755 index 0000000..d7d7dd6 --- /dev/null +++ b/assets/ui/ingame_game.menu @@ -0,0 +1,862 @@ +#include "ui/menudef.h" + +{ + \\ INGAME GAME BOX \\ + +#define W 320 +#define H 310 +#define X 10 +#define Y 60 +#define BORDER 10 + +#define TOPBUTT_W 80 +#define TOPBUTT_H 30 + +#define SIDEBUTT_W 50 +#define SIDEBUTT_H 25 + +#define MAP_X (SIDEBUTT_W+BORDER) +#define MAP_Y ((2*BORDER)+TOPBUTT_H) +#define MAP_W 124 +#define MAP_H 93 +#define MAPLIST_X MAP_X +#define MAPLIST_Y ((3*BORDER)+TOPBUTT_H+MAP_H) +#define MAPLIST_W (W-((2*BORDER)+SIDEBUTT_W)) +#define MAPLIST_H (H-((4*BORDER)+MAP_H+TOPBUTT_H)) +#define MAPBUTT_X (MAP_X+MAP_W+BORDER) +#define MAPBUTT_Y MAP_Y +#define MAPBUTT_W (W-(MAPBUTT_X+BORDER)) +#define MAPBUTT_H 20 + +#define PBUTT_X MAP_X +#define PBUTT_Y (H-((2*PBUTT_H)+BORDER)) +#define PBUTT_W (W-((2*BORDER)+SIDEBUTT_W)) +#define PBUTT_H 45 +#define PLIST_X PBUTT_X +#define PLIST_Y ((2*BORDER)+TOPBUTT_H) +#define PLIST_W PBUTT_W +#define PLIST_H ((H-((4*BORDER)+(2*PBUTT_H)+TOPBUTT_H))) + +#define PLAYER_C 0.7 +#define IGN_C 0.15 +#define IGNY_C 0.15 +#define IGNHEAD_H 15 +#define IGNHEAD_Y ((2*BORDER)+TOPBUTT_H) +#define IGNBUTT_W ((W-(2*BORDER))/2) +#define IGNBUTT_H 25 +#define IGNBUTT_X BORDER +#define IGNBUTT_Y (H-(BORDER+IGNBUTT_H)) +#define IGNORE_W (W-(2*BORDER)) +#define IGNORE_W2 ((W-(2*BORDER))-15) +#define IGNORE_H (H-((4*BORDER)+TOPBUTT_H+IGNHEAD_H+IGNBUTT_H)) +#define IGNORE_X BORDER +#define IGNORE_Y ((2*BORDER)+TOPBUTT_H+IGNHEAD_H) +#define IGNORE_TOFF 5 + +#define INFO_Y ((2*BORDER)+TOPBUTT_H+10) +#define INFOELEM_H 15 +#define INFO_OFF (0-(W-90)) + + menuDef + { + name "ingame_game" + visible MENU_FALSE + fullscreen MENU_FALSE + outOfBoundsClick // this closes the window if it gets a click out of the rectangle + rect X Y W H + focusColor 1 .75 0 1 + aspectBias ALIGN_LEFT + onopen + { + uiScript InitIgnoreList; + uiScript loadArenas; + uiScript loadServerInfo; + hide gameGrp; + show vote; + show mapvote; + + setitemcolor voteBtn forecolor 0.2 0.2 0.2 1.0; + setitemcolor ignoreBtn forecolor 1.0 1.0 1.0 1.0; + setitemcolor infoBtn forecolor 1.0 1.0 1.0 1.0 + } + + itemDef + { + name window + rect 0 0 W H + style WINDOW_STYLE_FILLED + backcolor 0 0 0 1 + visible MENU_TRUE + decoration + + border WINDOW_BORDER_FULL + borderSize 1.0 + borderColor 0.5 0.5 0.5 1 + } + + //Section menus + itemDef + { + name voteBtn + text "Vote" + group menuGrp + style WINDOW_STYLE_EMPTY + rect (W-((3*TOPBUTT_W)+BORDER)) BORDER TOPBUTT_W TOPBUTT_H + type ITEM_TYPE_BUTTON + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .35 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + hide gameGrp; + show vote; + show mapvote; + + setitemcolor infoBtn forecolor 1.0 1.0 1.0 1.0; + setitemcolor voteBtn forecolor 0.2 0.2 0.2 1.0; + setitemcolor ignoreBtn forecolor 1.0 1.0 1.0 1.0 + } + } + + itemDef + { + name ignoreBtn + text "Ignore" + group menuGrp + style WINDOW_STYLE_EMPTY + rect (W-((2*TOPBUTT_W)+BORDER)) BORDER TOPBUTT_W TOPBUTT_H + type ITEM_TYPE_BUTTON + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .35 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + hide gameGrp; + show ignore; + + setitemcolor infoBtn forecolor 1.0 1.0 1.0 1.0; + setitemcolor voteBtn forecolor 1.0 1.0 1.0 1.0; + setitemcolor ignoreBtn forecolor 0.2 0.2 0.2 1.0 + } + } + + itemDef + { + name infoBtn + text "Info" + group menuGrp + style WINDOW_STYLE_EMPTY + rect (W-((1*TOPBUTT_W)+BORDER)) BORDER TOPBUTT_W TOPBUTT_H + type ITEM_TYPE_BUTTON + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .35 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + hide gameGrp; + show info; + + setitemcolor infoBtn forecolor 0.2 0.2 0.2 1.0; + setitemcolor voteBtn forecolor 1.0 1.0 1.0 1.0; + setitemcolor ignoreBtn forecolor 1.0 1.0 1.0 1.0 + } + } + + +//////// VOTE + + //Vote menu + itemDef + { + name vote + text "Map" + group gameGrp + style WINDOW_STYLE_EMPTY + rect 0 ((2*BORDER)+TOPBUTT_H) SIDEBUTT_W SIDEBUTT_H + type ITEM_TYPE_BUTTON + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + hide gameGrp; + show mapvote; + show vote; + } + } + + itemDef + { + name vote + text "Players" + group gameGrp + style WINDOW_STYLE_EMPTY + rect 0 ((2*BORDER)+TOPBUTT_H+SIDEBUTT_H) SIDEBUTT_W SIDEBUTT_H + type ITEM_TYPE_BUTTON + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + hide gameGrp; + show playervote; + show reasonfield; + show vote; + } + } + + itemDef + { + name vote + text "Team" + group gameGrp + style WINDOW_STYLE_EMPTY + rect 0 ((2*BORDER)+TOPBUTT_H+(2*SIDEBUTT_H)) SIDEBUTT_W SIDEBUTT_H + type ITEM_TYPE_BUTTON + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + hide gameGrp; + show teamvote; + show reasonfield; + show vote; + } + } + + itemDef + { + name reasonfield + group gameGrp + type ITEM_TYPE_EDITFIELD + style WINDOW_STYLE_EMPTY + text "Reason:" + cvar "ui_reason" + maxChars 50 + rect PBUTT_X (PBUTT_Y+PBUTT_H) PBUTT_W PBUTT_H + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + textscale .25 + outlinecolor .2 .2 .2 .5 + backcolor 0 0 0 0 + forecolor 1 1 1 1 + border WINDOW_BORDER_NONE + bordercolor 0 0 0 0 + visible MENU_FALSE + } + +///// Map Vote + itemDef + { + name mapvote + group gameGrp + style WINDOW_STYLE_EMPTY + ownerdraw UI_SELECTEDMAPPREVIEW + rect MAP_X MAP_Y MAP_W MAP_H + border WINDOW_BORDER_FULL + bordercolor .5 .5 .5 .5 + visible MENU_FALSE + } + + itemDef + { + name mapvote + group gameGrp + rect MAPLIST_X MAPLIST_Y MAPLIST_W MAPLIST_H + type ITEM_TYPE_LISTBOX + style WINDOW_STYLE_EMPTY + elementwidth 120 + elementheight 15 + textscale .225 + elementtype LISTBOX_TEXT + feeder FEEDER_MAPS + border WINDOW_BORDER_FULL + bordercolor 0.5 0.5 0.5 0.5 + forecolor 1 1 1 1 + backcolor 0.2 0.2 0.2 1 + outlinecolor 0.1 0.1 0.1 0.5 + visible MENU_FALSE + doubleclick + { + play "sound/misc/menu1.wav"; + uiScript voteMap; + uiScript closeingame + } + } + + itemDef + { + name mapvote + group gameGrp + text "Load Selected Map" + type ITEM_TYPE_BUTTON + textscale .25 + rect MAPBUTT_X MAPBUTT_Y MAPBUTT_W MAPBUTT_H + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + uiScript voteMap; + uiScript closeingame + } + } + + itemDef + { + name mapvote + group gameGrp + text "Load Selected Map Next" + type ITEM_TYPE_BUTTON + textscale .25 + rect MAPBUTT_X (MAPBUTT_Y+MAPBUTT_H) MAPBUTT_W MAPBUTT_H + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + uiScript voteNextMap; + uiScript closeingame + } + } + + itemDef + { + name mapvote + group gameGrp + text "Restart Current Map" + type ITEM_TYPE_BUTTON + textscale .25 + rect MAPBUTT_X (MAPBUTT_Y+(2*MAPBUTT_H)) MAPBUTT_W MAPBUTT_H + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + exec "cmd callvote map_restart"; + uiScript closeingame + } + } + + itemDef + { + name mapvote + group gameGrp + text "Begin Sudden Death" + type ITEM_TYPE_BUTTON + textscale .25 + rect MAPBUTT_X (MAPBUTT_Y+(3*MAPBUTT_H)) MAPBUTT_W MAPBUTT_H + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + exec "cmd callvote sudden_death"; + uiScript closeingame + } + } + + itemDef + { + name mapvote + group gameGrp + text "End Match In Draw" + type ITEM_TYPE_BUTTON + textscale .25 + rect MAPBUTT_X (MAPBUTT_Y+(4*MAPBUTT_H)) MAPBUTT_W MAPBUTT_H + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + exec "cmd callvote draw"; + uiScript closeingame + } + } + +///// Player Vote + itemDef + { + name playervote + group gameGrp + rect PLIST_X PLIST_Y PLIST_W PLIST_H + style WINDOW_STYLE_EMPTY + type ITEM_TYPE_LISTBOX + elementwidth 120 + elementheight 15 + textscale .225 + elementtype LISTBOX_TEXT + feeder FEEDER_PLAYER_LIST + border WINDOW_BORDER_FULL + bordercolor 0.5 0.5 0.5 0.5 + forecolor 1 1 1 1 + backcolor 0.2 0.2 0.2 1 + outlinecolor 0.1 0.1 0.1 0.5 + visible MENU_FALSE + } + + itemDef + { + name playervote + group gameGrp + text "Mute Player" + type ITEM_TYPE_BUTTON + textscale .25 + rect PBUTT_X PBUTT_Y (PBUTT_W/2) PBUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + uiScript voteMute; + uiScript closeingame + } + } + + itemDef + { + name playervote + group gameGrp + text "Un-Mute Player" + type ITEM_TYPE_BUTTON + textscale .25 + rect (PBUTT_X+(PBUTT_W/2)) PBUTT_Y (PBUTT_W/2) PBUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + uiScript voteUnMute; + uiScript closeingame + } + } + + itemDef + { + name playervote + group gameGrp + text "Kick Player" + type ITEM_TYPE_BUTTON + textscale .25 + rect PBUTT_X (PBUTT_Y+(PBUTT_H/2)) PBUTT_W PBUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + uiScript voteKick; + uiScript closeingame + } + } + + +///// Team Vote + itemDef + { + name teamvote + group gameGrp + rect PLIST_X PLIST_Y PLIST_W PLIST_H + style WINDOW_STYLE_EMPTY + type ITEM_TYPE_LISTBOX + elementwidth 120 + elementheight 15 + textscale .225 + elementtype LISTBOX_TEXT + feeder FEEDER_TEAM_LIST + border WINDOW_BORDER_FULL + bordercolor 0.5 0.5 0.5 0.5 + forecolor 1 1 1 1 + backcolor 0.2 0.2 0.2 1 + outlinecolor 0.1 0.1 0.1 0.5 + visible MENU_FALSE + } + + itemDef + { + name teamvote + group gameGrp + text "Kick Teammate" + type ITEM_TYPE_BUTTON + textscale .25 + rect PBUTT_X PBUTT_Y (PBUTT_W/2) PBUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + uiScript voteTeamKick; + uiScript closeingame + } + } + + itemDef + { + name teamvote + group gameGrp + text "Deny Building For Teammate" + type ITEM_TYPE_BUTTON + textscale .25 + rect (PBUTT_X+(PBUTT_W/2)) PBUTT_Y (PBUTT_W/2) PBUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + uiScript voteTeamDenyBuild; + uiScript closeingame + } + } + + itemDef + { + name teamvote + group gameGrp + text "Allow Building For Teammate" + type ITEM_TYPE_BUTTON + textscale .25 + rect 110 215 150 20 + rect PBUTT_X (PBUTT_Y+(PBUTT_H/2)) (PBUTT_W/2) PBUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + uiScript voteTeamAllowBuild; + uiScript closeingame + } + } + + itemDef + { + name teamvote + group gameGrp + text "Admit Defeat" + type ITEM_TYPE_BUTTON + textscale .25 + rect (PBUTT_X+(PBUTT_W/2)) (PBUTT_Y+(PBUTT_H/2)) (PBUTT_W/2) PBUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + exec "cmd callteamvote admitdefeat"; + uiScript closeingame + } + } + +//////// IGNORE + itemDef + { + name ignore + group gameGrp + rect IGNORE_X IGNHEAD_Y (PLAYER_C*IGNORE_W2) IGNHEAD_H + text "Player Name" + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + textalignx IGNORE_TOFF + visible MENU_FALSE + type ITEM_TYPE_TEXT + textscale .225 + } + itemDef + { + name ignore + group gameGrp + rect (IGNORE_X+(PLAYER_C*IGNORE_W2)) IGNHEAD_Y (IGN_C*IGNORE_W2) IGNHEAD_H + text "Ignored" + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + visible MENU_FALSE + type ITEM_TYPE_TEXT + textscale .225 + } + itemDef + { + name ignore + group gameGrp + rect (IGNORE_X+((PLAYER_C+IGN_C)*IGNORE_W2)) IGNHEAD_Y (IGNY_C*IGNORE_W2) IGNHEAD_H + text "Ignoring You" + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + visible MENU_FALSE + type ITEM_TYPE_TEXT + textscale .225 + } + itemDef + { + name ignore + group gameGrp + rect IGNORE_X IGNORE_Y IGNORE_W IGNORE_H + type ITEM_TYPE_LISTBOX + style WINDOW_STYLE_EMPTY + elementwidth 120 + elementheight 16 + textscale .225 + border WINDOW_BORDER_FULL + bordersize 1 + bordercolor .5 .5 .5 1 + forecolor 1 1 1 1 + backcolor 0.2 0.2 0.2 1 + outlinecolor 0.1 0.1 0.1 0.5 + elementtype LISTBOX_TEXT + feeder FEEDER_IGNORE_LIST + visible MENU_FALSE + columns 3 + IGNORE_TOFF ((PLAYER_C*IGNORE_W)-(3*IGNORE_TOFF)) ALIGN_LEFT + (IGNORE_TOFF+((PLAYER_C)*IGNORE_W)) ((IGN_C*IGNORE_W)-(3*IGNORE_TOFF)) ALIGN_CENTER + (IGNORE_TOFF+((PLAYER_C+IGN_C)*IGNORE_W)) ((IGNY_C*IGNORE_W)-(3*IGNORE_TOFF)) ALIGN_CENTER + doubleClick + { + play "sound/misc/menu1.wav"; + uiScript ToggleIgnore + } + } + + itemDef + { + name ignore + text "Ignore Player" + group gameGrp + style WINDOW_STYLE_EMPTY + rect IGNBUTT_X IGNBUTT_Y IGNBUTT_W IGNBUTT_H + type ITEM_TYPE_BUTTON + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + uiScript IgnorePlayer + } + } + + itemDef + { + name ignore + text "Stop Ignoring Player" + group gameGrp + style WINDOW_STYLE_EMPTY + rect (IGNBUTT_X+IGNBUTT_W) IGNBUTT_Y IGNBUTT_W IGNBUTT_H + type ITEM_TYPE_BUTTON + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + uiScript UnIgnorePlayer + } + } + +//////// INFO + + itemDef + { + name info + group gameGrp + rect 0 (INFO_Y+(0*INFOELEM_H)) W INFOELEM_H + type ITEM_TYPE_EDITFIELD + style WINDOW_STYLE_EMPTY + text "Server Name:" + cvar ui_serverinfo_hostname + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx INFO_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + decoration + } + + itemDef + { + name info + group gameGrp + rect 0 (INFO_Y+(1*INFOELEM_H)) W INFOELEM_H + type ITEM_TYPE_EDITFIELD + style WINDOW_STYLE_EMPTY + text "Time Limit:" + cvar ui_serverinfo_timelimit + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx INFO_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + decoration + } + + itemDef + { + name info + group gameGrp + rect 0 (INFO_Y+(2*INFOELEM_H)) W INFOELEM_H + type ITEM_TYPE_EDITFIELD + style WINDOW_STYLE_EMPTY + text "Sudden Death Time:" + cvar ui_serverinfo_sd + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx INFO_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + decoration + } + + itemDef + { + name info + group gameGrp + rect 0 (INFO_Y+(3*INFOELEM_H)) W INFOELEM_H + type ITEM_TYPE_EDITFIELD + style WINDOW_STYLE_EMPTY + text "Max Clients:" + cvar ui_serverinfo_maxclients + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx INFO_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + decoration + } + + itemDef + { + name info + group gameGrp + rect 0 (INFO_Y+(4*INFOELEM_H)) W INFOELEM_H + type ITEM_TYPE_EDITFIELD + style WINDOW_STYLE_EMPTY + text "Map Name:" + cvar ui_serverinfo_mapname + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx INFO_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + decoration + } + + itemDef + { + name info + group gameGrp + rect 0 (INFO_Y+(5*INFOELEM_H)) W INFOELEM_H + type ITEM_TYPE_YESNO + style WINDOW_STYLE_EMPTY + text "Lag Correction:" + cvar ui_serverinfo_unlagged + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx INFO_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + decoration + } + + itemDef + { + name info + group gameGrp + rect 0 (INFO_Y+(6*INFOELEM_H)) W INFOELEM_H + type ITEM_TYPE_YESNO + style WINDOW_STYLE_EMPTY + text "Friendly Fire:" + textalign ALIGN_RIGHT + cvar ui_serverinfo_friendlyFire + textvalign VALIGN_CENTER + textalignx INFO_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + decoration + } + + itemDef + { + name info + group gameGrp + rect 0 (INFO_Y+(7*INFOELEM_H)) W INFOELEM_H + type ITEM_TYPE_YESNO + style WINDOW_STYLE_EMPTY + text "Buildable Friendly Fire:" + cvar ui_serverinfo_friendlyBuildableFire + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx INFO_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + decoration + } + + itemDef + { + name info + group gameGrp + rect 0 (INFO_Y+(8*INFOELEM_H)) W INFOELEM_H + type ITEM_TYPE_EDITFIELD + style WINDOW_STYLE_EMPTY + text "Version:" + cvar ui_serverinfo_version + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx INFO_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + decoration + } + } +} diff --git a/assets/ui/ingame_help.menu b/assets/ui/ingame_help.menu new file mode 100755 index 0000000..4c8065b --- /dev/null +++ b/assets/ui/ingame_help.menu @@ -0,0 +1,88 @@ +#include "ui/menudef.h" + +{ + +#define W 420 +#define H 290 +#define X 10 +#define Y 60 +#define BORDER 10 + +#define LIST_W 140 +#define LIST_H (H-(2*BORDER)) +#define LIST_X BORDER +#define LIST_Y BORDER + +#define INFO_W (W-((3*BORDER)+LIST_W)) +#define INFO_H (H-(2*BORDER)) +#define INFO_X ((2*BORDER)+LIST_W) +#define INFO_Y BORDER +#define INFO_TOFF 6 + + menuDef + { + name "ingame_help" + visible MENU_FALSE + fullscreen MENU_FALSE + outOfBoundsClick // this closes the window if it gets a click out of the rectangle + rect X Y W H + focusColor 1 .75 0 1 + aspectBias ALIGN_LEFT + onOpen { + setFocus list; + } + + itemDef + { + name window + rect 0 0 W H + style WINDOW_STYLE_FILLED + backcolor 0 0 0 1 + visible MENU_TRUE + decoration + + border WINDOW_BORDER_FULL + borderSize 1.0 + borderColor 0.5 0.5 0.5 1 + } + + itemDef + { + name "list" + rect LIST_X LIST_Y LIST_W LIST_H + type ITEM_TYPE_LISTBOX + style WINDOW_STYLE_EMPTY + elementwidth 120 + elementheight 20 + textscale .33 + elementtype LISTBOX_TEXT + feeder FEEDER_HELP_LIST + border WINDOW_BORDER_FULL + bordercolor 0.5 0.5 0.5 0.5 + forecolor 1 1 1 1 + backcolor 0.2 0.2 0.2 1 + outlinecolor 0.1 0.1 0.1 0.5 + visible MENU_TRUE + } + + itemDef + { + name infopane + ownerdraw UI_HELPINFOPANE + textstyle ITEM_TEXTSTYLE_NORMAL + style WINDOW_STYLE_EMPTY + rect INFO_X INFO_Y INFO_W INFO_H + textscale .33 + textalign ALIGN_LEFT + textvalign VALIGN_TOP + textalignx INFO_TOFF + textaligny INFO_TOFF + border WINDOW_BORDER_FULL + bordercolor 0.5 0.5 0.5 0.5 + forecolor 1 1 1 1 + backcolor 0.2 0.2 0.2 1 + visible MENU_TRUE + decoration + } + } +} diff --git a/assets/ui/ingame_leave.menu b/assets/ui/ingame_leave.menu new file mode 100755 index 0000000..d07e3ce --- /dev/null +++ b/assets/ui/ingame_leave.menu @@ -0,0 +1,209 @@ +#include "ui/menudef.h" + +{ + \\ INGAME_LEAVE MENU \\ + +#define X 160 +#define Y 60 +#define W 120 +#define H 100 + +#define L1_X 0 +#define L1_Y (H/6) +#define L1_W W +#define L1_H (H/3) +#define L2_X 0 +#define L2_Y (H/2) +#define L2_W W +#define L2_H (H/3) + + menuDef + { + name "ingame_leave" + visible MENU_TRUE + fullScreen 0 + outOfBoundsClick // this closes the window if it gets a click out of the rectangle + rect X Y W H + focusColor 1 .75 0 1 + aspectBias ALIGN_LEFT + onOpen + { + show grpMenu; + hide grpConfirm + } + + itemDef + { + name leave + style WINDOW_STYLE_FILLED + rect 0 0 W H + backcolor 0 0 0 1 + visible MENU_TRUE + decoration + + border WINDOW_BORDER_FULL + borderSize 1.0 + borderColor 0.5 0.5 0.5 1 + } + + itemDef + { + name leave + type ITEM_TYPE_BUTTON + text "Main Menu" + group grpMenu + style WINDOW_STYLE_EMPTY + rect L1_X L1_Y L1_W L1_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + hide grpMenu; + show leaveConfirm + } + } + + itemDef + { + name leave + group grpMenu + type ITEM_TYPE_BUTTON + text "Quit" + style WINDOW_STYLE_EMPTY + rect L2_X L2_Y L2_W L2_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + hide grpMenu; + show quitConfirm + } + } + + + // CONFIRMS // + + + itemDef + { + name leaveConfirm + type ITEM_TYPE_TEXT + text "Return To Main Menu?" + group grpConfirm + style WINDOW_STYLE_EMPTY + rect L1_X L1_Y L1_W L1_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .25 + decoration + forecolor 1 1 1 1 + visible MENU_TRUE + } + + itemDef + { + name leaveConfirm + text "Yes" + group grpConfirm + type ITEM_TYPE_BUTTON + textscale .25 + style WINDOW_STYLE_EMPTY + rect L2_X L2_Y (L2_W/2) L2_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + uiScript leave + } + } + + itemDef + { + name leaveConfirm + text "No" + group grpConfirm + type ITEM_TYPE_BUTTON + textscale .25 + style WINDOW_STYLE_EMPTY + rect (L2_X+(L2_W/2)) L2_Y (L2_W/2) L2_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu3.wav"; + hide grpConfirm; + show grpMenu + } + } + + itemDef + { + name quitConfirm + type ITEM_TYPE_TEXT + text "Want To Quit Game?" + group grpConfirm + style WINDOW_STYLE_EMPTY + rect L1_X L1_Y L1_W L1_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .25 + forecolor 1 1 1 1 + decoration + visible MENU_TRUE + } + + itemDef + { + name quitConfirm + text "Yes" + group grpConfirm + type ITEM_TYPE_BUTTON + textscale .25 + style WINDOW_STYLE_EMPTY + rect L2_X L2_Y (L2_W/2) L2_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + uiScript quit + } + } + + itemDef + { + name quitConfirm + text "No" + group grpConfirm + type ITEM_TYPE_BUTTON + textscale .25 + style WINDOW_STYLE_EMPTY + rect (L2_X+(L2_W/2)) L2_Y (L2_W/2) L2_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu3.wav"; + hide grpConfirm; + show grpMenu + } + } + } +} diff --git a/assets/ui/ingame_options.menu b/assets/ui/ingame_options.menu new file mode 100755 index 0000000..f9f1478 --- /dev/null +++ b/assets/ui/ingame_options.menu @@ -0,0 +1,2359 @@ +#include "ui/menudef.h" + +{ + \\ INGAME OPTIONS BOX \\ + +#define W 320 +#define H 290 +#define X 10 +#define Y 60 +#define BORDER 10 + +#define TOPBUTT_W ((W-(2*BORDER))/4) +#define TOPBUTT_H 30 + +#define CONTENT_X BORDER +#define CONTENT_Y ((1.5*BORDER)+TOPBUTT_H) +#define CONTENT_W (W-(2*BORDER)) +#define CONTENT_OFF (0-(CONTENT_W/2)) + +#define SIDEBUTT_W 65 +#define SIDEBUTT_H 25 +#define SCONTENT_X (SIDEBUTT_W+BORDER) +#define SCONTENT_Y CONTENT_Y +#define SCONTENT_W (W-(SIDEBUTT_W+(2*BORDER))) +#define SCONTENT_OFF (0-(SCONTENT_W/2)) + +#define RESCOMBO_OFF 8 + +#define ELEM_H 16 + + menuDef + { + name "ingame_options" + visible MENU_FALSE + fullscreen MENU_FALSE + outOfBoundsClick // this closes the window if it gets a click out of the rectangle + rect X Y W H + focusColor 1 .75 0 1 + aspectBias ALIGN_LEFT + onopen + { + hide optionsGrp; + show player; + + setitemcolor playerBtn forecolor 0.2 0.2 0.2 1.0; + setitemcolor hudBtn forecolor 1.0 1.0 1.0 1.0; + setitemcolor controlsBtn forecolor 1.0 1.0 1.0 1.0; + setitemcolor systemBtn forecolor 1.0 1.0 1.0 1.0 + } + + itemDef + { + name window + rect 0 0 W H + style WINDOW_STYLE_FILLED + backcolor 0 0 0 1 + visible MENU_TRUE + decoration + + border WINDOW_BORDER_FULL + borderSize 1.0 + borderColor 0.5 0.5 0.5 1 + } + + //Section menus + itemDef + { + name PlayerBtn + text "Player" + group menuGrp + style WINDOW_STYLE_EMPTY + rect (W-((4*TOPBUTT_W)+BORDER)) BORDER TOPBUTT_W TOPBUTT_H + type ITEM_TYPE_BUTTON + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .35 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + hide optionsGrp; + show player; + + setitemcolor playerBtn forecolor 0.2 0.2 0.2 1.0; + setitemcolor hudBtn forecolor 1.0 1.0 1.0 1.0; + setitemcolor controlsBtn forecolor 1.0 1.0 1.0 1.0; + setitemcolor systemBtn forecolor 1.0 1.0 1.0 1.0 + } + } + itemDef + { + name hudBtn + text "HUD" + group menuGrp + style WINDOW_STYLE_EMPTY + rect (W-((3*TOPBUTT_W)+BORDER)) BORDER TOPBUTT_W TOPBUTT_H + type ITEM_TYPE_BUTTON + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .35 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + hide optionsGrp; + show hud; + + setitemcolor playerBtn forecolor 1.0 1.0 1.0 1.0; + setitemcolor hudBtn forecolor 0.2 0.2 0.2 1.0; + setitemcolor controlsBtn forecolor 1.0 1.0 1.0 1.0; + setitemcolor systemBtn forecolor 1.0 1.0 1.0 1.0 + } + } + + itemDef + { + name controlsBtn + text "Controls" + group menuGrp + style WINDOW_STYLE_EMPTY + rect (W-((2*TOPBUTT_W)+BORDER)) BORDER TOPBUTT_W TOPBUTT_H + type ITEM_TYPE_BUTTON + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .35 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + hide optionsGrp; + show controls; + show look; + + setitemcolor playerBtn forecolor 1.0 1.0 1.0 1.0; + setitemcolor hudBtn forecolor 1.0 1.0 1.0 1.0; + setitemcolor controlsBtn forecolor 0.2 0.2 0.2 1.0; + setitemcolor systemBtn forecolor 1.0 1.0 1.0 1.0 + } + } + + itemDef + { + name systemBtn + text "System" + group menuGrp + style WINDOW_STYLE_EMPTY + rect (W-((1*TOPBUTT_W)+BORDER)) BORDER TOPBUTT_W TOPBUTT_H + type ITEM_TYPE_BUTTON + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .35 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + hide optionsGrp; + show system; + show ghardware; + + setitemcolor playerBtn forecolor 1.0 1.0 1.0 1.0; + setitemcolor hudBtn forecolor 1.0 1.0 1.0 1.0; + setitemcolor controlsBtn forecolor 1.0 1.0 1.0 1.0; + setitemcolor systemBtn forecolor 0.2 0.2 0.2 1.0 + } + } + +//////// PLAYER + + itemDef + { + name player + group optionsGrp + type ITEM_TYPE_EDITFIELD + style WINDOW_STYLE_EMPTY + text "Name:" + cvar "name" + maxchars 40 + rect CONTENT_X (CONTENT_Y+(0*ELEM_H)) CONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx CONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + } + + itemDef + { + name player + group optionsGrp + type ITEM_TYPE_YESNO + text "Taunts Sounds Off:" + cvar "cg_noTaunt" + rect CONTENT_X (CONTENT_Y+(1*ELEM_H)) CONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx CONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name player + group optionsGrp + type ITEM_TYPE_YESNO + text "Team Chats Only:" + cvar "cg_teamChatsOnly" + rect CONTENT_X (CONTENT_Y+(2*ELEM_H)) CONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx CONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name player + group optionsGrp + type ITEM_TYPE_YESNO + text "Sticky Spectate:" + cvar "cg_stickySpec" + rect CONTENT_X (CONTENT_Y+(3*ELEM_H)) CONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx CONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name player + group optionsGrp + type ITEM_TYPE_YESNO + text "Tutorial Mode:" + cvar "cg_tutorial" + rect CONTENT_X (CONTENT_Y+(4*ELEM_H)) CONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx CONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name player + group optionsGrp + type ITEM_TYPE_MULTI + text "Disable Warning Dialogs:" + cvar "cg_disableWarningDialogs" + cvarFloatList { "No" 0 "Print to Console" 1 "Yes" 2 } + rect CONTENT_X (CONTENT_Y+(5*ELEM_H)) CONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx CONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name player + group optionsGrp + type ITEM_TYPE_YESNO + text "Static Death Cam:" + cvar "cg_staticDeathCam" + rect CONTENT_X (CONTENT_Y+(6*ELEM_H)) CONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx CONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + +//////// HUD + + itemDef + { + name hud + group optionsGrp + type ITEM_TYPE_MULTI + text "Show Clock:" + cvar "cg_drawClock" + cvarFloatList { "No" 0 "12 Hour" 1 "24 Hour" 2 } + rect CONTENT_X (CONTENT_Y+(0*ELEM_H)) CONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx CONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name hud + group optionsGrp + type ITEM_TYPE_MULTI + text "Show Crosshair:" + cvar "cg_drawCrosshair" + cvarFloatList { "Never" 0 "Ranged Weapons Only" 1 "Always" 2 } + rect CONTENT_X (CONTENT_Y+(1*ELEM_H)) CONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx CONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name hud + group optionsGrp + type ITEM_TYPE_MULTI + text "Crosshair Size:" + cvar "cg_crosshairSize" + cvarFloatList { "Normal" 1 "Small" 0.75 "Tiny" 0.5 "Huge" 1.25 } + rect CONTENT_X (CONTENT_Y+(2*ELEM_H)) CONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx CONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name hud + group optionsGrp + type ITEM_TYPE_YESNO + text "Show Charge Bar:" + cvar "cg_drawChargeBar" + rect CONTENT_X (CONTENT_Y+(3*ELEM_H)) CONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx CONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name hud + group optionsGrp + type ITEM_TYPE_YESNO + text "Show Lag-o-meter:" + cvar "cg_lagometer" + rect CONTENT_X (CONTENT_Y+(4*ELEM_H)) CONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx CONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name hud + group optionsGrp + type ITEM_TYPE_MULTI + text "Show Team Overlay:" + cvar "cg_drawTeamOverlay" + cvarFloatList { "Off" 0 "All Teammates" 1 "Support Teammates" 2 "Nearby Teammates" 3 } + rect CONTENT_X (CONTENT_Y+(5*ELEM_H)) CONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx CONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name hud + group optionsGrp + type ITEM_TYPE_MULTI + text "Sort Team Overlay:" + cvar "cg_teamOverlaySortMode" + cvarFloatList { "None" 0 "Score" 1 "Weapon/Class" 2 } + rect CONTENT_X (CONTENT_Y+(6*ELEM_H)) CONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx CONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name hud + group optionsGrp + type ITEM_TYPE_YESNO + text "Show Gun:" + cvar "cg_drawGun" + rect CONTENT_X (CONTENT_Y+(7*ELEM_H)) CONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx CONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name hud + group optionsGrp + type ITEM_TYPE_MULTI + text "Show Speed:" + cvar "cg_drawspeed" + cvarFloatList { "No" 0 "Text" 1 "Graph" 2 "Text + Graph" 3 "Text No-Z" 5 "Graph No-Z" 6 "Text + Graph No-Z" 7 } + rect CONTENT_X (CONTENT_Y+(8*ELEM_H)) CONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx CONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name hud + group optionsGrp + type ITEM_TYPE_YESNO + text "Show FPS:" + cvar "cg_drawFPS" + rect CONTENT_X (CONTENT_Y+(9*ELEM_H)) CONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx CONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name hud + group optionsGrp + type ITEM_TYPE_YESNO + text "Show Timer:" + cvar "cg_drawTimer" + rect CONTENT_X (CONTENT_Y+(10*ELEM_H)) CONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx CONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name hud + group optionsGrp + type ITEM_TYPE_YESNO + text "Show Demo State:" + cvar "cg_drawDemoState" + rect CONTENT_X (CONTENT_Y+(11*ELEM_H)) CONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx CONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + +//////// CONTROLS + + //Controls menu + itemDef + { + name controls + text "Look" + group optionsGrp + style WINDOW_STYLE_EMPTY + rect 0 ((2*BORDER)+TOPBUTT_H+(0*SIDEBUTT_H)) SIDEBUTT_W SIDEBUTT_H + type ITEM_TYPE_BUTTON + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + hide optionsGrp; + show controls; + show look + } + } + +//////// LOOK + + itemDef + { + name look + group optionsGrp + type ITEM_TYPE_BIND + text "Lookup:" + cvar "+lookup" + rect SCONTENT_X (SCONTENT_Y+(0*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name look + group optionsGrp + type ITEM_TYPE_BIND + text "Look Down:" + cvar "+lookdown" + rect SCONTENT_X (SCONTENT_Y+(1*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name look + group optionsGrp + type ITEM_TYPE_BIND + text "Mouse Look:" + cvar "+mlook" + rect SCONTENT_X (SCONTENT_Y+(2*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name look + group optionsGrp + type ITEM_TYPE_BIND + text "Centerview:" + cvar "centerview" + rect SCONTENT_X (SCONTENT_Y+(3*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name look + group optionsGrp + type ITEM_TYPE_YESNO + text "Free Look:" + cvar "cl_freelook" + rect SCONTENT_X (SCONTENT_Y+(4*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name look + group optionsGrp + type ITEM_TYPE_SLIDER + text "Mouse Sensitivity:" + cvarfloat "sensitivity" 5 1 30 + rect SCONTENT_X (SCONTENT_Y+(5*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + } + + itemDef + { + name look + group optionsGrp + type ITEM_TYPE_YESNO + text "Invert Mouse:" + cvar "ui_mousePitch" + rect SCONTENT_X (SCONTENT_Y+(6*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + uiScript update ui_mousePitch + } + } + + itemDef + { + name look + group optionsGrp + type ITEM_TYPE_YESNO + text "Smooth Mouse:" + cvar "m_filter" + rect SCONTENT_X (SCONTENT_Y+(7*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name look + group optionsGrp + type ITEM_TYPE_YESNO + text "Auto Wallwalk Pitching:" + cvar "cg_wwFollow" + rect SCONTENT_X (SCONTENT_Y+(8*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + +//////// MOVE + + itemDef + { + name controls + text "Move" + group optionsGrp + style WINDOW_STYLE_EMPTY + rect 0 ((2*BORDER)+TOPBUTT_H+(1*SIDEBUTT_H)) SIDEBUTT_W SIDEBUTT_H + type ITEM_TYPE_BUTTON + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + hide optionsGrp; + show controls; + show move + } + } + + itemDef + { + name move + group optionsGrp + type ITEM_TYPE_YESNO + text "Sprint Toggles:" + cvar "cg_sprintToggle" + rect SCONTENT_X (SCONTENT_Y+(0*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name move + group optionsGrp + type ITEM_TYPE_YESNO + text "Wallwalk Control Toggles:" + cvar "cg_wwToggle" + rect SCONTENT_X (SCONTENT_Y+(1*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name move + group optionsGrp + type ITEM_TYPE_MULTI + text "Wallwalking Speed:" + cvar "cg_wwSmoothTime" + cvarFloatList { "Medium" 300 "Fast" 150 "Instant" 0 "Slow" 600 } + rect SCONTENT_X (SCONTENT_Y+(2*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name move + group optionsGrp + type ITEM_TYPE_BIND + text "Run / Walk:" + cvar "+speed" + rect SCONTENT_X (SCONTENT_Y+(3*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name move + group optionsGrp + type ITEM_TYPE_BIND + text "Dodge:" + cvar "+button6" + rect SCONTENT_X (SCONTENT_Y+(4*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name move + group optionsGrp + type ITEM_TYPE_BIND + text "Sprint:" + cvar "+button8" + rect SCONTENT_X (SCONTENT_Y+(5*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name move + group optionsGrp + type ITEM_TYPE_BIND + text "Forward:" + cvar "+forward" + rect SCONTENT_X (SCONTENT_Y+(6*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name move + group optionsGrp + type ITEM_TYPE_BIND + text "Backpedal:" + cvar "+back" + rect SCONTENT_X (SCONTENT_Y+(7*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name move + group optionsGrp + type ITEM_TYPE_BIND + text "Move Left:" + cvar "+moveleft" + rect SCONTENT_X (SCONTENT_Y+(8*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name move + group optionsGrp + type ITEM_TYPE_BIND + text "Move Right:" + cvar "+moveright" + rect SCONTENT_X (SCONTENT_Y+(9*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name move + group optionsGrp + type ITEM_TYPE_BIND + text "Jump:" + cvar "+moveup" + rect SCONTENT_X (SCONTENT_Y+(10*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name move + group optionsGrp + type ITEM_TYPE_BIND + text "Crouch:" + cvar "+movedown" + rect SCONTENT_X (SCONTENT_Y+(11*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name move + group optionsGrp + type ITEM_TYPE_BIND + text "Turn Left:" + cvar "+left" + rect SCONTENT_X (SCONTENT_Y+(12*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name move + group optionsGrp + type ITEM_TYPE_BIND + text "Turn Right:" + cvar "+right" + rect SCONTENT_X (SCONTENT_Y+(13*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name move + group optionsGrp + type ITEM_TYPE_BIND + text "Strafe:" + cvar "+strafe" + rect SCONTENT_X (SCONTENT_Y+(14*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + + +//////// UPGRADES + + itemDef + { + name controls + text "Upgrades" + group optionsGrp + style WINDOW_STYLE_EMPTY + rect 0 ((2*BORDER)+TOPBUTT_H+(2*SIDEBUTT_H)) SIDEBUTT_W SIDEBUTT_H + type ITEM_TYPE_BUTTON + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + hide optionsGrp; + show controls; + show upgrades + } + } + + itemDef + { + name upgrades + group optionsGrp + type ITEM_TYPE_BIND + text "Primary Attack:" + cvar "+attack" + rect SCONTENT_X (SCONTENT_Y+(0*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name upgrades + group optionsGrp + type ITEM_TYPE_BIND + text "Secondary Attack:" + cvar "+button5" + rect SCONTENT_X (SCONTENT_Y+(1*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name upgrades + group optionsGrp + type ITEM_TYPE_BIND + text "Previous Upgrade:" + cvar "weapprev" + rect SCONTENT_X (SCONTENT_Y+(2*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name upgrades + group optionsGrp + type ITEM_TYPE_BIND + text "Next Upgrade:" + cvar "weapnext" + rect SCONTENT_X (SCONTENT_Y+(3*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name upgrades + group optionsGrp + type ITEM_TYPE_BIND + text "Activate Upgrade:" + cvar "+button2" + rect SCONTENT_X (SCONTENT_Y+(4*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name upgrades + group optionsGrp + type ITEM_TYPE_BIND + text "Reload:" + cvar "reload" + rect SCONTENT_X (SCONTENT_Y+(5*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name upgrades + group optionsGrp + type ITEM_TYPE_BIND + text "Buy Ammo:" + cvar "buy ammo" + rect SCONTENT_X (SCONTENT_Y+(6*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name upgrades + group optionsGrp + type ITEM_TYPE_BIND + text "Use Medkit:" + cvar "itemact medkit" + rect SCONTENT_X (SCONTENT_Y+(7*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + +//////// MISC + + itemDef + { + name controls + text "Misc" + group optionsGrp + style WINDOW_STYLE_EMPTY + rect 0 ((2*BORDER)+TOPBUTT_H+(3*SIDEBUTT_H)) SIDEBUTT_W SIDEBUTT_H + type ITEM_TYPE_BUTTON + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + hide optionsGrp; + show controls; + show misc + } + } + + itemDef + { + name misc + group optionsGrp + type ITEM_TYPE_BIND + text "Show Scores:" + cvar "+scores" + rect SCONTENT_X (SCONTENT_Y+(0*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name misc + group optionsGrp + type ITEM_TYPE_BIND + text "Scroll Scores Up:" + cvar "scoresUp" + rect SCONTENT_X (SCONTENT_Y+(1*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name misc + group optionsGrp + type ITEM_TYPE_BIND + text "Scroll Scores Down:" + cvar "scoresDown" + rect SCONTENT_X (SCONTENT_Y+(2*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name misc + group optionsGrp + type ITEM_TYPE_BIND + text "Use Structure/Evolve:" + cvar "+button7" + rect SCONTENT_X (SCONTENT_Y+(3*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name misc + group optionsGrp + type ITEM_TYPE_BIND + text "Deconstruct Structure:" + cvar "deconstruct" + rect SCONTENT_X (SCONTENT_Y+(4*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name misc + group optionsGrp + type ITEM_TYPE_BIND + text "Gesture:" + cvar "+button3" + rect SCONTENT_X (SCONTENT_Y+(5*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name misc + group optionsGrp + type ITEM_TYPE_BIND + text "Chat:" + cvar "messagemode" + rect SCONTENT_X (SCONTENT_Y+(6*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name misc + group optionsGrp + type ITEM_TYPE_BIND + text "Team Chat:" + cvar "messagemode2" + rect SCONTENT_X (SCONTENT_Y+(7*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name misc + group optionsGrp + type ITEM_TYPE_BIND + text "Vote Yes:" + cvar "vote yes" + rect SCONTENT_X (SCONTENT_Y+(8*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name misc + group optionsGrp + type ITEM_TYPE_BIND + text "Vote No:" + cvar "vote no" + rect SCONTENT_X (SCONTENT_Y+(9*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name misc + group optionsGrp + type ITEM_TYPE_BIND + text "Team Vote Yes:" + cvar "teamvote yes" + rect SCONTENT_X (SCONTENT_Y+(10*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name misc + group optionsGrp + type ITEM_TYPE_BIND + text "Team Vote No:" + cvar "teamvote no" + rect SCONTENT_X (SCONTENT_Y+(11*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name misc + group optionsGrp + type ITEM_TYPE_BIND + text "Screenshot:" + cvar "screenshotJPEG" + rect SCONTENT_X (SCONTENT_Y+(12*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } +//////// SYSTEM + + //System menu + itemDef + { + name system + text "GFX Hardware" + group optionsGrp + style WINDOW_STYLE_EMPTY + rect 0 ((2*BORDER)+TOPBUTT_H+(0*SIDEBUTT_H)) SIDEBUTT_W SIDEBUTT_H + type ITEM_TYPE_BUTTON + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + hide optionsGrp; + show system; + show ghardware + } + } + +//////// GFX HARDWARE + + itemDef + { + name ghardware + group optionsGrp + type ITEM_TYPE_MULTI + text "Quality:" + cvar "ui_glCustom" + cvarFloatList { "High Quality" 0 "Normal" 1 "Fast" 2 "Fastest" 3 "Custom" 4 } + rect SCONTENT_X (SCONTENT_Y+(0*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + uiScript update "ui_glCustom" + } + } + + itemDef + { + name ghardware + group optionsGrp + type ITEM_TYPE_YESNO + text "GL Extensions:" + cvar "r_allowExtensions" + rect SCONTENT_X (SCONTENT_Y+(1*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + uiScript glCuston + } + } + + itemDef + { + name ghardware + group optionsGrp + type ITEM_TYPE_TEXT + text "Video Mode:" + rect SCONTENT_X (SCONTENT_Y+(2*ELEM_H)) (SCONTENT_W/2) ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + } + + itemDef + { + name ghardware + group optionsGrp + rect (SCONTENT_X+(SCONTENT_W/2)+RESCOMBO_OFF) (SCONTENT_Y+(2*ELEM_H)) ((SCONTENT_W/2)-(2*RESCOMBO_OFF)) ELEM_H + type ITEM_TYPE_COMBOBOX + style WINDOW_STYLE_FILLED + elementwidth ((SCONTENT_W/2)-(2*BORDER)) + elementheight ELEM_H + dropitems 5 + textscale .25 + elementtype LISTBOX_TEXT + feeder FEEDER_RESOLUTIONS + border WINDOW_BORDER_FULL + borderColor 0.5 0.5 0.5 1 + forecolor 1 1 1 1 + backcolor 0 0 0 1 + outlinecolor 0.1 0.1 0.1 0.5 + visible MENU_TRUE + doubleclick + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name ghardware + group optionsGrp + type ITEM_TYPE_MULTI + text "Color Depth:" + cvar "r_colorbits" + cvarFloatList { "Default" 0 "16 bit" 16 "32 bit" 32 } + rect SCONTENT_X (SCONTENT_Y+(3*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + uiScript glCustom; + uiScript update "r_colorbits" + } + } + + itemDef + { + name ghardware + group optionsGrp + type ITEM_TYPE_YESNO + text "Fullscreen:" + cvar "r_fullscreen" + rect SCONTENT_X (SCONTENT_Y+(4*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + uiScript glCustom + } + } + + itemDef + { + name ghardware + group optionsGrp + type ITEM_TYPE_MULTI + text "Lighting:" + cvar "r_vertexlight" + cvarFloatList { "Light Map (high)" 0 "Vertex (low)" 1 } + rect SCONTENT_X (SCONTENT_Y+(5*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + uiScript glCustom + } + } + + itemDef + { + name ghardware + group optionsGrp + type ITEM_TYPE_MULTI + text "Geometric Detail:" + cvar "r_lodbias" + cvarFloatList { "High" 0 "Medium" 1 "Low" 2 } + rect SCONTENT_X (SCONTENT_Y+(6*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + uiScript glCustom; + uiScript update "r_lodbias" + } + } + + itemDef + { + name ghardware + group optionsGrp + type ITEM_TYPE_MULTI + text "Texture Detail:" + cvar "r_picmip" + cvarFloatList { "Low" 2 "Normal" 1 "High" 0 } + rect SCONTENT_X (SCONTENT_Y+(7*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + uiScript glCustom + } + } + + itemDef + { + name ghardware + group optionsGrp + type ITEM_TYPE_MULTI + text "Texture Quality:" + cvar "r_texturebits" + cvarFloatList { "Default" 0 "16 bit" 16 "32 bit" 32 } + rect SCONTENT_X (SCONTENT_Y+(8*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name ghardware + group optionsGrp + type ITEM_TYPE_MULTI + text "Texture Filter:" + cvar "r_texturemode" + cvarStrList { "Bilinear", "GL_LINEAR_MIPMAP_NEAREST", "Trilinear", "GL_LINEAR_MIPMAP_LINEAR" } + rect SCONTENT_X (SCONTENT_Y+(9*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + uiScript glCustom + } + } + + itemDef + { + name ghardware + group optionsGrp + type ITEM_TYPE_YESNO + text "Anisotropic Filtering:" + cvar "r_ext_texture_filter_anisotropic" + rect SCONTENT_X (SCONTENT_Y+(10*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + uiScript glCustom + } + } + + itemDef + { + name ghardware + group optionsGrp + type ITEM_TYPE_YESNO + text "Compress Textures:" + cvar "r_ext_compressed_textures " + rect SCONTENT_X (SCONTENT_Y+(11*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + uiScript glCustom + } + } + + itemDef + { + name ghardware + group optionsGrp + type ITEM_TYPE_BUTTON + text "APPLY" + textscale .25 + style WINDOW_STYLE_EMPTY + rect SCONTENT_X (SCONTENT_Y+(13*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + exec "vid_restart" + } + } + +//////// GFX SOFTWARE + + itemDef + { + name system + text "GFX Software" + group optionsGrp + style WINDOW_STYLE_EMPTY + rect 0 ((2*BORDER)+TOPBUTT_H+(1*SIDEBUTT_H)) SIDEBUTT_W SIDEBUTT_H + type ITEM_TYPE_BUTTON + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + hide optionsGrp; + show system; + show gsoftware + } + } + + itemDef + { + name gsoftware + group optionsGrp + type ITEM_TYPE_SLIDER + text "Brightness:" + cvarfloat "r_gamma" 1 .5 2 + rect SCONTENT_X (SCONTENT_Y+(0*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + } + + itemDef + { + name gsoftware + group optionsGrp + type ITEM_TYPE_SLIDER + text "Screen Size:" + cvarfloat "cg_viewsize" 100 30 100 + rect SCONTENT_X (SCONTENT_Y+(1*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + } + + itemDef + { + name gsoftware + group optionsGrp + type ITEM_TYPE_YESNO + text "Marks On Walls:" + cvar "cg_marks" + rect SCONTENT_X (SCONTENT_Y+(2*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name gsoftware + group optionsGrp + type ITEM_TYPE_YESNO + text "Dynamic Lights:" + cvar "r_dynamiclight" + rect SCONTENT_X (SCONTENT_Y+(3*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name gsoftware + group optionsGrp + type ITEM_TYPE_YESNO + text "Draw Gun:" + cvar "cg_drawGun" + rect SCONTENT_X (SCONTENT_Y+(4*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name gsoftware + group optionsGrp + type ITEM_TYPE_YESNO + text "Low Quality Sky:" + cvar "r_fastsky" + rect SCONTENT_X (SCONTENT_Y+(5*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name gsoftware + group optionsGrp + type ITEM_TYPE_YESNO + text "Sync Every Frame:" + cvar "r_finish" + rect SCONTENT_X (SCONTENT_Y+(6*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name gsoftware + group optionsGrp + type ITEM_TYPE_YESNO + text "In Game Videos:" + cvar "r_inGameVideo" + rect SCONTENT_X (SCONTENT_Y+(7*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name gsoftware + group optionsGrp + type ITEM_TYPE_YESNO + text "Depth Sort Particles:" + cvar "cg_depthSortParticles" + rect SCONTENT_X (SCONTENT_Y+(8*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name gsoftware + group optionsGrp + type ITEM_TYPE_MULTI + text "Particle Physics:" + cvar "cg_bounceParticles" + cvarFloatList { "Low Quality" 0 "High Quality" 1 } + rect SCONTENT_X (SCONTENT_Y+(9*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name gsoftware + group optionsGrp + type ITEM_TYPE_MULTI + text "Light Flares:" + cvar "cg_lightFlare" + cvarFloatList { "Off" 0 "No Fade" 1 "Timed Fade" 2 "Real Fade" 3 } + rect SCONTENT_X (SCONTENT_Y+(10*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + } + } + +//////// GL INFO + + itemDef + { + name system + text "OpenGL Info" + group optionsGrp + style WINDOW_STYLE_EMPTY + rect 0 ((2*BORDER)+TOPBUTT_H+(2*SIDEBUTT_H)) SIDEBUTT_W SIDEBUTT_H + type ITEM_TYPE_BUTTON + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + hide optionsGrp; + show system; + show glinfo + } + } + + itemDef + { + name glinfo + group optionsGrp + rect SCONTENT_X SCONTENT_Y SCONTENT_W (H-(SCONTENT_Y+BORDER)) + ownerdraw UI_GLINFO + textscale .25 + textalign ALIGN_LEFT + textvalign VALIGN_TOP + textalignx 4 + textaligny 4 + forecolor 1 1 1 1 + visible MENU_FALSE + decoration + } + +//////// NET & SOUND + + itemDef + { + name system + text "Net & Sound" + group optionsGrp + style WINDOW_STYLE_EMPTY + rect 0 ((2*BORDER)+TOPBUTT_H+(3*SIDEBUTT_H)) SIDEBUTT_W SIDEBUTT_H + type ITEM_TYPE_BUTTON + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + hide optionsGrp; + show system; + show netsound + } + } + + itemDef + { + name netsound + group optionsGrp + style WINDOW_STYLE_FILLED + type ITEM_TYPE_TEXT + text "Sound" + rect SCONTENT_X (SCONTENT_Y+(0*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + decoration + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name netsound + group optionsGrp + type ITEM_TYPE_SLIDER + text "Effects Volume:" + cvarfloat "s_volume" 0.7 0 1 + rect SCONTENT_X (SCONTENT_Y+(1*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + } + + itemDef + { + name netsound + group optionsGrp + type ITEM_TYPE_SLIDER + text "Music Volume:" + cvarfloat "s_musicvolume" 0.25 0 1 + rect SCONTENT_X (SCONTENT_Y+(2*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + } + + itemDef + { + name netsound + group optionsGrp + type ITEM_TYPE_YESNO + text "OpenAL:" + cvar "s_useOpenAL" + rect SCONTENT_X (SCONTENT_Y+(3*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name netsound + group optionsGrp + type ITEM_TYPE_MULTI + text "Sound Quality:" + cvar "s_khz" + cvarFloatList { "44 khz (very high)" 44 "22 khz (high)" 22 "11 khz (low)" 11 } + rect SCONTENT_X (SCONTENT_Y+(4*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name netsound + group optionsGrp + type ITEM_TYPE_YESNO + text "Doppler Sound:" + cvar "s_doppler" + rect SCONTENT_X (SCONTENT_Y+(5*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name netsound + group optionsGrp + style WINDOW_STYLE_FILLED + type ITEM_TYPE_TEXT + text "Network" + rect SCONTENT_X (SCONTENT_Y+(7*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + decoration + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name netsound + group optionsGrp + type ITEM_TYPE_MULTI + text "Net Data Rate:" + cvar "rate" + cvarFloatList { "<=28.8k" 2500 "33.6k" 3000 "56k" 4000 "ISDN" 5000 "LAN/CABLE/xDSl" 25000 } + rect SCONTENT_X (SCONTENT_Y+(8*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name netsound + group optionsGrp + type ITEM_TYPE_BUTTON + text "APPLY" + textscale .25 + style WINDOW_STYLE_EMPTY + rect SCONTENT_X (SCONTENT_Y+(10*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + exec "snd_restart" + } + } + } +} diff --git a/assets/ui/joinserver.menu b/assets/ui/joinserver.menu new file mode 100755 index 0000000..45113f6 --- /dev/null +++ b/assets/ui/joinserver.menu @@ -0,0 +1,769 @@ +#include "ui/menudef.h" + +{ + + \\ Server Join \\ + +#define W 640 +#define H 480 +#define BORDER 10 + +#define PREVIEW_W 112 +#define PREVIEW_H 84 +#define TOP_W (W-((2*BORDER)+PREVIEW_W)) +#define TOP_H PREVIEW_H +#define TOP_X BORDER +#define TOP_Y BORDER +#define TOPBUTT_W (TOP_W/3) +#define TOPBUTT_H (TOP_H/2) +#define TOP_TOFF_X 20 +#define TOP_TOFF_Y 0 + +#define BCJ_W (W-(2*BORDER)) +#define BCJ_H 50 +#define BCJ_X BORDER +#define BCJ_Y (H-(BCJ_H+BORDER)) +#define ARROW_W 50 +#define ARROW_H BCJ_H + +#define BOT_W (W-(2*BORDER)) +#define BOT_H 45 +#define BOT_X BORDER +#define BOT_Y (BCJ_Y-BOT_H) +#define BOTBUTT_W (BOT_W/5) +#define BOTBUTT_H BOT_H + +#define SERVER_C 0.45 +#define GAME_C 0.15 +#define MAP_C 0.2 +#define PLAYERS_C 0.1 +#define PING_C 0.1 +#define LIST_W (W-(2*BORDER)) +#define LIST_H (H-((3*BORDER)+TOP_H+BOT_H+BCJ_H)) +#define LIST_X BORDER +#define LIST_Y ((2*BORDER)+TOP_H) +#define LIST_TOFF 5 +#define HEADFOOT_H 25 + + menuDef + { + name "joinserver" + visible MENU_FALSE + fullscreen MENU_TRUE + rect 0 0 W H + focusColor 1 .75 0 1 + outOfBoundsClick + style WINDOW_STYLE_EMPTY + aspectBias ASPECT_NONE + onOpen + { + uiScript InitServerList 3; + hide accept_alt; + show accept; + hide back_alt; + show back; + uiScript UpdateFilter + } + + onEsc { uiScript closeJoin } + + itemDef + { + name background + rect 0 0 W H + style WINDOW_STYLE_FILLED + backcolor 0 0 0 1 + visible MENU_TRUE + decoration + } + + + // VIEW OPTIONS // + + itemDef + { + name gametypefield + text "Source:" + style WINDOW_STYLE_EMPTY + ownerdraw UI_NETSOURCE + rect TOP_X TOP_Y TOPBUTT_W TOPBUTT_H + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + textalignx TOP_TOFF_X + textaligny TOP_TOFF_Y + textscale .4 + forecolor 1 1 1 1 + backcolor .5 .5 .5 .5 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav" + } + } + + // BUTTONS // + + itemDef + { + name refreshSource + text "Get New List" + type ITEM_TYPE_BUTTON + textscale .4 + style WINDOW_STYLE_EMPTY + rect (TOP_X+TOPBUTT_W) TOP_Y TOPBUTT_W TOPBUTT_H + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + textalignx TOP_TOFF_X + textaligny TOP_TOFF_Y + backcolor .5 .5 .5 .5 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + uiScript RefreshServers + } + } + + itemDef + { + name refreshFilter + text "Refresh List" + textscale .4 + style WINDOW_STYLE_EMPTY + type ITEM_TYPE_BUTTON + rect (TOP_X+(2*TOPBUTT_W)) TOP_Y TOPBUTT_W TOPBUTT_H + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + textalignx TOP_TOFF_X + textaligny TOP_TOFF_Y + backcolor .5 .5 .5 .5 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + uiScript RefreshFilter + } + } + + itemDef + { + name viewEmpty + style WINDOW_STYLE_EMPTY + type ITEM_TYPE_YESNO + text "View Empty:" + cvar "ui_browserShowEmpty" + textscale .4 + rect TOP_X (TOP_Y+TOPBUTT_H) TOPBUTT_W TOPBUTT_H + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + textalignx TOP_TOFF_X + textaligny TOP_TOFF_Y + forecolor 1 1 1 1 + backcolor .5 .5 .5 .5 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + uiScript RefreshFilter + } + } + + itemDef + { + name viewFull + style WINDOW_STYLE_EMPTY + type ITEM_TYPE_YESNO + text "View Full:" + cvar "ui_browserShowFull" + textscale .4 + rect (TOP_X+TOPBUTT_W) (TOP_Y+TOPBUTT_H) TOPBUTT_W TOPBUTT_H + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + textalignx TOP_TOFF_X + textaligny TOP_TOFF_Y + forecolor 1 1 1 1 + backcolor .5 .5 .5 .5 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + uiScript RefreshFilter + } + } + + // LEGEND // + + itemDef + { + name legend + type ITEM_TYPE_TEXT + text "[official] = Official Server\n[featured] = Featured Server" + style WINDOW_STYLE_EMPTY + textstyle ITEM_TEXTSTYLE_NORMAL + textscale .25 + wrapped + rect (TOP_X+(2*TOPBUTT_W)) (TOP_Y+TOPBUTT_H) (TOPBUTT_W) (TOPBUTT_H) + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + textalignx TOP_TOFF_X + forecolor 1 1 1 1 + visible MENU_TRUE + decoration + } + + // MAP PREVIEW // + + itemDef + { + name mappreview + style WINDOW_STYLE_EMPTY + ownerdraw UI_NETMAPPREVIEW + rect (W-(PREVIEW_W+BORDER)) BORDER PREVIEW_W PREVIEW_H + border WINDOW_BORDER_FULL + bordercolor .5 .5 .5 1 + visible MENU_TRUE + } + + + // COLUMNS // + + itemDef + { + name server + group grpTabs + text "Server Name" + type ITEM_TYPE_BUTTON + textscale .33 + style WINDOW_STYLE_FILLED + rect LIST_X LIST_Y (SERVER_C*LIST_W) HEADFOOT_H + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + textalignx LIST_TOFF + border WINDOW_BORDER_FULL + bordercolor 0.5 0.5 0.5 1 + forecolor 1 1 1 1 + backcolor 0 0 0 0 + outlinecolor 0.1 0.1 0.1 0.5 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + uiScript ServerSort 0; + + setitemcolor grpColumn backcolor 0 0 0 0; + setitemcolor grpTabs backcolor 0 0 0 0; + setitemcolor server backcolor 0.3 1 1 0.3; + setitemcolor serverColumn backcolor 0.2 0.6 0.6 0.1; + } + } + + itemDef + { + name serverColumn + group grpColumn + rect LIST_X (LIST_Y+HEADFOOT_H) (SERVER_C*LIST_W) (LIST_H-(2*HEADFOOT_H)) + style WINDOW_STYLE_FILLED + border WINDOW_BORDER_FULL + backcolor 0 0 0 0 + bordersize 1 + bordercolor .5 .5 .5 1 + visible MENU_TRUE + decoration + } + + itemDef + { + name game + group grpTabs + type ITEM_TYPE_BUTTON + text "Game Type" + textscale .33 + style WINDOW_STYLE_FILLED + rect (LIST_X+(SERVER_C*LIST_W)) LIST_Y (GAME_C*LIST_W) HEADFOOT_H + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + textalignx LIST_TOFF + border WINDOW_BORDER_FULL + bordercolor 0.5 0.5 0.5 1 + forecolor 1 1 1 1 + backcolor 0 0 0 0 + outlinecolor 0.1 0.1 0.1 0.5 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + uiScript ServerSort 4; + + setitemcolor grpColumn backcolor 0 0 0 0; + setitemcolor grpTabs backcolor 0 0 0 0; + setitemcolor game backcolor 0.3 1 1 0.3; + setitemcolor gameColumn backcolor 0.2 0.6 0.6 0.1; + } + } + + itemDef + { + name gameColumn + group grpColumn + rect (LIST_X+(SERVER_C*LIST_W)) (LIST_Y+HEADFOOT_H) (GAME_C*LIST_W) (LIST_H-(2*HEADFOOT_H)) + style WINDOW_STYLE_FILLED + border WINDOW_BORDER_FULL + backcolor 0 0 0 0 + bordersize 1 + bordercolor .5 .5 .5 1 + visible MENU_TRUE + decoration + } + + itemDef + { + name map + group grpTabs + type ITEM_TYPE_BUTTON + text "Map Name" + textscale .33 + style WINDOW_STYLE_FILLED + rect (LIST_X+((SERVER_C+GAME_C)*LIST_W)) LIST_Y (MAP_C*LIST_W) HEADFOOT_H + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + textalignx LIST_TOFF + border WINDOW_BORDER_FULL + bordercolor 0.5 0.5 0.5 1 + forecolor 1 1 1 1 + backcolor 0 0 0 0 + outlinecolor 0.1 0.1 0.1 0.5 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + uiScript ServerSort 1; + + setitemcolor grpColumn backcolor 0 0 0 0; + setitemcolor grpTabs backcolor 0 0 0 0; + setitemcolor map backcolor 0.3 1 1 0.3; + setitemcolor mapColumn backcolor 0.2 0.6 0.6 0.1; + } + } + + itemDef + { + name mapColumn + group grpColumn + rect (LIST_X+((SERVER_C+GAME_C)*LIST_W)) (LIST_Y+HEADFOOT_H) (MAP_C*LIST_W) (LIST_H-(2*HEADFOOT_H)) + style WINDOW_STYLE_FILLED + border WINDOW_BORDER_FULL + backcolor 0 0 0 0 + bordersize 1 + bordercolor .5 .5 .5 1 + visible MENU_TRUE + decoration + } + + itemDef + { + name players + group grpTabs + text "Players" + type ITEM_TYPE_BUTTON + textscale .33 + style WINDOW_STYLE_FILLED + rect (LIST_X+((SERVER_C+GAME_C+MAP_C)*LIST_W)) LIST_Y (PLAYERS_C*LIST_W) HEADFOOT_H + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + textalignx LIST_TOFF + border WINDOW_BORDER_FULL + bordercolor 0.5 0.5 0.5 1 + forecolor 1 1 1 1 + backcolor 0 0 0 0 + outlinecolor 0.1 0.1 0.1 0.5 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + uiScript ServerSort 2; + + setitemcolor grpColumn backcolor 0 0 0 0; + setitemcolor grpTabs backcolor 0 0 0 0; + setitemcolor players backcolor 0.3 1 1 0.3; + setitemcolor playerColumn backcolor 0.2 0.6 0.6 0.1; + } + } + + itemDef + { + name playerColumn + group grpColumn + rect (LIST_X+((SERVER_C+GAME_C+MAP_C)*LIST_W)) (LIST_Y+HEADFOOT_H) (PLAYERS_C*LIST_W) (LIST_H-(2*HEADFOOT_H)) + style WINDOW_STYLE_FILLED + border WINDOW_BORDER_FULL + backcolor 0 0 0 0 + bordersize 1 + bordercolor .5 .5 .5 1 + visible MENU_TRUE + decoration + } + + itemDef + { + name Ping + group grpTabs + text "Ping" + type ITEM_TYPE_BUTTON + textscale .33 + style WINDOW_STYLE_FILLED + rect (LIST_X+((SERVER_C+GAME_C+MAP_C+PLAYERS_C)*LIST_W)) LIST_Y (PING_C*LIST_W) HEADFOOT_H + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + textalignx LIST_TOFF + border WINDOW_BORDER_FULL + bordercolor 0.5 0.5 0.5 1 + forecolor 1 1 1 1 + backcolor 0.3 1 1 0.3 + outlinecolor 0.1 0.1 0.1 0.5 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + uiScript ServerSort 3; + + setitemcolor grpColumn backcolor 0 0 0 0; + setitemcolor grpTabs backcolor 0 0 0 0; + setitemcolor ping backcolor 0.3 1 1 0.3; + setitemcolor pingColumn backcolor 0.2 0.6 0.6 0.1; + } + } + + itemDef + { + name pingColumn + group grpColumn + rect (LIST_X+((SERVER_C+GAME_C+MAP_C+PLAYERS_C)*LIST_W)) (LIST_Y+HEADFOOT_H) (PING_C*LIST_W) (LIST_H-(2*HEADFOOT_H)) + style WINDOW_STYLE_FILLED + border WINDOW_BORDER_FULL + backcolor 0.2 0.6 0.6 0.1 + bordersize 1 + bordercolor .5 .5 .5 1 + visible MENU_TRUE + decoration + } + + // SERVER LIST // + + itemDef + { + name serverlist + rect LIST_X (LIST_Y+HEADFOOT_H) LIST_W (LIST_H-(2*HEADFOOT_H)) + type ITEM_TYPE_LISTBOX + style WINDOW_STYLE_EMPTY + elementwidth 120 + elementheight 20 + textscale .33 + elementtype LISTBOX_TEXT + feeder FEEDER_SERVERS + border WINDOW_BORDER_FULL + bordercolor 0.5 0.5 0.5 1 + forecolor 1 1 1 1 + backcolor 0.2 0.2 0.2 1 + outlinecolor 0.1 0.3 0.3 0.4 + visible MENU_TRUE + columns 5 + LIST_TOFF ((SERVER_C*LIST_W)-(3*LIST_TOFF)) ALIGN_LEFT + (LIST_TOFF+((SERVER_C+GAME_C)*LIST_W)) ((MAP_C*LIST_W)-(3*LIST_TOFF)) ALIGN_LEFT + (LIST_TOFF+((SERVER_C+GAME_C+MAP_C)*LIST_W)) ((PLAYERS_C*LIST_W)-(3*LIST_TOFF)) ALIGN_LEFT + (LIST_TOFF+((SERVER_C+GAME_C+MAP_C+PLAYERS_C)*LIST_W)) ((PING_C*LIST_W)-(3*LIST_TOFF)) ALIGN_LEFT + (LIST_TOFF+((SERVER_C)*LIST_W)) ((GAME_C*LIST_W)-(3*LIST_TOFF)) ALIGN_LEFT + + doubleClick { uiScript JoinServer } + } + + + // DATE AND MESSAGE OF THE DAY // + + itemDef + { + name refreshdate + ownerdraw UI_SERVERREFRESHDATE + textscale .33 + rect LIST_X (LIST_Y+(LIST_H-HEADFOOT_H)) (LIST_W/2) HEADFOOT_H + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + textalignx LIST_TOFF + forecolor 1 1 1 1 + border WINDOW_BORDER_FULL + bordercolor .5 .5 .5 1 + visible MENU_TRUE + decoration + } + + itemDef + { + name messageoftheday + ownerdraw UI_SERVERMOTD + textscale .33 + rect (LIST_X+(LIST_W/2)) (LIST_Y+(LIST_H-HEADFOOT_H)) (LIST_W/2) HEADFOOT_H + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + textalignx LIST_TOFF + forecolor 1 1 1 1 + border WINDOW_BORDER_FULL + bordercolor .5 .5 .5 1 + visible MENU_TRUE + decoration + } + + + // BOTTOM BUTTONS // + + itemDef + { + name password + text "Set Password" + type ITEM_TYPE_BUTTON + textscale .4 + style WINDOW_STYLE_EMPTY + rect BOT_X BOT_Y BOTBUTT_W BOTBUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + open password_popmenu + } + } + + itemDef + { + name createFavorite + text "Create Favorite" + type ITEM_TYPE_BUTTON + textscale .4 + style WINDOW_STYLE_EMPTY + rect (BOT_X+BOTBUTT_W) BOT_Y BOTBUTT_W BOTBUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + open createfavorite_popmenu + } + } + + itemDef + { + name addFavorite + text "Add Favorite" + type ITEM_TYPE_BUTTON + textscale .4 + style WINDOW_STYLE_EMPTY + ownerdrawFlag UI_SHOW_NOTFAVORITESERVERS + rect (BOT_X+(2*BOTBUTT_W)) BOT_Y BOTBUTT_W BOTBUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + uiScript addFavorite + } + } + + itemDef + { + name delfavorite + text "Delete Favorite" + type ITEM_TYPE_BUTTON + textscale .4 + style WINDOW_STYLE_EMPTY + ownerdrawFlag UI_SHOW_FAVORITESERVERS + rect (BOT_X+(2*BOTBUTT_W)) BOT_Y BOTBUTT_W BOTBUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + uiScript DeleteFavorite; + uiScript UpdateFilter + } + } + + itemDef + { + name serverinfo + text "Server Info" + type ITEM_TYPE_BUTTON + textscale .4 + style WINDOW_STYLE_EMPTY + rect (BOT_X+(3*BOTBUTT_W)) BOT_Y BOTBUTT_W BOTBUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + open serverinfo_popmenu + } + } + + itemDef + { + name findplayer + text "Find a Friend" + type ITEM_TYPE_BUTTON + textscale .4 + style WINDOW_STYLE_EMPTY + rect (BOT_X+(4*BOTBUTT_W)) BOT_Y BOTBUTT_W BOTBUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + open findplayer_popmenu + } + } + + + + // BACK CREATE JOIN // + + itemDef + { + name createServer + text "Create Server" + textscale .5 + style WINDOW_STYLE_EMPTY + type ITEM_TYPE_BUTTON + rect (BCJ_X+ARROW_W) BCJ_Y (BCJ_W-(2*ARROW_W)) BCJ_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + open createserver + } + } + + + itemDef + { + name back + style WINDOW_STYLE_SHADER + background "ui/assets/backarrow.tga" + rect BCJ_X BCJ_Y ARROW_H ARROW_W + aspectBias ALIGN_LEFT + visible MENU_TRUE + action + { + play "sound/misc/menu4.wav"; + close joinserver + } + + mouseEnter + { + hide back; + show back_alt + } + } + + itemDef + { + name back_alt + style WINDOW_STYLE_SHADER + background "ui/assets/backarrow_alt.tga" + rect BCJ_X BCJ_Y ARROW_H ARROW_W + aspectBias ALIGN_LEFT + backcolor 0 0 0 0 + forecolor 1 1 1 1 + visible MENU_FALSE + type ITEM_TYPE_BUTTON + + text "Back" + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + textalignx ARROW_W + textscale .6 + + mouseExit + { + hide back_alt; + show back + } + + action + { + play "sound/misc/menu4.wav"; + close joinserver + } + } + + + + + itemDef + { + name accept + style WINDOW_STYLE_SHADER + rect ((BCJ_X+BCJ_W)-ARROW_W) BCJ_Y ARROW_H ARROW_W + aspectBias ALIGN_RIGHT + background "ui/assets/forwardarrow.tga" + backcolor 0 0 0 0 + forecolor 1 1 1 1 + visible MENU_TRUE + mouseEnter + { + hide accept; + show accept_alt + } + + action + { + play "sound/misc/menu1.wav"; + uiScript JoinServer + } + } + + itemDef + { + name accept_alt + style WINDOW_STYLE_SHADER + rect ((BCJ_X+BCJ_W)-ARROW_W) BCJ_Y ARROW_H ARROW_W + aspectBias ALIGN_RIGHT + background "ui/assets/forwardarrow_alt.tga" + backcolor 0 0 0 0 + type ITEM_TYPE_BUTTON + forecolor 1 1 1 1 + visible MENU_FALSE + + text "Join" + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx -ARROW_W + textscale .6 + + mouseExit + { + hide accept_alt; + show accept + } + + action + { + play "sound/misc/menu1.wav"; + uiScript JoinServer + } + } + } +} diff --git a/assets/ui/loading.menu b/assets/ui/loading.menu new file mode 100755 index 0000000..b877ce9 --- /dev/null +++ b/assets/ui/loading.menu @@ -0,0 +1,223 @@ +#include "ui/menudef.h" + +{ + +#define W 640 +#define H 480 +#define BORDER 10 + +#define SHOT_W 320 +#define SHOT_H 240 +#define SHOT_X (W-(BORDER+SHOT_W)) +#define SHOT_Y BORDER + +#define INFO_X BORDER +#define INFO_W (W-((3*BORDER)+SHOT_W)) +#define LEVEL_Y BORDER +#define LEVEL_H 30 +#define HOST_Y (LEVEL_H+(2*BORDER)) +#define HOST_H 30 +#define MOTD_Y (LEVEL_H+HOST_H+(3*BORDER)) +#define MOTD_H ((BORDER+SHOT_H)-MOTD_Y) + +#define MAIN_W (W-(2*BORDER)) +#define LABEL_W 180 +#define LABEL_X (W-(LABEL_W+BORDER)) +#define BAR_H ((H-((6*BORDER)+SHOT_H))/4) +#define BAR_W (MAIN_W-(LABEL_W+BORDER)) +#define BAR_X BORDER +#define MEDIA_Y (H-((4*BORDER)+(4*BAR_H))) +#define BUILD_Y (H-((3*BORDER)+(3*BAR_H))) +#define CHAR_Y (H-((2*BORDER)+(2*BAR_H))) +#define OVER_Y (H-(BORDER+BAR_H)) + + assetGlobalDef + { + cursor "ui/assets/3_cursor3" // cursor + gradientBar "ui/assets/gradientbar2.tga" // gradient bar + fadeClamp 1.0 // sets the fadeup alpha + fadeCycle 1 // how often fade happens in milliseconds + fadeAmount 0.1 // amount to adjust alpha per cycle + + shadowX 5 // x amount for shadow offset + shadowY 5 // y amount for shadow offset + shadowColor 0.1 0.1 0.1 0.25 // shadow color + + font "fonts/font" 26 // font + smallFont "fonts/smallfont" 20 // font + bigFont "fonts/bigfont" 34 // font + } + + menuDef + { + name "Loading" + rect 0 0 W H + fullScreen MENU_TRUE + aspectBias ASPECT_NONE + + itemDef + { + name background + rect 0 0 W H + style WINDOW_STYLE_FILLED + backcolor 0 0 0 1 + visible MENU_TRUE + decoration + } + + itemDef + { + name "levelname" + rect INFO_X LEVEL_Y INFO_W LEVEL_H + visible MENU_TRUE + decoration + forecolor 1 1 1 1 + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + textstyle ITEM_TEXTSTYLE_NORMAL + textscale 0.4 + ownerdraw CG_LOAD_LEVELNAME + } + + itemDef + { + name "hostname" + rect INFO_X HOST_Y INFO_W HOST_H + visible MENU_TRUE + decoration + forecolor 1 1 1 1 + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + textstyle ITEM_TEXTSTYLE_NORMAL + textscale 0.4 + ownerdraw CG_LOAD_HOSTNAME + } + + itemDef + { + name "motd" + rect INFO_X MOTD_Y INFO_W MOTD_H + visible MENU_TRUE + decoration + forecolor 1 1 1 1 + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + textstyle ITEM_TEXTSTYLE_NORMAL + textscale 0.4 + ownerdraw CG_LOAD_MOTD + } + + itemDef + { + name "levelshot" + rect SHOT_X SHOT_Y SHOT_W SHOT_H + visible MENU_TRUE + decoration + forecolor 1 1 1 1 + ownerdraw CG_LOAD_LEVELSHOT + + border WINDOW_BORDER_FULL + borderSize 1.0 + borderColor 0.5 0.5 0.5 1 + } + + itemDef + { + name "media" + rect BAR_X MEDIA_Y BAR_W BAR_H + visible MENU_TRUE + decoration + forecolor 0.0 0.8 1 1 + ownerdraw CG_LOAD_MEDIA + textalign ALIGN_CENTER + textstyle ITEM_TEXTSTYLE_NEON + textscale 0.5 + borderSize 1.0 + } + + itemDef + { + name "medialabel" + style WINDOW_STYLE_EMPTY + textscale 0.6 + rect LABEL_X MEDIA_Y LABEL_W BAR_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + forecolor 0.0 0.8 1 1 + visible MENU_TRUE + decoration + ownerdraw CG_LOAD_MEDIA_LABEL + } + + itemDef + { + name "buildables" + rect 20 340 380 30 + rect BAR_X BUILD_Y BAR_W BAR_H + visible MENU_TRUE + decoration + forecolor 0.0 0.8 1 1 + ownerdraw CG_LOAD_BUILDABLES + textalign ALIGN_CENTER + textstyle ITEM_TEXTSTYLE_NEON + textscale 0.5 + borderSize 1.0 + } + + itemDef + { + name "buildableslabel" + style WINDOW_STYLE_EMPTY + textscale 0.6 + rect LABEL_X BUILD_Y LABEL_W BAR_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + forecolor 0.0 0.8 1 1 + visible MENU_TRUE + decoration + ownerdraw CG_LOAD_BUILDABLES_LABEL + } + + itemDef + { + name "charmodel" + rect BAR_X CHAR_Y BAR_W BAR_H + visible MENU_TRUE + decoration + forecolor 0.0 0.8 1 1 + ownerdraw CG_LOAD_CHARMODEL + textalign ALIGN_CENTER + textstyle ITEM_TEXTSTYLE_NEON + textscale 0.5 + borderSize 1.0 + } + + itemDef + { + name "charmodellabel" + style WINDOW_STYLE_EMPTY + textscale 0.6 + rect LABEL_X CHAR_Y LABEL_W BAR_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + forecolor 0.0 0.8 1 1 + visible MENU_TRUE + decoration + ownerdraw CG_LOAD_CHARMODEL_LABEL + } + + itemDef + { + name "overall" + rect BAR_X OVER_Y MAIN_W BAR_H + visible MENU_TRUE + decoration + forecolor 0.0 0.8 1 1 + ownerdraw CG_LOAD_OVERALL + textalign ALIGN_CENTER + textstyle ITEM_TEXTSTYLE_NEON + textscale 0.5 + borderSize 1.0 + } + } +} diff --git a/assets/ui/main.menu b/assets/ui/main.menu new file mode 100755 index 0000000..daae38a --- /dev/null +++ b/assets/ui/main.menu @@ -0,0 +1,189 @@ +#include "ui/menudef.h" + +{ + assetGlobalDef + { + font "fonts/font" 26 // font + smallFont "fonts/smallfont" 20 // font + bigFont "fonts/bigfont" 34 // font + cursor "ui/assets/3_cursor3" // cursor + gradientBar "ui/assets/gradientbar2.tga" // gradient bar + itemFocusSound "sound/misc/menu2.wav" // sound for item getting focus (via keyboard or mouse ) + + fadeClamp 1.0 // sets the fadeup alpha + fadeCycle 1 // how often fade happens in milliseconds + fadeAmount 0.1 // amount to adjust alpha per cycle + + shadowColor 0.1 0.1 0.1 0.25 // shadow color + } + + + + + + menuDef + { + name main + fullScreen MENU_TRUE + rect 0 0 640 480 // Size and position of the menu + visible MENU_TRUE // Visible on open + focusColor 1 .75 0 1 // Menu focus color for text and items + background "ui/assets/mainmenu.jpg" + aspectBias ASPECT_NONE + + onOpen { uiScript stopRefresh ; playlooped "sound/ui/heartbeat.wav" } + onESC { open quit_popmenu } + + itemDef + { + name splashmodel + rect 0 0 640 480 + type ITEM_TYPE_MODEL + style WINDOW_STYLE_EMPTY + asset_model "models/splash/splash_screen.md3" + model_fovx 32.0 + model_fovy 24.0 + model_angle 180 + visible MENU_TRUE + decoration + } + +#define X 536 +#define Y 20 +#define W 64 +#define ELEM_H 20 + + itemDef + { + name mainmenu + text "Play" + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + textstyle ITEM_TEXTSTYLE_NORMAL + rect X Y W ELEM_H + textalign ALIGN_RIGHT + textscale .416 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + open joinserver + } + } + + itemDef + { + name mainmenu + text "News" + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + textstyle ITEM_TEXTSTYLE_NORMAL + textscale .416 + rect X (Y+(1*ELEM_H)) W ELEM_H + textalign ALIGN_RIGHT + backcolor 0 0 0 0 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + open news_menu + } + } + + itemDef + { + name mainmenu + text "Options" + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + textstyle ITEM_TEXTSTYLE_NORMAL + textscale .416 + rect X (Y+(2*ELEM_H)) W ELEM_H + textalign ALIGN_RIGHT + backcolor 0 0 0 0 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + open simple_options + } + } + + itemDef + { + name mainmenu + text "Demos" + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + textstyle ITEM_TEXTSTYLE_NORMAL + textscale .416 + rect X (Y+(3*ELEM_H)) W ELEM_H + textalign ALIGN_RIGHT + backcolor 0 0 0 0 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + open demo + } + } + + itemDef + { + name mainmenu + text "Mods" + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + textstyle ITEM_TEXTSTYLE_NORMAL + textscale .416 + rect X (Y+(4*ELEM_H)) W ELEM_H + textalign ALIGN_RIGHT + backcolor 0 0 0 0 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + open mod + } + } + + itemDef + { + name mainmenu + text "Quit" + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + textstyle ITEM_TEXTSTYLE_NORMAL + rect X (Y+(5*ELEM_H)) W ELEM_H + textscale .416 + textalign ALIGN_RIGHT + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + open quit_popmenu + } + } + + itemDef + { + name copyright + type ITEM_TYPE_TEXT + text "Tremulous (C) 2005-2009 darklegion development" + style WINDOW_STYLE_EMPTY + textstyle ITEM_TEXTSTYLE_NORMAL + textscale .25 + rect 0 450 640 10 + textalign ALIGN_CENTER + forecolor .75 .75 .75 .75 + visible MENU_TRUE + decoration + } + } +} diff --git a/assets/ui/menudef.h b/assets/ui/menudef.h new file mode 100755 index 0000000..cd30f77 --- /dev/null +++ b/assets/ui/menudef.h @@ -0,0 +1,223 @@ +#ifndef MENUDEF_H +#define MENUDEF_H + +enum +{ + ITEM_TYPE_ANY = -1, // invalid type + ITEM_TYPE_NONE, // no specified type + ITEM_TYPE_TEXT, // simple text + ITEM_TYPE_BUTTON, // button, basically text with a border + ITEM_TYPE_RADIOBUTTON, // toggle button, may be grouped + ITEM_TYPE_CHECKBOX, // check box + ITEM_TYPE_EDITFIELD, // editable text, associated with a cvar + ITEM_TYPE_SAYFIELD, // the chat field + ITEM_TYPE_CYCLE, // cycling list + ITEM_TYPE_LISTBOX, // scrollable list + ITEM_TYPE_COMBOBOX, // drop down scrollable list + ITEM_TYPE_MODEL, // model + ITEM_TYPE_OWNERDRAW, // owner draw, has an associated ownerdraw number + ITEM_TYPE_NUMERICFIELD, // editable text, associated with a cvar + ITEM_TYPE_SLIDER, // mouse speed, volume, etc. + ITEM_TYPE_YESNO, // boolean cvar setting + ITEM_TYPE_MULTI, // multiple list setting, enumerated + ITEM_TYPE_BIND // keyboard control configuration +}; + +// The first items in these enums are the defaults if menus do not specify +enum +{ + ALIGN_LEFT, // left alignment + ALIGN_CENTER, // center alignment + ALIGN_RIGHT, // right alignment + ASPECT_NONE, // no aspect compensation + ALIGN_NONE +}; + +enum +{ + VALIGN_BOTTOM, // bottom alignment + VALIGN_CENTER, // center alignment + VALIGN_TOP, // top alignment + VALIGN_NONE +}; + +enum +{ + ITEM_TEXTSTYLE_NORMAL, // normal text + ITEM_TEXTSTYLE_BLINK, // fast blinking + ITEM_TEXTSTYLE_PULSE, // slow pulsing + ITEM_TEXTSTYLE_SHADOWED, // drop shadow (need a color for this) + ITEM_TEXTSTYLE_OUTLINED, // apparently unimplemented + ITEM_TEXTSTYLE_OUTLINESHADOWED, // apparently unimplemented + ITEM_TEXTSTYLE_SHADOWEDMORE, // drop shadow (need a color for this) + ITEM_TEXTSTYLE_NEON // glow (need a color for this) +}; + +enum +{ + WINDOW_BORDER_NONE, // no border + WINDOW_BORDER_FULL, // full border based on border color (single pixel) + WINDOW_BORDER_HORZ, // horizontal borders only + WINDOW_BORDER_VERT, // vertical borders only + WINDOW_BORDER_KCGRADIENT // horizontal border using the gradient bars +}; + +enum +{ + WINDOW_STYLE_EMPTY, // no background + WINDOW_STYLE_FILLED, // filled with background color + WINDOW_STYLE_GRADIENT, // gradient bar based on background color + WINDOW_STYLE_SHADER, // use background shader + WINDOW_STYLE_TEAMCOLOR, // team color + WINDOW_STYLE_CINEMATIC // cinematic +}; + +#define MENU_TRUE 1 // uh.. true +#define MENU_FALSE 0 // and false + +enum +{ + HUD_VERTICAL, + HUD_HORIZONTAL +}; + +// list box element types +enum +{ + LISTBOX_TEXT, + LISTBOX_IMAGE +}; + +// list feeders +enum +{ + FEEDER_SERVERS, // servers + FEEDER_MAPS, // all maps available, in graphic format + FEEDER_ALIENTEAM_LIST, // alien team members + FEEDER_HUMANTEAM_LIST, // human team members + FEEDER_TEAM_LIST, // team members for team voting + FEEDER_PLAYER_LIST, // players + FEEDER_NEWS, // news + FEEDER_MODS, // list of available mods + FEEDER_DEMOS, // list of available demo files + FEEDER_SERVERSTATUS, // server status + FEEDER_FINDPLAYER, // find player + FEEDER_CINEMATICS, // cinematics + + FEEDER_TREMTEAMS, // teams + FEEDER_TREMALIENCLASSES, // alien classes + FEEDER_TREMHUMANITEMS, // human items + FEEDER_TREMHUMANARMOURYBUY, // human buy + FEEDER_TREMHUMANARMOURYSELL, // human sell + FEEDER_TREMALIENUPGRADE, // alien upgrade + FEEDER_TREMALIENBUILD, // alien buildables + FEEDER_TREMHUMANBUILD, // human buildables + FEEDER_IGNORE_LIST, // ignored players + FEEDER_HELP_LIST, // help topics + FEEDER_RESOLUTIONS // display resolutions +}; + +// display flags +#define UI_SHOW_FAVORITESERVERS 0x00000001 +#define UI_SHOW_NOTFAVORITESERVERS 0x00000002 + +#define UI_SHOW_VOTEACTIVE 0x00000004 +#define UI_SHOW_CANVOTE 0x00000008 +#define UI_SHOW_TEAMVOTEACTIVE 0x00000010 +#define UI_SHOW_CANTEAMVOTE 0x00000020 + +#define UI_SHOW_NOTSPECTATING 0x00000040 + +// owner draw types +enum +{ + CG_PLAYER_HEALTH, + CG_PLAYER_HEALTH_CROSS, + CG_PLAYER_AMMO_VALUE, + CG_PLAYER_CLIPS_VALUE, + CG_PLAYER_BUILD_TIMER, + CG_PLAYER_CREDITS_VALUE, + CG_PLAYER_CREDITS_VALUE_NOPAD, + CG_PLAYER_STAMINA, + CG_PLAYER_STAMINA_1, + CG_PLAYER_STAMINA_2, + CG_PLAYER_STAMINA_3, + CG_PLAYER_STAMINA_4, + CG_PLAYER_STAMINA_BOLT, + CG_PLAYER_BOOST_BOLT, + CG_PLAYER_CLIPS_RING, + CG_PLAYER_BUILD_TIMER_RING, + CG_PLAYER_SELECT, + CG_PLAYER_SELECTTEXT, + CG_PLAYER_WEAPONICON, + CG_PLAYER_WALLCLIMBING, + CG_PLAYER_BOOSTED, + CG_PLAYER_POISON_BARBS, + CG_PLAYER_ALIEN_SENSE, + CG_PLAYER_HUMAN_SCANNER, + CG_PLAYER_USABLE_BUILDABLE, + CG_PLAYER_CHARGE_BAR_BG, + CG_PLAYER_CHARGE_BAR, + CG_PLAYER_CROSSHAIR, + CG_PLAYER_LOCATION, + CG_TEAMOVERLAY, + CG_PLAYER_CREDITS_FRACTION, + + CG_KILLER, + CG_SPECTATORS, + CG_FOLLOW, + +// loading screen + CG_LOAD_LEVELSHOT, + CG_LOAD_MEDIA, + CG_LOAD_MEDIA_LABEL, + CG_LOAD_BUILDABLES, + CG_LOAD_BUILDABLES_LABEL, + CG_LOAD_CHARMODEL, + CG_LOAD_CHARMODEL_LABEL, + CG_LOAD_OVERALL, + CG_LOAD_LEVELNAME, + CG_LOAD_MOTD, + CG_LOAD_HOSTNAME, + + CG_FPS, + CG_FPS_FIXED, + CG_TIMER, + CG_TIMER_MINS, + CG_TIMER_SECS, + CG_SNAPSHOT, + CG_LAGOMETER, + CG_SPEEDOMETER, + CG_PLAYER_CROSSHAIRNAMES, + CG_STAGE_REPORT_TEXT, + CG_ALIENS_SCORE_LABEL, + CG_HUMANS_SCORE_LABEL, + CG_DEMO_PLAYBACK, + CG_DEMO_RECORDING, + + CG_CONSOLE, + CG_TUTORIAL, + CG_CLOCK, + + UI_NETSOURCE, + UI_NETMAPPREVIEW, + UI_NETMAPCINEMATIC, + UI_SERVERREFRESHDATE, + UI_SERVERMOTD, + UI_GLINFO, + UI_KEYBINDSTATUS, + UI_SELECTEDMAPPREVIEW, + UI_SELECTEDMAPNAME, + + UI_TEAMINFOPANE, + UI_ACLASSINFOPANE, + UI_AUPGRADEINFOPANE, + UI_HITEMINFOPANE, + UI_HBUYINFOPANE, + UI_HSELLINFOPANE, + UI_ABUILDINFOPANE, + UI_HBUILDINFOPANE, + UI_HELPINFOPANE +}; + +#endif diff --git a/assets/ui/menus.txt b/assets/ui/menus.txt new file mode 100755 index 0000000..d0d9537 --- /dev/null +++ b/assets/ui/menus.txt @@ -0,0 +1,21 @@ +// menu defs +// +{ + loadMenu { "ui/main.menu" } + loadMenu { "ui/news.menu" } + loadMenu { "ui/joinserver.menu" } + loadMenu { "ui/options.menu" } + loadMenu { "ui/createserver.menu" } + loadMenu { "ui/mod.menu" } + loadMenu { "ui/demo.menu" } + loadMenu { "ui/connect.menu" } + loadMenu { "ui/password.menu" } + loadMenu { "ui/quit.menu" } + loadMenu { "ui/error.menu" } + loadMenu { "ui/download.menu" } + loadMenu { "ui/drop.menu" } + loadMenu { "ui/serverinfo.menu" } + loadMenu { "ui/findplayer.menu" } + loadMenu { "ui/quitcredit.menu" } + loadMenu { "ui/createfavorite.menu" } +} diff --git a/assets/ui/mod.menu b/assets/ui/mod.menu new file mode 100755 index 0000000..38bee62 --- /dev/null +++ b/assets/ui/mod.menu @@ -0,0 +1,108 @@ +#include "ui/menudef.h" + +{ + \\ MOD \\ + +#define W 300 +#define H 240 +#define BUTT_W 45 +#define BUTT_H 35 +#define BORDER 10 + + menuDef + { + name "mod" + visible MENU_FALSE + fullscreen MENU_FALSE + rect (320-(W/2)) (240-(H/2)) W H + focusColor 1 .75 0 1 + style WINDOW_STYLE_FILLED + border WINDOW_BORDER_FULL + popup + onEsc + { + close mod + } + onOpen + { + uiScript loadMods + } + + itemDef + { + name window + rect 0 0 W H + style WINDOW_STYLE_FILLED + backcolor 0 0 0 1 + visible MENU_TRUE + decoration + + border WINDOW_BORDER_FULL + borderSize 1.0 + borderColor 0.5 0.5 0.5 1 + } + + itemDef + { + name modlist + rect BORDER BORDER (W-(2*BORDER)) (H-(BUTT_H+BORDER)) + type ITEM_TYPE_LISTBOX + style WINDOW_STYLE_EMPTY + elementwidth 120 + elementheight 20 + textscale .25 + elementtype LISTBOX_TEXT + feeder FEEDER_MODS + textalign 3 + textaligny 14 + border WINDOW_BORDER_FULL + bordercolor 0.5 0.5 0.5 0.5 + forecolor 1 1 1 1 + backcolor 0.2 0.2 0.2 1 + outlinecolor 0.1 0.1 0.1 0.5 + visible MENU_TRUE + doubleClick + { + play "sound/misc/menu1.wav"; + uiScript RunMod + } + } + + itemDef + { + name load + text "Load" + type ITEM_TYPE_BUTTON + textscale .25 + rect (W-(2*BUTT_W)) (H-BUTT_H) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + close mod; + uiScript RunMod + } + } + + itemDef + { + name cancel + text "Cancel" + type ITEM_TYPE_BUTTON + textscale .25 + rect (W-BUTT_W) (H-BUTT_H) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu3.wav"; + close mod + } + } + } +} diff --git a/assets/ui/news.menu b/assets/ui/news.menu new file mode 100755 index 0000000..99d8d68 --- /dev/null +++ b/assets/ui/news.menu @@ -0,0 +1,102 @@ +#include "ui/menudef.h" + +{ + \\ NEWS POPUP MENU \\ + +#define W 400 +#define H 400 +#define BUTT_W 45 +#define BUTT_H 35 +#define TITLE_H 35 +#define BORDER 10 +#define LIST_W (W-(2*BORDER)) + + menuDef + { + name "news_menu" + visible MENU_FALSE + fullscreen MENU_FALSE + rect (320-(W/2)) (240-(H/2)) W H + focusColor 1 .75 0 1 + style WINDOW_STYLE_FILLED + border WINDOW_BORDER_FULL + popup + onClose { } + onOpen { uiScript getNews } + onESC + { + close news_menu + } + + itemDef + { + name window + rect 0 0 W H + style WINDOW_STYLE_FILLED + backcolor 0 0 0 1 + visible MENU_TRUE + decoration + + border WINDOW_BORDER_FULL + borderSize 1.0 + borderColor 0.5 0.5 0.5 1 + } + + itemDef + { + name title + type ITEM_TYPE_TEXT + text "Tremulous News" + style WINDOW_STYLE_EMPTY + textscale .5 + textstyle ITEM_TEXTSTYLE_NORMAL + rect BORDER BORDER LIST_W TITLE_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + decoration + forecolor 1 1 1 1 + visible MENU_TRUE + } + + itemDef + { + name newslistbox + rect BORDER ((2*BORDER)+TITLE_H) LIST_W (H-((TITLE_H+BUTT_H)+(2*BORDER))) + type ITEM_TYPE_LISTBOX + style WINDOW_STYLE_EMPTY + elementwidth 120 + elementheight 16 + textscale .25 + border WINDOW_BORDER_FULL + bordersize 1 + bordercolor .5 .5 .5 1 + elementtype LISTBOX_TEXT + feeder FEEDER_NEWS + notselectable + visible MENU_TRUE + } + + // BUTTON // + + itemDef + { + name close + text "Close" + type ITEM_TYPE_BUTTON + textscale .25 + style WINDOW_STYLE_EMPTY + rect (W-BUTT_W) (H-BUTT_H) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + close news_menu + } + } + } +} + + diff --git a/assets/ui/options.menu b/assets/ui/options.menu new file mode 100755 index 0000000..af9b22d --- /dev/null +++ b/assets/ui/options.menu @@ -0,0 +1,311 @@ +#include "ui/menudef.h" + +{ + \\ FRONT END OPTIONS BOX \\ + +#define X 0 +#define Y 20 +#define W 250 +#define H ((10*(ELEM_H+ELEM_GAP))+120) +#define TOFF_X (0-(W/2)) +#define ELEM_H 16 +#define ELEM_GAP 4 +#define BUTT_W 35 +#define BUTT_H 35 +#define BORDER 10 +#define RESCOMBO_OFF 8 + + menuDef + { + name "simple_options" + visible MENU_FALSE + fullscreen MENU_FALSE + rect (320-(W/2)) (240-(H/2)) W H + focusColor 1 .75 0 1 + style WINDOW_STYLE_FILLED + border WINDOW_BORDER_FULL + popup + onEsc + { + play "sound/misc/menu1.wav"; + close simple_options + } + + itemDef + { + name window + rect 0 0 W H + style WINDOW_STYLE_FILLED + backcolor 0 0 0 1 + visible MENU_TRUE + decoration + + border WINDOW_BORDER_FULL + borderSize 1.0 + borderColor 0.5 0.5 0.5 1 + } + + + + itemDef + { + type ITEM_TYPE_EDITFIELD + style WINDOW_STYLE_EMPTY + text "Name:" + cvar "name" + maxchars 26 + rect X Y W ELEM_H + textalign ALIGN_RIGHT + textalignx TOFF_X + textvalign VALIGN_CENTER + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + } + + itemDef + { + type ITEM_TYPE_MULTI + text "Video Quality:" + cvar "ui_glCustom" + cvarFloatList { "High Quality" 0 "Normal" 1 "Fast" 2 "Fastest" 3 "Custom" 4 } + rect X (Y+(ELEM_H+ELEM_GAP)) W ELEM_H + textalign ALIGN_RIGHT + textalignx TOFF_X + textvalign VALIGN_CENTER + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + uiScript update "ui_glCustom" + } + } + + itemDef + { + type ITEM_TYPE_TEXT + text "Video Mode:" + rect X (Y+(2*(ELEM_H+ELEM_GAP))) (W/2) ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + decoration + } + + itemDef + { + rect ((W/2)+RESCOMBO_OFF) (Y+(2*(ELEM_H+ELEM_GAP))) ((W/2)-(2*BORDER)) ELEM_H + type ITEM_TYPE_COMBOBOX + style WINDOW_STYLE_FILLED + elementwidth ((W/2)-(2*BORDER)) + elementheight ELEM_H + dropitems 5 + textscale .25 + elementtype LISTBOX_TEXT + feeder FEEDER_RESOLUTIONS + border WINDOW_BORDER_FULL + borderColor 0.5 0.5 0.5 1 + forecolor 1 1 1 1 + backcolor 0 0 0 1 + outlinecolor 0.1 0.1 0.1 0.5 + visible MENU_TRUE + doubleclick + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + type ITEM_TYPE_SLIDER + text "Video Brightness:" + cvarfloat "r_gamma" 1 .5 2 + rect X (Y+(3*(ELEM_H+ELEM_GAP))) W ELEM_H + textalign ALIGN_RIGHT + textalignx TOFF_X + textvalign VALIGN_CENTER + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + } + + + + itemDef + { + type ITEM_TYPE_SLIDER + text "Effects Volume:" + cvarfloat "s_volume" 0.7 0 1 + rect X (Y+(4*(ELEM_H+ELEM_GAP))) W ELEM_H + textalign ALIGN_RIGHT + textalignx TOFF_X + textvalign VALIGN_CENTER + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + } + + itemDef + { + type ITEM_TYPE_SLIDER + text "Music Volume:" + cvarfloat "s_musicvolume" 0.25 0 1 + rect X (Y+(5*(ELEM_H+ELEM_GAP))) W ELEM_H + textalign ALIGN_RIGHT + textalignx TOFF_X + textvalign VALIGN_CENTER + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + } + + itemDef + { + type ITEM_TYPE_YESNO + text "OpenAL Sound:" + cvar "s_useOpenAL" + rect X (Y+(6*(ELEM_H+ELEM_GAP))) W ELEM_H + textalign ALIGN_RIGHT + textalignx TOFF_X + textvalign VALIGN_CENTER + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + } + } + + + + itemDef + { + type ITEM_TYPE_SLIDER + text "Mouse Sensitivity:" + cvarfloat "sensitivity" 5 1 30 + rect X (Y+(7*(ELEM_H+ELEM_GAP))) W ELEM_H + textalign ALIGN_RIGHT + textalignx TOFF_X + textvalign VALIGN_CENTER + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + } + + itemDef + { + type ITEM_TYPE_YESNO + text "Invert Mouse:" + cvar "ui_mousePitch" + rect X (Y+(8*(ELEM_H+ELEM_GAP))) W ELEM_H + textalign ALIGN_RIGHT + textalignx TOFF_X + textvalign VALIGN_CENTER + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + uiScript update ui_mousePitch + } + } + + + + itemDef + { + type ITEM_TYPE_MULTI + text "Network Connection:" + cvar "rate" + cvarFloatList { "<=28.8k" 2500 "33.6k" 3000 "56k" 4000 "ISDN" 5000 "LAN/CABLE/xDSL" 25000 } + rect X (Y+(9*(ELEM_H+ELEM_GAP))) W ELEM_H + textalign ALIGN_RIGHT + textalignx TOFF_X + textvalign VALIGN_CENTER + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + type ITEM_TYPE_YESNO + text "Allow Auto Download:" + cvar "cl_allowDownload" + rect X (Y+(10*(ELEM_H+ELEM_GAP))) W ELEM_H + textalign ALIGN_RIGHT + textalignx TOFF_X + textvalign VALIGN_CENTER + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + } + } + + + itemDef + { + text "For further options please use the in-game options menu" + type ITEM_TYPE_TEXT + style WINDOW_STYLE_EMPTY + textstyle ITEM_TEXTSTYLE_NORMAL + textscale .25 + rect 0 (H-60) W 10 + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_TRUE + decoration + } + + + itemDef + { + text "APPLY" + type ITEM_TYPE_BUTTON + textscale .25 + style WINDOW_STYLE_EMPTY + rect (W-(2*BUTT_W)) (H-BUTT_H) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + exec "snd_restart" // includes vid_restart + } + } + + itemDef + { + text "OK" + type ITEM_TYPE_BUTTON + textscale .25 + style WINDOW_STYLE_EMPTY + rect (W-BUTT_W) (H-BUTT_H) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + close simple_options + } + } + } +} diff --git a/assets/ui/password.menu b/assets/ui/password.menu new file mode 100755 index 0000000..d6ac4cd --- /dev/null +++ b/assets/ui/password.menu @@ -0,0 +1,85 @@ +#include "ui/menudef.h" + +{ + \\ PASSWORD POPUP MENU \\ + +#define BUTT_W 45 +#define BUTT_H 35 +#define BORDER 10 +#define INPUT_H 20 +#define W 250 +#define H ((2*BORDER)+INPUT_H+BUTT_H) + + menuDef + { + name "password_popmenu" + visible MENU_FALSE + fullscreen MENU_FALSE + rect (320-(W/2)) (240-(H/2)) W H + focusColor 1 .75 0 1 + style WINDOW_STYLE_FILLED + border WINDOW_BORDER_FULL + popup + + onOpen + { + setfocus passwordEntry + } + + onESC + { + close password_popmenu + } + + itemDef + { + name window + rect 0 0 W H + style WINDOW_STYLE_FILLED + backcolor 0 0 0 1 + visible MENU_TRUE + decoration + + border WINDOW_BORDER_FULL + borderSize 1.0 + borderColor 0.5 0.5 0.5 1 + } + + // PASSWORD // + + itemDef + { + name passwordEntry + type ITEM_TYPE_EDITFIELD + style WINDOW_STYLE_EMPTY + text "Password:" + maxChars 40 + textscale .4 + cvar "password" + rect BORDER BORDER (W-(2*BORDER)) INPUT_H + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_TRUE + } + + itemDef + { + name yes + text "OK" + type ITEM_TYPE_BUTTON + textscale .25 + style WINDOW_STYLE_EMPTY + rect (W-BUTT_W) (H-BUTT_H) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + close password_popmenu + } + } + } +} diff --git a/assets/ui/quit.menu b/assets/ui/quit.menu new file mode 100755 index 0000000..0bd2e90 --- /dev/null +++ b/assets/ui/quit.menu @@ -0,0 +1,99 @@ +#include "ui/menudef.h" + +{ + \\ QUIT POPUP MENU \\ + +#define W 120 +#define H 120 + + menuDef + { + name "quit_popmenu" + visible MENU_FALSE + fullscreen MENU_FALSE + rect (320-(W/2)) (240-(H/2)) W H + focusColor 1 .75 0 1 + style WINDOW_STYLE_FILLED + border WINDOW_BORDER_FULL + popup + onESC + { + play "sound/misc/menu1.wav"; + close quit_popmenu + } + + + itemDef + { + name window + rect 0 0 W H + style WINDOW_STYLE_FILLED + backcolor 0 0 0 1 + visible MENU_TRUE + decoration + + border WINDOW_BORDER_FULL + borderSize 1.0 + borderColor 0.5 0.5 0.5 1 + } + + + // QUIT // + + itemDef + { + name confirm + type ITEM_TYPE_TEXT + text "Quit Tremulous?" + style WINDOW_STYLE_EMPTY + textscale .3 + textstyle WINDOW_STYLE_SHADER + rect 0 0 W ((2*H)/3) + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + decoration + forecolor 1 1 1 1 + visible MENU_TRUE + } + + + itemDef + { + name yes + text "YES" + type ITEM_TYPE_BUTTON + textscale .25 + rect 0 (H/3) (W/2) ((2*H)/3) + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu4.wav"; + open quitCredit + } + } + + + itemDef + { + name no + text "NO" + type ITEM_TYPE_BUTTON + textscale .25 + rect (W/2) (H/3) (W/2) ((2*H)/3) + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + close quit_popmenu + } + } + } +} + + diff --git a/assets/ui/quitcredit.menu b/assets/ui/quitcredit.menu new file mode 100755 index 0000000..14a8f4f --- /dev/null +++ b/assets/ui/quitcredit.menu @@ -0,0 +1,410 @@ +#include "ui/menudef.h" + +{ + \\ QUIT CREDIT \\ + + menuDef + { + name "quitCredit" + visible MENU_FALSE + fullscreen MENU_TRUE + rect 0 0 640 480 + focusColor 1 .75 0 1 + style WINDOW_STYLE_FILLED + border WINDOW_BORDER_NONE + aspectBias ASPECT_NONE + onEsc + { + uiScript "quit" + } + + itemDef + { + name exitclickbox + style WINDOW_STYLE_SHADER + rect 0 0 640 480 + type ITEM_TYPE_BUTTON + visible MENU_TRUE + backcolor 0 0 0 1 + background "ui/assets/credits_splash.jpg" + action + { + close quitCredit; + uiScript "quit" + } + } + + itemDef + { + name topstripe + style WINDOW_STYLE_FILLED + rect -5 -5 645 64 + visible MENU_TRUE + backcolor 0 0 0 1 + + border WINDOW_BORDER_FULL + borderSize 1.5 + borderColor 1 0 0 1 + } + + itemDef + { + name bottomstripe + style WINDOW_STYLE_FILLED + rect -5 416 645 485 + visible MENU_TRUE + backcolor 0 0 0 1 + + border WINDOW_BORDER_FULL + borderSize 1.5 + borderColor 1 0 0 1 + } + + itemDef + { + name "creditstitle" + group grpidcredit + style WINDOW_STYLE_EMPTY + rect 320 48 1 1 + type ITEM_TYPE_TEXT + textalign ALIGN_CENTER + textscale 0.75 + textstyle ITEM_TEXTSTYLE_NORMAL + text "CREDITS" + forecolor 1 1 1 1 + backcolor 1 0 0 1 + visible 1 + decoration + } + + itemDef + { + name "credit1left" + group grpidcredit + style WINDOW_STYLE_EMPTY + rect 10 96 1 1 + type ITEM_TYPE_TEXT + textalign ALIGN_LEFT + textscale 0.50 + textstyle ITEM_TEXTSTYLE_NORMAL + text "Tim 'Timbo' Angus" + forecolor 1 1 1 1 + backcolor 1 0 0 1 + visible 1 + decoration + } + itemDef + { + name "credit1right" + group grpidcredit + style WINDOW_STYLE_EMPTY + rect 630 96 1 1 + type ITEM_TYPE_TEXT + textalign ALIGN_RIGHT + textscale 0.50 + textstyle ITEM_TEXTSTYLE_NORMAL + text "Programming and Direction" + forecolor 1 1 1 1 + backcolor 0 1 0 1 + visible 1 + decoration + } + + itemDef + { + name "credit2left" + group grpidcredit + style WINDOW_STYLE_EMPTY + rect 10 128 1 1 + type ITEM_TYPE_TEXT + textalign ALIGN_LEFT + textscale 0.50 + textstyle ITEM_TEXTSTYLE_NORMAL + text "Nick 'jex' Jansens" + forecolor 1 1 1 1 + backcolor 1 0 0 1 + visible 1 + decoration + } + itemDef + { + name "credit2right" + group grpidcredit + style WINDOW_STYLE_EMPTY + rect 630 128 1 1 + type ITEM_TYPE_TEXT + textalign ALIGN_RIGHT + textscale 0.50 + textstyle ITEM_TEXTSTYLE_NORMAL + text "Mapping, texturing and 2D artwork" + forecolor 1 1 1 1 + backcolor 0 1 0 1 + visible 1 + decoration + } + + itemDef + { + name "credit3left" + group grpidcredit + style WINDOW_STYLE_EMPTY + rect 10 160 1 1 + type ITEM_TYPE_TEXT + textalign ALIGN_LEFT + textscale 0.50 + textstyle ITEM_TEXTSTYLE_NORMAL + text "Robin 'OverFlow' Marshall" + forecolor 1 1 1 1 + backcolor 1 0 0 1 + visible 1 + decoration + } + itemDef + { + name "credit3right" + group grpidcredit + style WINDOW_STYLE_EMPTY + rect 630 160 1 1 + type ITEM_TYPE_TEXT + textalign ALIGN_RIGHT + textscale 0.50 + textstyle ITEM_TEXTSTYLE_NORMAL + text "Modelling, animation and mapping" + forecolor 1 1 1 1 + backcolor 0 1 0 1 + visible 1 + decoration + } + + itemDef + { + name "credit4left" + group grpidcredit + style WINDOW_STYLE_EMPTY + rect 10 192 1 1 + type ITEM_TYPE_TEXT + textalign ALIGN_LEFT + textscale 0.50 + textstyle ITEM_TEXTSTYLE_NORMAL + text "Jan 'Stannum' van der Weg" + forecolor 1 1 1 1 + backcolor 1 0 0 1 + visible 1 + decoration + } + itemDef + { + name "credit4right" + group grpidcredit + style WINDOW_STYLE_EMPTY + rect 630 192 1 1 + type ITEM_TYPE_TEXT + textalign ALIGN_RIGHT + textscale 0.50 + textstyle ITEM_TEXTSTYLE_NORMAL + text "Texturing and mapping" + forecolor 1 1 1 1 + backcolor 0 1 0 1 + visible 1 + decoration + } + + itemDef + { + name "credit5left" + group grpidcredit + style WINDOW_STYLE_EMPTY + rect 10 224 1 1 + type ITEM_TYPE_TEXT + textalign ALIGN_LEFT + textscale 0.50 + textstyle ITEM_TEXTSTYLE_NORMAL + text "Mike 'Veda' McInerney" + forecolor 1 1 1 1 + backcolor 1 0 0 1 + visible 1 + decoration + } + itemDef + { + name "credit5right" + group grpidcredit + style WINDOW_STYLE_EMPTY + rect 630 224 1 1 + type ITEM_TYPE_TEXT + textalign ALIGN_RIGHT + textscale 0.50 + textstyle ITEM_TEXTSTYLE_NORMAL + text "Modelling, animation and texturing" + forecolor 1 1 1 1 + backcolor 0 1 0 1 + visible 1 + decoration + } + + itemDef + { + name "credit6left" + group grpidcredit + style WINDOW_STYLE_EMPTY + rect 10 256 1 1 + type ITEM_TYPE_TEXT + textalign ALIGN_LEFT + textscale 0.50 + textstyle ITEM_TEXTSTYLE_NORMAL + text "Gordon 'Godmil' Miller" + forecolor 1 1 1 1 + backcolor 1 0 0 1 + visible 1 + decoration + } + itemDef + { + name "credit6right" + group grpidcredit + style WINDOW_STYLE_EMPTY + rect 630 256 1 1 + type ITEM_TYPE_TEXT + textalign ALIGN_RIGHT + textscale 0.50 + textstyle ITEM_TEXTSTYLE_NORMAL + text "Mapping" + forecolor 1 1 1 1 + backcolor 0 1 0 1 + visible 1 + decoration + } + + itemDef + { + name "credit7left" + group grpidcredit + style WINDOW_STYLE_EMPTY + rect 10 288 1 1 + type ITEM_TYPE_TEXT + textalign ALIGN_LEFT + textscale 0.50 + textstyle ITEM_TEXTSTYLE_NORMAL + text "'Who-[Soup]'" + forecolor 1 1 1 1 + backcolor 1 0 0 1 + visible 1 + decoration + } + itemDef + { + name "credit7right" + group grpidcredit + style WINDOW_STYLE_EMPTY + rect 630 288 1 1 + type ITEM_TYPE_TEXT + textalign ALIGN_RIGHT + textscale 0.50 + textstyle ITEM_TEXTSTYLE_NORMAL + text "Mapping" + forecolor 1 1 1 1 + backcolor 0 1 0 1 + visible 1 + decoration + } + + itemDef + { + name "credit8left" + group grpidcredit + style WINDOW_STYLE_EMPTY + rect 10 320 1 1 + type ITEM_TYPE_TEXT + textalign ALIGN_LEFT + textscale 0.50 + textstyle ITEM_TEXTSTYLE_NORMAL + text "Tristan 'jhrx' Blease" + forecolor 1 1 1 1 + backcolor 1 0 0 1 + visible 1 + decoration + } + itemDef + { + name "credit8right" + group grpidcredit + style WINDOW_STYLE_EMPTY + rect 630 320 1 1 + type ITEM_TYPE_TEXT + textalign ALIGN_RIGHT + textscale 0.50 + textstyle ITEM_TEXTSTYLE_NORMAL + text "Mapping" + forecolor 1 1 1 1 + backcolor 0 1 0 1 + visible 1 + decoration + } + + itemDef + { + name "credit9left" + group grpidcredit + style WINDOW_STYLE_EMPTY + rect 10 352 1 1 + type ITEM_TYPE_TEXT + textalign ALIGN_LEFT + textscale 0.50 + textstyle ITEM_TEXTSTYLE_NORMAL + text "Paul 'MoP' Greveson" + forecolor 1 1 1 1 + backcolor 1 0 0 1 + visible 1 + decoration + } + itemDef + { + name "credit9right" + group grpidcredit + style WINDOW_STYLE_EMPTY + rect 630 352 1 1 + type ITEM_TYPE_TEXT + textalign ALIGN_RIGHT + textscale 0.50 + textstyle ITEM_TEXTSTYLE_NORMAL + text "Modelling and texturing" + forecolor 1 1 1 1 + backcolor 0 1 0 1 + visible 1 + decoration + } + + itemDef + { + name "credit10left" + group grpidcredit + style WINDOW_STYLE_EMPTY + rect 10 384 1 1 + type ITEM_TYPE_TEXT + textalign ALIGN_LEFT + textscale 0.50 + textstyle ITEM_TEXTSTYLE_NORMAL + text "Chris 'Dolby' McCarthy" + forecolor 1 1 1 1 + backcolor 1 0 0 1 + visible 1 + decoration + } + itemDef + { + name "credit10right" + group grpidcredit + style WINDOW_STYLE_EMPTY + rect 630 384 1 1 + type ITEM_TYPE_TEXT + textalign ALIGN_RIGHT + textscale 0.50 + textstyle ITEM_TEXTSTYLE_NORMAL + text "Sound" + forecolor 1 1 1 1 + backcolor 0 1 0 1 + visible 1 + decoration + } + } +} diff --git a/assets/ui/say.menu b/assets/ui/say.menu new file mode 100755 index 0000000..a52f2ed --- /dev/null +++ b/assets/ui/say.menu @@ -0,0 +1,137 @@ +#include "ui/menudef.h" + +{ + +#define BORDER 10 + +#define X BORDER +#define Y BORDER +#define W (600-(2*BORDER)) +#define H (480-(2*BORDER)) + + // Say to All + menuDef + { + name say + fullScreen MENU_FALSE + visible MENU_FALSE + rect X Y W H + aspectBias ALIGN_LEFT + focusColor 1 1 1 1 + style WINDOW_STYLE_EMPTY + onOpen + { + setfocus say_field; + } + + itemDef + { + name say_field + type ITEM_TYPE_SAYFIELD + style WINDOW_STYLE_EMPTY + text "Say:" + cvar "ui_sayBuffer" + maxchars 128 + rect 0 0 W H + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + textstyle ITEM_TEXTSTYLE_SHADOWED + textscale .4 + forecolor 0.93 0.93 0.92 1 + visible MENU_TRUE + onCharEntry + { + uiScript SayKeyDown; + } + onTextEntry + { + uiScript Say; + close say; + } + } + } + + // Say to Team + menuDef + { + name say_team + fullScreen MENU_FALSE + visible MENU_FALSE + rect X Y W H + aspectBias ALIGN_LEFT + focusColor 1 1 1 1 + style WINDOW_STYLE_EMPTY + onOpen + { + setfocus say_field + } + + itemDef + { + name say_field + type ITEM_TYPE_SAYFIELD + style WINDOW_STYLE_EMPTY + text "Say to team:" + cvar "ui_sayBuffer" + maxchars 128 + rect 0 0 W H + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + textstyle ITEM_TEXTSTYLE_SHADOWED + textscale .4 + forecolor 0.93 0.93 0.92 1 + visible MENU_TRUE + onCharEntry + { + uiScript SayKeyDown; + } + onTextEntry + { + uiScript Say; + close say_team; + } + } + } + + // Command + menuDef + { + name say_command + fullScreen MENU_FALSE + visible MENU_FALSE + rect X Y W H + aspectBias ALIGN_LEFT + focusColor 1 1 1 1 + style WINDOW_STYLE_EMPTY + onOpen + { + setfocus say_field + } + + itemDef + { + name say_field + type ITEM_TYPE_SAYFIELD + style WINDOW_STYLE_EMPTY + text "Command:" + cvar "ui_sayBuffer" + maxchars 128 + rect 0 0 W H + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + textstyle ITEM_TEXTSTYLE_SHADOWED + textscale .4 + forecolor 0.93 0.93 0.92 1 + visible MENU_TRUE + onCharEntry + { + uiScript SayKeyDown; + } + onTextEntry + { + uiScript Say; + close say_command; + } + } + } +} diff --git a/assets/ui/serverinfo.menu b/assets/ui/serverinfo.menu new file mode 100755 index 0000000..596712c --- /dev/null +++ b/assets/ui/serverinfo.menu @@ -0,0 +1,112 @@ +#include "ui/menudef.h" + +{ + \\ SERVER INFO POPUP MENU \\ + +#define W 400 +#define H 300 +#define BUTT_W 45 +#define BUTT_H 35 +#define BORDER 10 +#define LIST_W (W-(2*BORDER)) +#define LIST_DW (LIST_W-40) +#define LEFT_C 0.13 +#define RIGHT_C 0.61 + + menuDef + { + name "serverinfo_popmenu" + visible MENU_FALSE + fullscreen MENU_FALSE + rect (320-(W/2)) (240-(H/2)) W H + focusColor 1 .75 0 1 + style WINDOW_STYLE_FILLED + border WINDOW_BORDER_FULL + popup + onClose { } + onOpen { uiScript ServerStatus } + onESC + { + close serverinfo_popmenu + } + + itemDef + { + name window + rect 0 0 W H + style WINDOW_STYLE_FILLED + backcolor 0 0 0 1 + visible MENU_TRUE + decoration + + border WINDOW_BORDER_FULL + borderSize 1.0 + borderColor 0.5 0.5 0.5 1 + } + + itemDef + { + name serverinfo + rect BORDER BORDER LIST_W (H-(BUTT_H+BORDER)) + type ITEM_TYPE_LISTBOX + style WINDOW_STYLE_EMPTY + elementwidth 120 + elementheight 16 + textscale .25 + border WINDOW_BORDER_FULL + bordersize 1 + bordercolor .5 .5 .5 1 + elementtype LISTBOX_TEXT + feeder FEEDER_SERVERSTATUS + notselectable + visible MENU_TRUE + columns 4 + 0 ((2*LEFT_C)*LIST_DW) ALIGN_LEFT + (LEFT_C*LIST_DW) (LEFT_C*LIST_DW) ALIGN_LEFT + ((2*LEFT_C)*LIST_DW) (LEFT_C*LIST_DW) ALIGN_LEFT + ((1-RIGHT_C)*LIST_DW) (RIGHT_C*LIST_DW) ALIGN_LEFT + } + + // BUTTON // + + itemDef + { + name refresh + text "Refresh" + type ITEM_TYPE_BUTTON + textscale .25 + style WINDOW_STYLE_EMPTY + rect (W-(2*BUTT_W)) (H-BUTT_H) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + uiScript ServerStatus + } + } + + itemDef + { + name close + text "Close" + type ITEM_TYPE_BUTTON + textscale .25 + style WINDOW_STYLE_EMPTY + rect (W-BUTT_W) (H-BUTT_H) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + close serverinfo_popmenu + } + } + } +} + + diff --git a/assets/ui/teamscore.menu b/assets/ui/teamscore.menu new file mode 100755 index 0000000..65893a0 --- /dev/null +++ b/assets/ui/teamscore.menu @@ -0,0 +1,386 @@ +#include "ui/menudef.h" + +{ + \\ score_menu \\ + +#define W 500 +#define H 338 +#define BORDER 10 + +#define TOFF 10 +#define SPEC_W 75 +#define BAR_H 30 + +#define LLIST_L 0 +#define LLIST_R (W/2) +#define RLIST_L (W/2) +#define RLIST_R W + + menuDef + { + name "teamscore_menu" + visible MENU_FALSE + fullscreen MENU_FALSE + rect (320-(W/2)) (240-(H/2)) W H + focusColor 1 .75 0 1 + style WINDOW_STYLE_EMPTY + + // TEAM NAME // + + itemDef + { + name teamNameWindow + rect 0 0 W BAR_H + style WINDOW_STYLE_FILLED + border WINDOW_BORDER_FULL + borderSize 1.0 + bordercolor .5 .5 .5 1 + forecolor 1 1 1 1 + backcolor 0 0 0 .8 + visible MENU_TRUE + decoration + } + + itemDef + { + name alienteamname + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + textalignx TOFF + textscale 0.4 + rect 0 0 (W/3) BAR_H + forecolor 1 1 1 1 + decoration + visible MENU_TRUE + ownerdraw CG_ALIENS_SCORE_LABEL + } + + itemDef + { + name stagereport + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale 0.33 + rect (W/3) 0 (W/3) BAR_H + forecolor 1 1 1 1 + decoration + visible MENU_TRUE + ownerdraw CG_STAGE_REPORT_TEXT + } + + itemDef + { + name humanteamname + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx -TOFF + textscale 0.4 + rect ((2*W)/3) 0 (W/3) BAR_H + forecolor 1 1 1 1 + decoration + visible MENU_TRUE + ownerdraw CG_HUMANS_SCORE_LABEL + } + + // TEAM BARS // + + itemDef + { + name leftteambar + rect 0 (BAR_H+BORDER) (W/2) BAR_H + style WINDOW_STYLE_FILLED + border WINDOW_BORDER_FULL + borderSize 1.0 + bordercolor .5 .5 .5 1 + forecolor 1 1 1 1 + backcolor 0 0 0 .8 + visible MENU_TRUE + decoration + } + + itemDef + { + name rightteambar + rect (W/2) (BAR_H+BORDER) (W/2) BAR_H + style WINDOW_STYLE_FILLED + border WINDOW_BORDER_FULL + borderSize 1.0 + bordercolor .5 .5 .5 1 + forecolor 1 1 1 1 + backcolor 0 0 0 .8 + visible MENU_TRUE + decoration + } + + + // TEAM HEADINGS // + + itemDef + { + type ITEM_TYPE_TEXT + text "Status" + textscale .33 + style WINDOW_STYLE_EMPTY + rect (LLIST_L+10) (BAR_H+BORDER) 1 BAR_H + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + backcolor 0 0 0 0 + forecolor 1 .75 0 1 + decoration + visible MENU_TRUE + } + + itemDef + { + type ITEM_TYPE_TEXT + text "Name" + textscale .33 + style WINDOW_STYLE_EMPTY + rect (LLIST_L+50) (BAR_H+BORDER) 1 BAR_H + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + backcolor 0 0 0 0 + forecolor 1 .75 0 1 + decoration + visible MENU_TRUE + } + + itemDef + { + type ITEM_TYPE_TEXT + text "Score" + textscale .33 + style WINDOW_STYLE_EMPTY + rect (LLIST_R-95) (BAR_H+BORDER) 1 BAR_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + backcolor 0 0 0 0 + forecolor 1 .75 0 1 + decoration + visible MENU_TRUE + } + + itemDef + { + type ITEM_TYPE_TEXT + text "Time" + textscale .33 + style WINDOW_STYLE_EMPTY + rect (LLIST_R-55) (BAR_H+BORDER) 1 BAR_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + backcolor 0 0 0 0 + forecolor 1 .75 0 1 + decoration + visible MENU_TRUE + } + + itemDef + { + type ITEM_TYPE_TEXT + text "Ping" + textscale .33 + style WINDOW_STYLE_EMPTY + rect (LLIST_R-15) (BAR_H+BORDER) 1 BAR_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + backcolor 0 0 0 0 + forecolor 1 .75 0 1 + decoration + visible MENU_TRUE + } + + itemDef + { + type ITEM_TYPE_TEXT + text "Status" + textscale .33 + style WINDOW_STYLE_EMPTY + rect (RLIST_L+10) (BAR_H+BORDER) 1 BAR_H + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + backcolor 0 0 0 0 + forecolor 1 .75 0 1 + decoration + visible MENU_TRUE + } + + itemDef + { + type ITEM_TYPE_TEXT + text "Name" + textscale .33 + style WINDOW_STYLE_EMPTY + rect (RLIST_L+50) (BAR_H+BORDER) 1 BAR_H + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + backcolor 0 0 0 0 + forecolor 1 .75 0 1 + decoration + visible MENU_TRUE + } + + itemDef + { + type ITEM_TYPE_TEXT + text "Score" + textscale .33 + style WINDOW_STYLE_EMPTY + rect (RLIST_R-95) (BAR_H+BORDER) 1 BAR_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + backcolor 0 0 0 0 + forecolor 1 .75 0 1 + decoration + visible MENU_TRUE + } + + itemDef + { + type ITEM_TYPE_TEXT + text "Time" + textscale .33 + style WINDOW_STYLE_EMPTY + rect (RLIST_R-55) (BAR_H+BORDER) 1 BAR_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + backcolor 0 0 0 0 + forecolor 1 .75 0 1 + decoration + visible MENU_TRUE + } + + itemDef + { + type ITEM_TYPE_TEXT + text "Ping" + textscale .33 + style WINDOW_STYLE_EMPTY + rect (RLIST_R-15) (BAR_H+BORDER) 1 BAR_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + backcolor 0 0 0 0 + forecolor 1 .75 0 1 + decoration + visible MENU_TRUE + } + + itemDef + { + name leftlist + rect 0 ((2*BAR_H)+BORDER) (W/2) (H-((3*BAR_H)+(2*BORDER))) + style WINDOW_STYLE_FILLED + backcolor 0 0 0 .6 + border WINDOW_BORDER_FULL + borderSize 1.0 + bordercolor .5 .5 .5 1 + forecolor .75 .75 .75 1 + visible MENU_TRUE + type ITEM_TYPE_LISTBOX + elementwidth 135 + elementheight 16 + textscale .25 + elementtype LISTBOX_TEXT + feeder FEEDER_ALIENTEAM_LIST + notselectable + noscrollbar + columns 7 + 5 15 ALIGN_LEFT + 21 15 ALIGN_LEFT + 7 30 ALIGN_LEFT + 45 ((W/2)-170) ALIGN_LEFT + ((W/2)-120) 20 ALIGN_RIGHT + ((W/2)-80) 20 ALIGN_RIGHT + ((W/2)-40) 20 ALIGN_RIGHT + } + + itemDef + { + name rightlist + rect (W/2) ((2*BAR_H)+BORDER) (W/2) (H-((3*BAR_H)+(2*BORDER))) + style WINDOW_STYLE_FILLED + backcolor 0 0 0 .6 + border WINDOW_BORDER_FULL + borderSize 1.0 + bordercolor .5 .5 .5 1 + forecolor .75 .75 .75 1 + visible MENU_TRUE + type ITEM_TYPE_LISTBOX + elementwidth 135 + elementheight 16 + textscale .25 + elementtype LISTBOX_TEXT + feeder FEEDER_HUMANTEAM_LIST + notselectable + noscrollbar + columns 7 + 5 15 ALIGN_LEFT + 21 15 ALIGN_LEFT + 7 30 ALIGN_LEFT + 45 ((W/2)-170) ALIGN_LEFT + ((W/2)-120) 20 ALIGN_RIGHT + ((W/2)-80) 20 ALIGN_RIGHT + ((W/2)-40) 20 ALIGN_RIGHT + } + + // spectators // + + itemDef + { + name window + rect 0 (H-BAR_H) W BAR_H + style WINDOW_STYLE_FILLED + border WINDOW_BORDER_FULL + borderSize 1.0 + bordercolor .5 .5 .5 1 + backcolor 0 0 0 .8 + textscale .33 + visible MENU_TRUE + decoration + } + + itemDef + { + type ITEM_TYPE_TEXT + name window + text "Spectating:" + rect 0 (H-BAR_H) SPEC_W BAR_H + style WINDOW_STYLE_FILLED + forecolor 1 1 1 1 + textscale .33 + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + textalignx TOFF + visible MENU_TRUE + decoration + } + + itemDef + { + name window + rect SPEC_W (H-BAR_H) (W-SPEC_W) BAR_H + style WINDOW_STYLE_FILLED + forecolor 1 1 1 1 + textscale .33 + textvalign VALIGN_CENTER + visible MENU_TRUE + ownerdraw CG_SPECTATORS + decoration + } + + itemDef + { + name winner + type ITEM_TYPE_TEXT + rect (W/2) (H+BAR_H) 0 0 + style WINDOW_STYLE_EMPTY + forecolor 1 1 1 1 + textscale 0.5 + textalign ALIGN_CENTER + textvalign VALIGN_TOP + visible MENU_TRUE + cvar "ui_winner" + decoration + } + } +} diff --git a/assets/ui/tremulous.txt b/assets/ui/tremulous.txt new file mode 100755 index 0000000..7968411 --- /dev/null +++ b/assets/ui/tremulous.txt @@ -0,0 +1,20 @@ +// menu defs +// +{ + loadMenu { "ui/tremulous_teamselect.menu" } + loadMenu { "ui/tremulous_alienclass.menu" } + loadMenu { "ui/tremulous_humanitem.menu" } + + loadMenu { "ui/tremulous_alienbuild.menu" } + loadMenu { "ui/tremulous_humanbuild.menu" } + + loadMenu { "ui/tremulous_humanarmoury.menu" } + + loadMenu { "ui/tremulous_dialogs.menu" } + loadMenu { "ui/tremulous_humandialogs.menu" } + loadMenu { "ui/tremulous_aliendialogs.menu" } + + loadMenu { "ui/tremulous_alienupgrade.menu" } + + loadMenu { "ui/say.menu" } +} diff --git a/assets/ui/tremulous_alien_builder_hud.menu b/assets/ui/tremulous_alien_builder_hud.menu new file mode 100755 index 0000000..b532264 --- /dev/null +++ b/assets/ui/tremulous_alien_builder_hud.menu @@ -0,0 +1,42 @@ +#include "ui/menudef.h" + +{ + +#define W 640 +#define H 480 + + menuDef + { + name "alien_builder_hud" + fullScreen MENU_FALSE + visible MENU_TRUE + rect 0 0 W H + aspectBias ASPECT_NONE + +#include "ui/tremulous_alien_common_hud.h" + + //BUILD TIMER + itemDef + { + name "buildtimer" + rect 567 410 25 25 + aspectBias ALIGN_RIGHT + visible MENU_TRUE + decoration + forecolor 1.0 0.0 0.0 .5 + ownerdraw CG_PLAYER_BUILD_TIMER + } + + //BUILD POINTS + itemDef + { + name "build-points" + rect 493.5 421.5 60 15 + aspectBias ALIGN_RIGHT + visible MENU_TRUE + decoration + forecolor 1.0 0.0 0.0 1.0 + ownerdraw CG_PLAYER_AMMO_VALUE + } + } +} diff --git a/assets/ui/tremulous_alien_common_hud.h b/assets/ui/tremulous_alien_common_hud.h new file mode 100755 index 0000000..c77c9f7 --- /dev/null +++ b/assets/ui/tremulous_alien_common_hud.h @@ -0,0 +1,257 @@ +#define COMMON_HUD_R 1.0 +#define COMMON_HUD_G 0.0 +#define COMMON_HUD_B 0.0 +#include "ui/tremulous_common_hud.h" + +////////////////// +//STATIC OBJECTS// +////////////////// + +//LEFT RING CIRCLE +itemDef +{ + name "left-ring-circle" + rect 47.5 410 25 25 + aspectBias ALIGN_LEFT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.25 + style WINDOW_STYLE_SHADER + background "ui/assets/neutral/circle.tga" +} + +//LEFT ARM +itemDef +{ + name "left-arm" + rect 77 404.75 104 52.5 + aspectBias ALIGN_LEFT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.25 + style WINDOW_STYLE_SHADER + background "ui/assets/alien/left-arm.tga" +} + +//LEFT ARM CIRCLE +itemDef +{ + name "left-arm-circle" + rect 150 417.5 25 25 + aspectBias ALIGN_LEFT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.25 + style WINDOW_STYLE_SHADER + background "ui/assets/neutral/circle.tga" +} + +//RIGHT RING CIRCLE +itemDef +{ + name "right-ring-circle" + rect 567 410 25 25 + aspectBias ALIGN_RIGHT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.25 + style WINDOW_STYLE_SHADER + background "ui/assets/neutral/circle.tga" +} + +//RIGHT ARM +itemDef +{ + name "right-arm" + rect 459 404.75 104 52.5 + aspectBias ALIGN_RIGHT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.25 + style WINDOW_STYLE_SHADER + background "ui/assets/alien/right-arm.tga" +} + +/////////////////// +//DYNAMIC OBJECTS// +/////////////////// + +//BOLT +itemDef +{ + name "bolt" + rect 52.5 412.5 15 20 + aspectBias ALIGN_LEFT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.8 + backcolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.2 + background "ui/assets/alien/bolt.tga" + ownerdraw CG_PLAYER_BOOST_BOLT +} + +//CROSS +itemDef +{ + name "cross" + rect 150 417.5 25 25 + aspectBias ALIGN_LEFT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.5 + ownerdraw CG_PLAYER_HEALTH_CROSS +} + +//LEFT RING +itemDef +{ + name "left-ring" + rect 7.25 369.5 90.5 106 + aspectBias ALIGN_LEFT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.8 + backcolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.2 + background "ui/assets/alien/left-ring.tga" + ownerdraw CG_PLAYER_BOOSTED +} + +//LEFT SPIKES +itemDef +{ + name "left-spikes" + rect 18.5 381 59 83 + aspectBias ALIGN_LEFT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 1.0 + backcolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.2 + background "ui/assets/alien/left-spikes.tga" + ownerdraw CG_PLAYER_WALLCLIMBING +} + +//RIGHT RING +itemDef +{ + name "right-ring" + rect 542.25 369.5 90.5 106 + aspectBias ALIGN_RIGHT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.8 + backcolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.2 + background "ui/assets/alien/right-ring.tga" + ownerdraw CG_PLAYER_BOOSTED +} + +//RIGHT SPIKES +itemDef +{ + name "right-spikes" + rect 562.5 381 59 83 + aspectBias ALIGN_RIGHT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 1.0 + backcolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.2 + background "ui/assets/alien/right-spikes.tga" + ownerdraw CG_PLAYER_WALLCLIMBING +} + +//HEALTH +itemDef +{ + name "health" + rect 78.5 421.5 60 15 + aspectBias ALIGN_LEFT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B .5 + ownerdraw CG_PLAYER_HEALTH +} + +//ALIEN CLASS ICON +itemDef +{ + name "alien-icon" + rect 465 417.5 25 25 + aspectBias ALIGN_RIGHT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.6 + ownerdraw CG_PLAYER_WEAPONICON +} + +//ORGANS +itemDef +{ + name "organs" + rect 570 416 15 15 + aspectBias ALIGN_RIGHT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 1 + ownerdraw CG_PLAYER_CREDITS_VALUE_NOPAD +} + +//CREDITS FRACTION +itemDef +{ + name "credits-background" + rect 567 410 25 25 + aspectBias ALIGN_RIGHT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.25 + background "ui/assets/neutral/circle.tga" + ownerdraw CG_PLAYER_CREDITS_FRACTION +} + +//ALIENSENSE +itemDef +{ + name "aliensense" + rect 20 20 600 400 + visible MENU_TRUE + decoration + ownerdraw CG_PLAYER_ALIEN_SENSE +} + +//CHARGE BAR +itemDef +{ + name "charge" + rect 292 426 56 8 + aspectBias ALIGN_CENTER + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.5 + ownerdraw CG_PLAYER_CHARGE_BAR + background "ui/assets/neutral/charge_cap_h.tga" +} + +//CHARGE BAR BG +itemDef +{ + name "chargebg" + rect 288 422 64 16 + aspectBias ALIGN_CENTER + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.25 + ownerdraw CG_PLAYER_CHARGE_BAR_BG + background "ui/assets/neutral/charge_bg_h.tga" +} + +//TEAM OVERLAY +itemDef +{ + name "teamoverlay" + rect BORDER 175 200 128 + style WINDOW_STYLE_EMPTY + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.75 + textscale 0.85 + ownerdraw CG_TEAMOVERLAY +} diff --git a/assets/ui/tremulous_alien_general_hud.menu b/assets/ui/tremulous_alien_general_hud.menu new file mode 100755 index 0000000..df1352d --- /dev/null +++ b/assets/ui/tremulous_alien_general_hud.menu @@ -0,0 +1,30 @@ +#include "ui/menudef.h" + +{ + +#define W 640 +#define H 480 + + menuDef + { + name "alien_general_hud" + fullScreen MENU_FALSE + visible MENU_TRUE + rect 0 0 W H + aspectBias ASPECT_NONE + +#include "ui/tremulous_alien_common_hud.h" + + //BLOB + itemDef + { + name "blob" + rect 497 419 52 18 + aspectBias ALIGN_RIGHT + visible MENU_TRUE + forecolor 1.0 0.0 0.0 0.5 + background "ui/assets/alien/tremublob.tga" + ownerdraw CG_PLAYER_POISON_BARBS + } + } +} diff --git a/assets/ui/tremulous_alienbuild.menu b/assets/ui/tremulous_alienbuild.menu new file mode 100755 index 0000000..127b769 --- /dev/null +++ b/assets/ui/tremulous_alienbuild.menu @@ -0,0 +1,136 @@ +#include "ui/menudef.h" + +{ + +#define W 450 +#define H 250 +#define BORDER 10 + +#define LIST_W 140 +#define LIST_H (H-(2*BORDER)) +#define LIST_X BORDER +#define LIST_Y BORDER + +#define BUTT_H 25 +#define BUTT_W 45 + +#define INFO_W (W-((3*BORDER)+LIST_W)) +#define INFO_H (H-((3*BORDER)+BUTT_H)) +#define INFO_X ((2*BORDER)+LIST_W) +#define INFO_Y BORDER +#define INFO_TOFF 6 + + menuDef + { + name "tremulous_alienbuild" + visible MENU_FALSE + fullscreen MENU_FALSE + outOfBoundsClick + rect (320-(W/2)) (240-(H/2)) W H + focusColor 1 .75 0 1 + style WINDOW_STYLE_FILLED + popup + onOpen { uiScript LoadAlienBuilds; setFocus list } + + itemDef + { + name window + rect 0 0 W H + style WINDOW_STYLE_FILLED + backcolor 0 0 0 1 + visible MENU_TRUE + decoration + + border WINDOW_BORDER_FULL + borderSize 1.0 + borderColor 0.5 0.5 0.5 1 + } + + itemDef + { + name "list" + rect LIST_X LIST_Y LIST_W LIST_H + type ITEM_TYPE_LISTBOX + style WINDOW_STYLE_EMPTY + elementwidth 120 + elementheight 20 + textscale .33 + elementtype LISTBOX_TEXT + feeder FEEDER_TREMALIENBUILD + border WINDOW_BORDER_FULL + bordercolor 0.5 0.5 0.5 0.5 + forecolor 1 1 1 1 + backcolor 0.2 0.2 0.2 1 + outlinecolor 0.1 0.1 0.1 0.5 + visible MENU_TRUE + doubleclick + { + play "sound/misc/menu1.wav"; + uiScript BuildAlienBuildable; + close tremulous_alienbuild + } + } + + itemDef + { + name infopane + ownerdraw UI_ABUILDINFOPANE + textstyle ITEM_TEXTSTYLE_NORMAL + style WINDOW_STYLE_EMPTY + rect INFO_X INFO_Y INFO_W INFO_H + textscale .33 + textalign ALIGN_LEFT + textvalign VALIGN_TOP + textalignx INFO_TOFF + textaligny INFO_TOFF + border WINDOW_BORDER_FULL + bordercolor 0.5 0.5 0.5 0.5 + forecolor 1 1 1 1 + backcolor 0.2 0.2 0.2 1 + outlinecolor 0.1 0.1 0.1 0.5 + visible MENU_TRUE + decoration + } + + itemDef + { + name "OKCancel" + text "OK" + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + rect (W-((2*BORDER)+(2*BUTT_W))) (H-(BORDER+BUTT_H)) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .4 + forecolor 1 1 1 1 + backcolor 0 0 0 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + uiScript BuildAlienBuildable; + close tremulous_alienbuild + } + } + + itemDef + { + name "OKCancel" + text "Cancel" + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + rect (W-(BORDER+BUTT_W)) (H-(BORDER+BUTT_H)) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .4 + forecolor 1 1 1 1 + backcolor 0 0 0 1 + visible MENU_TRUE + action + { + play "sound/misc/menu3.wav"; + close tremulous_alienbuild + } + } + } +} diff --git a/assets/ui/tremulous_alienclass.menu b/assets/ui/tremulous_alienclass.menu new file mode 100755 index 0000000..441e27f --- /dev/null +++ b/assets/ui/tremulous_alienclass.menu @@ -0,0 +1,157 @@ +#include "ui/menudef.h" + +{ + +#define W 450 +#define H 250 +#define BORDER 10 + +#define LIST_W 140 +#define LIST_H (H-(2*BORDER)) +#define LIST_X BORDER +#define LIST_Y BORDER + +#define BUTT_H 25 +#define BUTT_W 45 + +#define INFO_W (W-((3*BORDER)+LIST_W)) +#define INFO_H (H-((3*BORDER)+BUTT_H)) +#define INFO_X ((2*BORDER)+LIST_W) +#define INFO_Y BORDER +#define INFO_TOFF 6 + + menuDef + { + name "tremulous_alienclass" + visible MENU_TRUE + fullscreen MENU_FALSE + outOfBoundsClick + rect (320-(W/2)) (240-(H/2)) W H + focusColor 1 .75 0 1 + style WINDOW_STYLE_FILLED + popup + onOpen { uiScript LoadAlienClasses; setFocus list } + + itemDef + { + name window + rect 0 0 W H + style WINDOW_STYLE_FILLED + backcolor 0 0 0 1 + visible MENU_TRUE + decoration + + border WINDOW_BORDER_FULL + borderSize 1.0 + borderColor 0.5 0.5 0.5 1 + } + + itemDef + { + name "list" + rect LIST_X LIST_Y LIST_W LIST_H + type ITEM_TYPE_LISTBOX + style WINDOW_STYLE_EMPTY + elementwidth 120 + elementheight 20 + textscale .33 + elementtype LISTBOX_TEXT + feeder FEEDER_TREMALIENCLASSES + border WINDOW_BORDER_FULL + bordercolor 0.5 0.5 0.5 0.5 + forecolor 1 1 1 1 + backcolor 0.2 0.2 0.2 1 + outlinecolor 0.1 0.1 0.1 0.5 + visible MENU_TRUE + doubleclick + { + play "sound/misc/menu1.wav"; + uiScript SpawnAsAlienClass; + close tremulous_alienclass + } + } + + itemDef + { + name infopane + ownerdraw UI_ACLASSINFOPANE + textstyle ITEM_TEXTSTYLE_NORMAL + style WINDOW_STYLE_EMPTY + rect INFO_X INFO_Y INFO_W INFO_H + textscale .33 + textalign ALIGN_LEFT + textvalign VALIGN_TOP + textalignx INFO_TOFF + textaligny INFO_TOFF + border WINDOW_BORDER_FULL + bordercolor 0.5 0.5 0.5 0.5 + forecolor 1 1 1 1 + backcolor 0.2 0.2 0.2 1 + outlinecolor 0.1 0.1 0.1 0.5 + visible MENU_TRUE + decoration + } + + itemDef + { + name "Back" + text "< Back" + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + rect ((2*BORDER)+LIST_W) (H-(BORDER+BUTT_H)) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .4 + forecolor 1 1 1 1 + backcolor .5 0 0 .25 + visible MENU_TRUE + action + { + play "sound/misc/menu4.wav"; + close tremulous_alienclass; + open tremulous_teamselect + } + } + + itemDef + { + name "OKCancel" + text "OK" + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + rect (W-((2*BORDER)+(2*BUTT_W))) (H-(BORDER+BUTT_H)) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .4 + forecolor 1 1 1 1 + backcolor .5 0 0 .25 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + uiScript SpawnAsAlienClass; + close tremulous_alienclass + } + } + + itemDef + { + name "OKCancel" + text "Cancel" + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + rect (W-(BORDER+BUTT_W)) (H-(BORDER+BUTT_H)) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .4 + forecolor 1 1 1 1 + backcolor .5 0 0 .25 + visible MENU_TRUE + action + { + play "sound/misc/menu3.wav"; + close tremulous_alienclass + } + } + } +} diff --git a/assets/ui/tremulous_aliendialogs.menu b/assets/ui/tremulous_aliendialogs.menu new file mode 100755 index 0000000..921d2c8 --- /dev/null +++ b/assets/ui/tremulous_aliendialogs.menu @@ -0,0 +1,97 @@ +#include "ui/menudef.h" + +{ + +#define W 280 +#define H 190 +#define BORDER 10 + +#define BUTT_H 25 +#define BUTT_W 45 + +#define INFO_W (W-(2*BORDER)) +#define INFO_H (H-((4*BORDER)+(2*BUTT_H))) +#define INFO_X BORDER +#define INFO_Y ((2*BORDER)+BUTT_H) + + menuDef + { + name "tremulous_alien_dialog" + visible MENU_FALSE + fullscreen MENU_FALSE + outOfBoundsClick + rect (320-(W/2)) (240-(H/2)) W H + focusColor 1 .75 0 1 + style WINDOW_STYLE_EMPTY + popup + + itemDef + { + name window + rect 0 0 W H + style WINDOW_STYLE_FILLED + backcolor 0 0 0 1 + visible MENU_TRUE + decoration + + border WINDOW_BORDER_FULL + borderSize 1.0 + borderColor 0.5 0.5 0.5 1 + } + + itemDef + { + name alien_dialog + text "Error" + type ITEM_TYPE_TEXT + textstyle ITEM_TEXTSTYLE_NORMAL + style WINDOW_STYLE_EMPTY + rect BORDER BORDER INFO_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .4 + forecolor 1 1 1 1 + backcolor .5 0 0 .25 + visible MENU_TRUE + decoration + } + + itemDef + { + name alien_dialog + type ITEM_TYPE_TEXT + textstyle ITEM_TEXTSTYLE_NORMAL + style WINDOW_STYLE_EMPTY + rect INFO_X INFO_Y INFO_W INFO_H + cvar "ui_dialog" + wrapped + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .33 + forecolor 1 1 1 1 + backcolor .5 0 0 .25 + visible MENU_TRUE + decoration + } + + itemDef + { + name alien_dialog + text "OK" + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + rect (W-(BORDER+BUTT_W)) (H-(BORDER+BUTT_H)) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .4 + forecolor 1 1 1 1 + backcolor .5 0 0 .25 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + close tremulous_alien_dialog + } + } + } +} diff --git a/assets/ui/tremulous_alienupgrade.menu b/assets/ui/tremulous_alienupgrade.menu new file mode 100755 index 0000000..2ef7bcb --- /dev/null +++ b/assets/ui/tremulous_alienupgrade.menu @@ -0,0 +1,136 @@ +#include "ui/menudef.h" + +{ + +#define W 450 +#define H 250 +#define BORDER 10 + +#define LIST_W 140 +#define LIST_H (H-(2*BORDER)) +#define LIST_X BORDER +#define LIST_Y BORDER + +#define BUTT_H 25 +#define BUTT_W 45 + +#define INFO_W (W-((3*BORDER)+LIST_W)) +#define INFO_H (H-((3*BORDER)+BUTT_H)) +#define INFO_X ((2*BORDER)+LIST_W) +#define INFO_Y BORDER +#define INFO_TOFF 6 + + menuDef + { + name "tremulous_alienupgrade" + visible MENU_TRUE + fullscreen MENU_FALSE + outOfBoundsClick + rect (320-(W/2)) (240-(H/2)) W H + focusColor 1 .75 0 1 + style WINDOW_STYLE_FILLED + popup + onOpen { uiScript LoadAlienUpgrades; setFocus list } + + itemDef + { + name window + rect 0 0 W H + style WINDOW_STYLE_FILLED + backcolor 0 0 0 1 + visible MENU_TRUE + decoration + + border WINDOW_BORDER_FULL + borderSize 1.0 + borderColor 0.5 0.5 0.5 1 + } + + itemDef + { + name "list" + rect LIST_X LIST_Y LIST_W LIST_H + type ITEM_TYPE_LISTBOX + style WINDOW_STYLE_EMPTY + elementwidth 120 + elementheight 20 + textscale .33 + elementtype LISTBOX_TEXT + feeder FEEDER_TREMALIENUPGRADE + border WINDOW_BORDER_FULL + bordercolor 0.5 0.5 0.5 0.5 + forecolor 1 1 1 1 + backcolor 0.2 0.2 0.2 1 + outlinecolor 0.1 0.1 0.1 0.5 + visible MENU_TRUE + doubleclick + { + play "sound/misc/menu1.wav"; + uiScript UpgradeToNewClass; + close tremulous_alienupgrade + } + } + + itemDef + { + name infopane + ownerdraw UI_AUPGRADEINFOPANE + textstyle ITEM_TEXTSTYLE_NORMAL + style WINDOW_STYLE_EMPTY + rect INFO_X INFO_Y INFO_W INFO_H + textscale .33 + textalign ALIGN_LEFT + textvalign VALIGN_TOP + textalignx INFO_TOFF + textaligny INFO_TOFF + border WINDOW_BORDER_FULL + bordercolor 0.5 0.5 0.5 0.5 + forecolor 1 1 1 1 + backcolor 0.2 0.2 0.2 1 + outlinecolor 0.1 0.1 0.1 0.5 + visible MENU_TRUE + decoration + } + + itemDef + { + name "OKCancel" + text "OK" + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + rect (W-((2*BORDER)+(2*BUTT_W))) (H-(BORDER+BUTT_H)) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .4 + forecolor 1 1 1 1 + backcolor .5 0 0 .25 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + uiScript UpgradeToNewClass; + close tremulous_alienupgrade + } + } + + itemDef + { + name "OKCancel" + text "Cancel" + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + rect (W-(BORDER+BUTT_W)) (H-(BORDER+BUTT_H)) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .4 + forecolor 1 1 1 1 + backcolor .5 0 0 .25 + visible MENU_TRUE + action + { + play "sound/misc/menu3.wav"; + close tremulous_alienupgrade + } + } + } +} diff --git a/assets/ui/tremulous_common_hud.h b/assets/ui/tremulous_common_hud.h new file mode 100755 index 0000000..662a2bc --- /dev/null +++ b/assets/ui/tremulous_common_hud.h @@ -0,0 +1,224 @@ +#define BORDER 10 + +#define STAT_W 45 +#define STAT_H 22 +#define STAT_X (W-(BORDER+STAT_W)) + +#define CONSOLE_W (W-((3*BORDER)+STAT_W)) +#define CONSOLE_H 180 +#define MAIN_W (W-(2*BORDER)) + +//CONSOLE +itemDef +{ + name "console" + rect BORDER BORDER CONSOLE_W CONSOLE_H + aspectBias ALIGN_LEFT + style WINDOW_STYLE_EMPTY + visible MENU_TRUE + decoration + forecolor 0.93 0.93 0.92 1 + textalign ALIGN_LEFT + textvalign VALIGN_TOP + textscale 0.35 + textstyle ITEM_TEXTSTYLE_SHADOWED + ownerdraw CG_CONSOLE +} + +//TUTORIAL +itemDef +{ + name "tutorial" + rect BORDER 275 MAIN_W 130 + aspectBias ALIGN_LEFT + style WINDOW_STYLE_EMPTY + visible MENU_TRUE + decoration + forecolor 1 1 1 0.35 + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + textscale 0.3 + textstyle ITEM_TEXTSTYLE_NORMAL + ownerdraw CG_TUTORIAL +} + +//FPS +itemDef +{ + name "fps" + rect STAT_X BORDER STAT_W STAT_H + aspectBias ALIGN_RIGHT + style WINDOW_STYLE_EMPTY + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 1 + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textscale 0.3 + textstyle ITEM_TEXTSTYLE_NORMAL + ownerdraw CG_FPS +} + +//TIMER +itemDef +{ + name "timer" + rect STAT_X ((2*BORDER)+STAT_H) STAT_W STAT_H + aspectBias ALIGN_RIGHT + style WINDOW_STYLE_EMPTY + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 1 + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textscale 0.3 + textstyle ITEM_TEXTSTYLE_NORMAL + ownerdraw CG_TIMER +} + +//LAGOMETER +itemDef +{ + name "lagometer" + rect STAT_X ((3*BORDER)+(2*STAT_H)) STAT_W STAT_H + aspectBias ALIGN_RIGHT + style WINDOW_STYLE_EMPTY + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 1 + textscale 0.3 + ownerdraw CG_LAGOMETER +} + +//SPEEDOMETER +itemDef +{ + name "speedometer" + rect (320-(STAT_W/2)) 350 STAT_W STAT_H + aspectBias ALIGN_CENTER + type ITEM_TYPE_OWNERDRAW + ownerdraw CG_SPEEDOMETER + style WINDOW_STYLE_EMPTY + visible MENU_TRUE + decoration + backColor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.2 + foreColor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.8 + textscale 0.3 +} + +//CLOCK +itemDef +{ + name "clock" + rect STAT_X ((4*BORDER)+(3*STAT_H)) STAT_W STAT_H + aspectBias ALIGN_RIGHT + style WINDOW_STYLE_EMPTY + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 1 + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textscale 0.3 + textstyle ITEM_TEXTSTYLE_NORMAL + ownerdraw CG_CLOCK +} + +//LOCATION +itemDef +{ + name "location" + rect (STAT_X-75) ((5*BORDER)+(4*STAT_H)) (STAT_W+75) STAT_H + aspectBias ALIGN_RIGHT + visible MENU_TRUE + decoration + forecolor 1 1 1 1 + textalign ALIGN_RIGHT + textscale 0.3 + ownerdraw CG_PLAYER_LOCATION +} + +//DEMO STATE +itemDef +{ + name "demoRecording" + rect (STAT_X+(STAT_W-32)) ((8*BORDER)+(4*STAT_H)) 32 32 + aspectBias ALIGN_RIGHT + style WINDOW_STYLE_EMPTY + visible MENU_TRUE + decoration + forecolor 1 0 0 1 + textscale 0.3 + ownerdraw CG_DEMO_RECORDING + background "ui/assets/neutral/circle.tga" +} +itemDef +{ + name "demoPlayback" + rect (STAT_X+(STAT_W-32)) ((8*BORDER)+(4*STAT_H)) 32 32 + aspectBias ALIGN_RIGHT + style WINDOW_STYLE_EMPTY + visible MENU_TRUE + decoration + forecolor 1 1 1 1 + textscale 0.3 + ownerdraw CG_DEMO_PLAYBACK + background "ui/assets/forwardarrow.tga" +} + +//SNAPSHOT +itemDef +{ + name "snapshot" + rect BORDER (H-(BORDER+STAT_H)) MAIN_W STAT_H + aspectBias ALIGN_LEFT + style WINDOW_STYLE_EMPTY + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 1 + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + textscale 0.4 + textstyle ITEM_TEXTSTYLE_NORMAL + ownerdraw CG_SNAPSHOT +} + +//PLAYER NAME +itemDef +{ + name "playername" + rect 200 275 240 25 + aspectBias ALIGN_CENTER + visible MENU_TRUE + decoration + textScale .5 + ownerdraw CG_PLAYER_CROSSHAIRNAMES + textstyle ITEM_TEXTSTYLE_SHADOWED +} + +//CROSSHAIR +itemDef +{ + name "crosshair" + visible MENU_TRUE + decoration + rect 320 240 0 0 + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B .35 + ownerdraw CG_PLAYER_CROSSHAIR +} + +//SPECTATOR TEXT +itemDef +{ + name "followtext" + rect 200 375 240 25 + foreColor 1 1 1 1 + aspectBias ALIGN_CENTER + textalign ALIGN_CENTER + textvalign VALIGN_TOP + visible MENU_TRUE + decoration + textScale .7 + textStyle ITEM_TEXTSTYLE_SHADOWED + ownerdraw CG_FOLLOW +} + diff --git a/assets/ui/tremulous_default_hud.menu b/assets/ui/tremulous_default_hud.menu new file mode 100755 index 0000000..8d1034b --- /dev/null +++ b/assets/ui/tremulous_default_hud.menu @@ -0,0 +1,37 @@ +#include "ui/menudef.h" + +{ + +#define W 640 +#define H 480 + + menuDef + { + name "default_hud" + fullScreen MENU_FALSE + visible MENU_TRUE + rect 0 0 W H + aspectBias ASPECT_NONE + +#define COMMON_HUD_R 1.0 +#define COMMON_HUD_G 1.0 +#define COMMON_HUD_B 1.0 +#include "ui/tremulous_common_hud.h" + + //SPECTATOR TEXT + itemDef + { + name "spectatortext" + text "SPECTATOR" + rect 200 415 240 25 + foreColor 1 1 1 1 + aspectBias ALIGN_CENTER + textalign ALIGN_CENTER + textvalign VALIGN_TOP + visible MENU_TRUE + decoration + textScale .7 + textStyle ITEM_TEXTSTYLE_SHADOWED + } + } +} diff --git a/assets/ui/tremulous_dialogs.menu b/assets/ui/tremulous_dialogs.menu new file mode 100755 index 0000000..63109dc --- /dev/null +++ b/assets/ui/tremulous_dialogs.menu @@ -0,0 +1,98 @@ +#include "ui/menudef.h" + +{ + +#define W 280 +#define H 190 +#define BORDER 10 + +#define BUTT_H 25 +#define BUTT_W 45 + +#define INFO_W (W-(2*BORDER)) +#define INFO_H (H-((4*BORDER)+(2*BUTT_H))) +#define INFO_X BORDER +#define INFO_Y ((2*BORDER)+BUTT_H) +#define INFO_TOFF 6 + + menuDef + { + name "tremulous_default_dialog" + visible MENU_FALSE + fullscreen MENU_FALSE + outOfBoundsClick + rect (320-(W/2)) (240-(H/2)) W H + focusColor 1 .75 0 1 + style WINDOW_STYLE_EMPTY + popup + + itemDef + { + name window + rect 0 0 W H + style WINDOW_STYLE_FILLED + backcolor 0 0 0 1 + visible MENU_TRUE + decoration + + border WINDOW_BORDER_FULL + borderSize 1.0 + borderColor 0.5 0.5 0.5 1 + } + + itemDef + { + name default_dialog + text "Error" + type ITEM_TYPE_TEXT + textstyle ITEM_TEXTSTYLE_NORMAL + style WINDOW_STYLE_EMPTY + rect BORDER BORDER INFO_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .4 + forecolor 1 1 1 1 + backcolor .5 0 0 .25 + visible MENU_TRUE + decoration + } + + itemDef + { + name default_dialog + textstyle ITEM_TEXTSTYLE_NORMAL + type ITEM_TYPE_TEXT + style WINDOW_STYLE_EMPTY + rect INFO_X INFO_Y INFO_W INFO_H + cvar "ui_dialog" + wrapped + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .33 + forecolor 1 1 1 1 + backcolor .5 0 0 .25 + visible MENU_TRUE + decoration + } + + itemDef + { + name default_dialog + text "OK" + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + rect (W-(BORDER+BUTT_W)) (H-(BORDER+BUTT_H)) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .4 + forecolor 1 1 1 1 + backcolor .5 0 0 .25 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + close tremulous_default_dialog + } + } + } +} diff --git a/assets/ui/tremulous_human_hud.menu b/assets/ui/tremulous_human_hud.menu new file mode 100755 index 0000000..f2b4ca9 --- /dev/null +++ b/assets/ui/tremulous_human_hud.menu @@ -0,0 +1,379 @@ +#include "ui/menudef.h" + +{ + +#define W 640 +#define H 480 + + menuDef + { + name "human_hud" + fullScreen MENU_FALSE + visible MENU_TRUE + rect 0 0 W H + aspectBias ASPECT_NONE + +#define COMMON_HUD_R 0.0 +#define COMMON_HUD_G 0.8 +#define COMMON_HUD_B 1.0 +#include "ui/tremulous_common_hud.h" + + ////////////////// + //STATIC OBJECTS// + ////////////////// + + //LEFT CIRCLE + itemDef + { + name "left-circle" + rect 35 417.5 25 25 + aspectBias ALIGN_LEFT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.25 + style WINDOW_STYLE_SHADER + background "ui/assets/neutral/circle.tga" + } + + //LEFT ARM + itemDef + { + name "left-arm" + rect 68.25 420 94.5 35 + aspectBias ALIGN_LEFT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.25 + style WINDOW_STYLE_SHADER + background "ui/assets/human/left-arm.tga" + } + + //CREDITS LABEL + itemDef + { + name "credits-label" + rect 508 403 7 7.5 + aspectBias ALIGN_RIGHT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.5 + style WINDOW_STYLE_SHADER + background "ui/assets/human/credits.tga" + } + + //RIGHT CIRCLE + itemDef + { + name "right-circle" + rect 580 417.5 25 25 + aspectBias ALIGN_RIGHT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.25 + style WINDOW_STYLE_SHADER + background "ui/assets/neutral/circle.tga" + } + + //RIGHT ARM + itemDef + { + name "right-arm" + rect 477.25 420 94.5 35 + aspectBias ALIGN_RIGHT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.25 + style WINDOW_STYLE_SHADER + background "ui/assets/human/right-arm.tga" + } + + //RIGHT CAP + itemDef + { + name "right-cap" + rect 500 400 80 15 + aspectBias ALIGN_RIGHT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.25 + style WINDOW_STYLE_SHADER + background "ui/assets/human/right-cap.tga" + } + + /////////////////// + //DYNAMIC OBJECTS// + /////////////////// + + //BOLT + itemDef + { + name "bolt" + rect 40 420 15 20 + aspectBias ALIGN_LEFT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.8 + backColor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.2 + background "ui/assets/human/bolt.tga" + ownerdraw CG_PLAYER_STAMINA_BOLT + } + + //CROSS + itemDef + { + name "cross" + rect 132.5 425 25 25 + aspectBias ALIGN_LEFT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.5 + ownerdraw CG_PLAYER_HEALTH_CROSS + } + + //STAMINA 1 + itemDef + { + name "stamina1" + rect 34.5 403.5 9 11.5 + aspectBias ALIGN_LEFT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.8 + backColor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.2 + background "ui/assets/human/stamina1.tga" + ownerdraw CG_PLAYER_STAMINA_1 + } + + //STAMINA 2 + itemDef + { + name "stamina2" + rect 24 410.75 11.5 10.5 + aspectBias ALIGN_LEFT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.8 + backColor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.2 + background "ui/assets/human/stamina2.tga" + ownerdraw CG_PLAYER_STAMINA_2 + } + + //STAMINA 3 + itemDef + { + name "stamina3" + rect 20.75 423.5 10.5 7 + aspectBias ALIGN_LEFT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.8 + backColor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.2 + background "ui/assets/human/stamina3.tga" + ownerdraw CG_PLAYER_STAMINA_3 + } + + //STAMINA 4 + itemDef + { + name "stamina4" + rect 21 402.5 54 55 + aspectBias ALIGN_LEFT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.8 + backColor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.2 + background "ui/assets/human/stamina4.tga" + ownerdraw CG_PLAYER_STAMINA_4 + } + + //RING + itemDef + { + name "ring" + //rect 20 402.5 55 55 // Guide for Stamina alignment + rect 565 402.5 55 55 + aspectBias ALIGN_RIGHT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.5 + backColor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.2 + background "ui/assets/human/ring.tga" + ownerdraw CG_PLAYER_CLIPS_RING + } + + //CREDITS + itemDef + { + name "credits" + rect 515 402 45 11.25 + aspectBias ALIGN_RIGHT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.5 + ownerdraw CG_PLAYER_CREDITS_VALUE + } + + //HEALTH + itemDef + { + name "health" + rect 67 430 60 15 + aspectBias ALIGN_LEFT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B .5 + ownerdraw CG_PLAYER_HEALTH + } + + //WEAPON ICON + itemDef + { + name "weapon" + rect 482.5 425 25 25 + aspectBias ALIGN_RIGHT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.5 + ownerdraw CG_PLAYER_WEAPONICON + } + + //WEAPON SELECT TEXT + itemDef + { + name "selecttext" + rect 200 300 240 25 + aspectBias ALIGN_CENTER + visible MENU_TRUE + decoration + textScale .5 + ownerdraw CG_PLAYER_SELECTTEXT + textstyle ITEM_TEXTSTYLE_SHADOWED + } + + //AMMO + itemDef + { + name "ammo" + rect 507 430 53 15 + aspectBias ALIGN_RIGHT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B .5 + ownerdraw CG_PLAYER_AMMO_VALUE + } + + //CLIPS + itemDef + { + name "clips" + rect 538 423 60 15 + aspectBias ALIGN_RIGHT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B .5 + ownerdraw CG_PLAYER_CLIPS_VALUE + } + + //BUILD TIMER + itemDef + { + name "buildtimer" + rect 580 417.5 25 25 + aspectBias ALIGN_RIGHT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B .5 + ownerdraw CG_PLAYER_BUILD_TIMER + } + + //USABLE + itemDef + { + name "usable" + rect 307.5 380 25 25 + aspectBias ALIGN_CENTER + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B .5 + background "ui/assets/neutral/use.tga" + ownerdraw CG_PLAYER_USABLE_BUILDABLE + } + + //SCANNER + itemDef + { + name "scanner" + rect 164 340 312 72 + aspectBias ALIGN_CENTER + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B .5 + background "ui/assets/human/scanner.tga" + ownerdraw CG_PLAYER_HUMAN_SCANNER + } + + //INVENTORY + itemDef + { + name "inventory" + rect 182.5 425 275 25 + aspectBias ALIGN_CENTER + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.5 + ownerdraw CG_PLAYER_SELECT + } + + //CHARGE BAR + itemDef + { + name "charge" + rect 510 384 56 8 + aspectBias ALIGN_RIGHT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.5 + ownerdraw CG_PLAYER_CHARGE_BAR + background "ui/assets/neutral/charge_cap_h.tga" + } + + //CHARGE BAR BG + itemDef + { + name "chargebg" + rect 506 380 64 16 + aspectBias ALIGN_RIGHT + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.25 + ownerdraw CG_PLAYER_CHARGE_BAR_BG + background "ui/assets/neutral/charge_bg_h.tga" + } + + //SELECTED + itemDef + { + name "selected" + rect 306 424 27 27 + aspectBias ALIGN_CENTER + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.25 + style WINDOW_STYLE_SHADER + background "ui/assets/neutral/selected.tga" + } + + //TEAM OVERLAY + itemDef + { + name "teamoverlay" + rect BORDER 175 200 128 + style WINDOW_STYLE_EMPTY + visible MENU_TRUE + decoration + forecolor COMMON_HUD_R COMMON_HUD_G COMMON_HUD_B 0.75 + textscale 0.85 + ownerdraw CG_TEAMOVERLAY + } + } +} diff --git a/assets/ui/tremulous_humanarmoury.menu b/assets/ui/tremulous_humanarmoury.menu new file mode 100755 index 0000000..2df829f --- /dev/null +++ b/assets/ui/tremulous_humanarmoury.menu @@ -0,0 +1,189 @@ +#include "ui/menudef.h" + +{ + +#define W 550 +#define H 250 +#define BORDER 10 +#define LIST_W 140 +#define LIST_H (H-(2*BORDER)) +#define LIST_LX BORDER +#define LIST_LY BORDER +#define LIST_RX (W-(BORDER+LIST_W)) +#define LIST_RY BORDER + +#define BUTT_H 25 +#define BUTT_Y (H-(BORDER+BUTT_H)) + +#define INFO_W (W-((4*BORDER)+(2*LIST_W))) +#define INFO_H (H-((3*BORDER)+BUTT_H)) +#define INFO_X ((2*BORDER)+LIST_W) +#define INFO_Y BORDER +#define INFO_TOFF 6 + +#define BUTT_X INFO_X +#define BUTT_W (INFO_W/3) + + menuDef + { + name "tremulous_humanarmoury" + visible MENU_FALSE + fullscreen MENU_FALSE + outOfBoundsClick + rect (320-(W/2)) (240-(H/2)) W H + focusColor 1 .75 0 1 + style WINDOW_STYLE_FILLED + popup + onOpen + { + uiScript LoadHumanArmouryBuys; + uiScript LoadHumanArmourySells; + setFocus list + } + + itemDef + { + name window + rect 0 0 W H + style WINDOW_STYLE_FILLED + backcolor 0 0 0 1 + visible MENU_TRUE + decoration + + border WINDOW_BORDER_FULL + borderSize 1.0 + borderColor 0.5 0.5 0.5 1 + } + + itemDef + { + name "buylist" + rect LIST_LX LIST_LY LIST_W LIST_H + type ITEM_TYPE_LISTBOX + style WINDOW_STYLE_EMPTY + elementwidth 120 + elementheight 20 + textscale .33 + elementtype LISTBOX_TEXT + feeder FEEDER_TREMHUMANARMOURYBUY + border WINDOW_BORDER_FULL + bordercolor 0.5 0.5 0.5 0.5 + forecolor 1 1 1 1 + backcolor 0.2 0.2 0.2 1 + outlinecolor 0.1 0.1 0.1 0.5 + visible MENU_TRUE + resetonfeederchange + doubleclick + { + play "sound/misc/menu1.wav"; + uiScript BuyFromArmoury; + } + } + + itemDef + { + name "selllist" + rect LIST_RX LIST_RY LIST_W LIST_H + type ITEM_TYPE_LISTBOX + style WINDOW_STYLE_EMPTY + elementwidth 120 + elementheight 20 + textscale .33 + elementtype LISTBOX_TEXT + feeder FEEDER_TREMHUMANARMOURYSELL + border WINDOW_BORDER_FULL + bordercolor 0.5 0.5 0.5 0.5 + forecolor 1 1 1 1 + backcolor 0.2 0.2 0.2 1 + outlinecolor 0.1 0.1 0.1 0.5 + visible MENU_TRUE + resetonfeederchange + doubleclick + { + play "sound/misc/menu1.wav"; + uiScript SellToArmoury; + } + } + + itemDef + { + name infopane + ownerdraw UI_HBUYINFOPANE + textstyle ITEM_TEXTSTYLE_NORMAL + style WINDOW_STYLE_EMPTY + rect INFO_X INFO_Y INFO_W INFO_H + textscale .33 + textalign ALIGN_LEFT + textvalign VALIGN_TOP + textalignx INFO_TOFF + textaligny INFO_TOFF + border WINDOW_BORDER_FULL + bordercolor 0.5 0.5 0.5 0.5 + forecolor 1 1 1 1 + backcolor 0.2 0.2 0.2 1 + outlinecolor 0.1 0.1 0.1 0.5 + visible MENU_TRUE + decoration + } + + itemDef + { + name "Buy" + text "Buy >" + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + rect BUTT_X BUTT_Y BUTT_W BUTT_H + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + textscale .4 + forecolor 1 1 1 1 + backcolor .5 0 0 .25 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + uiScript BuyFromArmoury; + } + } + + itemDef + { + name "Close" + text "Close" + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + rect (BUTT_X+BUTT_W) BUTT_Y BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .4 + forecolor 1 1 1 1 + backcolor .5 0 0 .25 + visible MENU_TRUE + action + { + play "sound/misc/menu4.wav"; + close tremulous_humanarmoury + } + } + + itemDef + { + name "Sell" + text "< Sell" + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + rect (BUTT_X+(2*BUTT_W)) BUTT_Y BUTT_W BUTT_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textscale .4 + forecolor 1 1 1 1 + backcolor .5 0 0 .25 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + uiScript SellToArmoury; + } + } + } +} diff --git a/assets/ui/tremulous_humanbuild.menu b/assets/ui/tremulous_humanbuild.menu new file mode 100755 index 0000000..572957b --- /dev/null +++ b/assets/ui/tremulous_humanbuild.menu @@ -0,0 +1,135 @@ +#include "ui/menudef.h" + +{ + +#define W 450 +#define H 250 +#define BORDER 10 + +#define LIST_W 140 +#define LIST_H (H-(2*BORDER)) +#define LIST_X BORDER +#define LIST_Y BORDER + +#define BUTT_H 25 +#define BUTT_W 45 + +#define INFO_W (W-((3*BORDER)+LIST_W)) +#define INFO_H (H-((3*BORDER)+BUTT_H)) +#define INFO_X ((2*BORDER)+LIST_W) +#define INFO_Y BORDER +#define INFO_TOFF 6 + + menuDef + { + name "tremulous_humanbuild" + visible MENU_FALSE + fullscreen MENU_FALSE + outOfBoundsClick + rect (320-(W/2)) (240-(H/2)) W H + focusColor 1 .75 0 1 + style WINDOW_STYLE_FILLED + popup + onOpen { uiScript LoadHumanBuilds; setFocus list } + + itemDef + { + name window + rect 0 0 W H + style WINDOW_STYLE_FILLED + backcolor 0 0 0 1 + visible MENU_TRUE + decoration + + border WINDOW_BORDER_FULL + borderSize 1.0 + borderColor 0.5 0.5 0.5 1 + } + + itemDef + { + name "list" + rect LIST_X LIST_Y LIST_W LIST_H + type ITEM_TYPE_LISTBOX + style WINDOW_STYLE_EMPTY + elementwidth 120 + elementheight 20 + textscale .33 + elementtype LISTBOX_TEXT + feeder FEEDER_TREMHUMANBUILD + border WINDOW_BORDER_FULL + bordercolor 0.5 0.5 0.5 0.5 + forecolor 1 1 1 1 + backcolor 0.2 0.2 0.2 1 + outlinecolor 0.1 0.1 0.1 0.5 + visible MENU_TRUE + doubleclick + { + play "sound/misc/menu1.wav"; + uiScript BuildHumanBuildable; + close tremulous_humanbuild + } + } + + itemDef + { + name infopane + ownerdraw UI_HBUILDINFOPANE + textstyle ITEM_TEXTSTYLE_NORMAL + style WINDOW_STYLE_EMPTY + rect INFO_X INFO_Y INFO_W INFO_H + textscale .33 + textalign ALIGN_LEFT + textvalign VALIGN_TOP + textalignx INFO_TOFF + textaligny INFO_TOFF + border WINDOW_BORDER_FULL + bordercolor 0.5 0.5 0.5 0.5 + forecolor 1 1 1 1 + backcolor 0.2 0.2 0.2 1 + visible MENU_TRUE + decoration + } + + itemDef + { + name "OKCancel" + text "OK" + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + rect (W-((2*BORDER)+(2*BUTT_W))) (H-(BORDER+BUTT_H)) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .4 + forecolor 1 1 1 1 + backcolor .5 0 0 .25 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + uiScript BuildHumanBuildable; + close tremulous_humanbuild + } + } + + itemDef + { + name "OKCancel" + text "Cancel" + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + rect (W-(BORDER+BUTT_W)) (H-(BORDER+BUTT_H)) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .4 + forecolor 1 1 1 1 + backcolor .5 0 0 .25 + visible MENU_TRUE + action + { + play "sound/misc/menu3.wav"; + close tremulous_humanbuild + } + } + } +} diff --git a/assets/ui/tremulous_humandialogs.menu b/assets/ui/tremulous_humandialogs.menu new file mode 100755 index 0000000..96ba08a --- /dev/null +++ b/assets/ui/tremulous_humandialogs.menu @@ -0,0 +1,98 @@ +#include "ui/menudef.h" + +{ + +#define W 280 +#define H 190 +#define BORDER 10 + +#define BUTT_H 25 +#define BUTT_W 45 + +#define INFO_W (W-(2*BORDER)) +#define INFO_H (H-((4*BORDER)+(2*BUTT_H))) +#define INFO_X BORDER +#define INFO_Y ((2*BORDER)+BUTT_H) +#define INFO_TOFF 6 + + menuDef + { + name "tremulous_human_dialog" + visible MENU_FALSE + fullscreen MENU_FALSE + outOfBoundsClick + rect (320-(W/2)) (240-(H/2)) W H + focusColor 1 .75 0 1 + style WINDOW_STYLE_EMPTY + popup + + itemDef + { + name window + rect 0 0 W H + style WINDOW_STYLE_FILLED + backcolor 0 0 0 1 + visible MENU_TRUE + decoration + + border WINDOW_BORDER_FULL + borderSize 1.0 + borderColor 0.5 0.5 0.5 1 + } + + itemDef + { + name human_dialog + text "Error" + type ITEM_TYPE_TEXT + textstyle ITEM_TEXTSTYLE_NORMAL + style WINDOW_STYLE_EMPTY + rect BORDER BORDER INFO_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .4 + forecolor 1 1 1 1 + backcolor .5 0 0 .25 + visible MENU_TRUE + decoration + } + + itemDef + { + name human_dialog + type ITEM_TYPE_TEXT + textstyle ITEM_TEXTSTYLE_NORMAL + style WINDOW_STYLE_EMPTY + rect INFO_X INFO_Y INFO_W INFO_H + cvar "ui_dialog" + wrapped + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .33 + forecolor 1 1 1 1 + backcolor .5 0 0 .25 + visible MENU_TRUE + decoration + } + + itemDef + { + name human_dialog + text "OK" + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + rect (W-(BORDER+BUTT_W)) (H-(BORDER+BUTT_H)) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .4 + forecolor 1 1 1 1 + backcolor .5 0 0 .25 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + close tremulous_human_dialog + } + } + } +} diff --git a/assets/ui/tremulous_humanitem.menu b/assets/ui/tremulous_humanitem.menu new file mode 100755 index 0000000..551334b --- /dev/null +++ b/assets/ui/tremulous_humanitem.menu @@ -0,0 +1,157 @@ +#include "ui/menudef.h" + +{ + +#define W 450 +#define H 250 +#define BORDER 10 + +#define LIST_W 140 +#define LIST_H (H-(2*BORDER)) +#define LIST_X BORDER +#define LIST_Y BORDER + +#define BUTT_H 25 +#define BUTT_W 45 + +#define INFO_W (W-((3*BORDER)+LIST_W)) +#define INFO_H (H-((3*BORDER)+BUTT_H)) +#define INFO_X ((2*BORDER)+LIST_W) +#define INFO_Y BORDER +#define INFO_TOFF 6 + + menuDef + { + name "tremulous_humanitem" + visible MENU_FALSE + fullscreen MENU_FALSE + outOfBoundsClick + rect (320-(W/2)) (240-(H/2)) W H + focusColor 1 .75 0 1 + style WINDOW_STYLE_FILLED + popup + onOpen { uiScript LoadHumanItems; setFocus list } + + itemDef + { + name window + rect 0 0 W H + style WINDOW_STYLE_FILLED + backcolor 0 0 0 1 + visible MENU_TRUE + decoration + + border WINDOW_BORDER_FULL + borderSize 1.0 + borderColor 0.5 0.5 0.5 1 + } + + itemDef + { + name "list" + rect LIST_X LIST_Y LIST_W LIST_H + type ITEM_TYPE_LISTBOX + style WINDOW_STYLE_EMPTY + elementwidth 120 + elementheight 20 + textscale .33 + elementtype LISTBOX_TEXT + feeder FEEDER_TREMHUMANITEMS + border WINDOW_BORDER_FULL + bordercolor 0.5 0.5 0.5 0.5 + forecolor 1 1 1 1 + backcolor 0.2 0.2 0.2 1 + outlinecolor 0.1 0.1 0.1 0.5 + visible MENU_TRUE + doubleclick + { + play "sound/misc/menu1.wav"; + uiScript SpawnWithHumanItem; + close tremulous_humanitem + } + } + + itemDef + { + name infopane + ownerdraw UI_HITEMINFOPANE + textstyle ITEM_TEXTSTYLE_NORMAL + style WINDOW_STYLE_EMPTY + rect INFO_X INFO_Y INFO_W INFO_H + textscale .33 + textalign ALIGN_LEFT + textvalign VALIGN_TOP + textalignx INFO_TOFF + textaligny INFO_TOFF + border WINDOW_BORDER_FULL + bordercolor 0.5 0.5 0.5 0.5 + forecolor 1 1 1 1 + backcolor 0.2 0.2 0.2 1 + outlinecolor 0.1 0.1 0.1 0.5 + visible MENU_TRUE + decoration + } + + itemDef + { + name "Back" + text "< Back" + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + rect ((2*BORDER)+LIST_W) (H-(BORDER+BUTT_H)) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .4 + forecolor 1 1 1 1 + backcolor .5 0 0 .25 + visible MENU_TRUE + action + { + play "sound/misc/menu4.wav"; + close tremulous_humanitem; + open tremulous_teamselect + } + } + + itemDef + { + name "OKCancel" + text "OK" + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + rect (W-((2*BORDER)+(2*BUTT_W))) (H-(BORDER+BUTT_H)) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .4 + forecolor 1 1 1 1 + backcolor .5 0 0 .25 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + uiScript SpawnWithHumanItem; + close tremulous_humanitem + } + } + + itemDef + { + name "OKCancel" + text "Cancel" + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + rect (W-(BORDER+BUTT_W)) (H-(BORDER+BUTT_H)) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .4 + forecolor 1 1 1 1 + backcolor .5 0 0 .25 + visible MENU_TRUE + action + { + play "sound/misc/menu3.wav"; + close tremulous_humanitem + } + } + } +} diff --git a/assets/ui/tremulous_teamselect.menu b/assets/ui/tremulous_teamselect.menu new file mode 100755 index 0000000..7051274 --- /dev/null +++ b/assets/ui/tremulous_teamselect.menu @@ -0,0 +1,136 @@ +#include "ui/menudef.h" + +{ + +#define W 450 +#define H 250 +#define BORDER 10 + +#define LIST_W 140 +#define LIST_H (H-(2*BORDER)) +#define LIST_X BORDER +#define LIST_Y BORDER + +#define BUTT_H 25 +#define BUTT_W 45 + +#define INFO_W (W-((3*BORDER)+LIST_W)) +#define INFO_H (H-((3*BORDER)+BUTT_H)) +#define INFO_X ((2*BORDER)+LIST_W) +#define INFO_Y BORDER +#define INFO_TOFF 6 + + menuDef + { + name "tremulous_teamselect" + visible MENU_FALSE + fullscreen MENU_FALSE + outOfBoundsClick + rect (320-(W/2)) (240-(H/2)) W H + focusColor 1 .75 0 1 + style WINDOW_STYLE_FILLED + popup + onOpen { uiScript LoadTeams; setFocus list } + + itemDef + { + name window + rect 0 0 W H + style WINDOW_STYLE_FILLED + backcolor 0 0 0 1 + visible MENU_TRUE + decoration + + border WINDOW_BORDER_FULL + borderSize 1.0 + borderColor 0.5 0.5 0.5 1 + } + + itemDef + { + name "list" + rect LIST_X LIST_Y LIST_W LIST_H + type ITEM_TYPE_LISTBOX + style WINDOW_STYLE_EMPTY + elementwidth 120 + elementheight 20 + textscale .33 + elementtype LISTBOX_TEXT + feeder FEEDER_TREMTEAMS + border WINDOW_BORDER_FULL + bordercolor 0.5 0.5 0.5 0.5 + forecolor 1 1 1 1 + backcolor 0.2 0.2 0.2 1 + outlinecolor 0.1 0.1 0.1 0.5 + visible MENU_TRUE + doubleclick + { + play "sound/misc/menu1.wav"; + uiScript JoinTeam; + close tremulous_teamselect + } + } + + itemDef + { + name infopane + ownerdraw UI_TEAMINFOPANE + textstyle ITEM_TEXTSTYLE_NORMAL + style WINDOW_STYLE_EMPTY + rect INFO_X INFO_Y INFO_W INFO_H + textscale .33 + textalign ALIGN_LEFT + textvalign VALIGN_TOP + textalignx INFO_TOFF + textaligny INFO_TOFF + border WINDOW_BORDER_FULL + bordercolor 0.5 0.5 0.5 0.5 + forecolor 1 1 1 1 + backcolor 0.2 0.2 0.2 1 + outlinecolor 0.1 0.1 0.1 0.5 + visible MENU_TRUE + decoration + } + + itemDef + { + name "OKCancel" + text "OK" + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + rect (W-((2*BORDER)+(2*BUTT_W))) (H-(BORDER+BUTT_H)) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .4 + forecolor 1 1 1 1 + backcolor .5 0 0 .25 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + uiScript JoinTeam; + close tremulous_teamselect + } + } + + itemDef + { + name "OKCancel" + text "Cancel" + type ITEM_TYPE_BUTTON + style WINDOW_STYLE_EMPTY + rect (W-(BORDER+BUTT_W)) (H-(BORDER+BUTT_H)) BUTT_W BUTT_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale .4 + forecolor 1 1 1 1 + backcolor .5 0 0 .25 + visible MENU_TRUE + action + { + play "sound/misc/menu3.wav"; + close tremulous_teamselect + } + } + } +} diff --git a/cross-make-mingw.sh b/cross-make-mingw.sh new file mode 100755 index 0000000..604ced1 --- /dev/null +++ b/cross-make-mingw.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +export CC=i586-mingw32msvc-gcc +export WINDRES=i586-mingw32msvc-windres +export PLATFORM=mingw32 +if [ !$ARCH ] +then +export ARCH=x86 +fi +exec make $* diff --git a/make-macosx-ub.sh b/make-macosx-ub.sh new file mode 100755 index 0000000..4f0031b --- /dev/null +++ b/make-macosx-ub.sh @@ -0,0 +1,170 @@ +#!/bin/sh +APPBUNDLE=Tremulous.app +BINARY=Tremulous.ub +DEDBIN=Tremded.ub +PKGINFO=APPLTREM +ICNS=misc/Tremulous.icns +DESTDIR=build/release-darwin-ub +BASEDIR=base + +BIN_OBJ=" + build/release-darwin-ppc/tremulous.ppc + build/release-darwin-x86/tremulous.x86 +" +BIN_DEDOBJ=" + build/release-darwin-ppc/tremded.ppc + build/release-darwin-x86/tremded.x86 +" +BASE_OBJ=" + build/release-darwin-ppc/$BASEDIR/cgameppc.dylib + build/release-darwin-x86/$BASEDIR/cgamex86.dylib + build/release-darwin-ppc/$BASEDIR/uippc.dylib + build/release-darwin-x86/$BASEDIR/uix86.dylib + build/release-darwin-ppc/$BASEDIR/gameppc.dylib + build/release-darwin-x86/$BASEDIR/gamex86.dylib +" + +cd `dirname $0` +if [ ! -f Makefile ]; then + echo "This script must be run from the Tremulous build directory"; + exit 1 +fi + +Q3_VERSION=`grep '^VERSION=' Makefile | sed -e 's/.*=\(.*\)/\1/'` + +# We only care if we're >= 10.4, not if we're specifically Tiger. +# "8" is the Darwin major kernel version. +TIGERHOST=`uname -r |perl -w -p -e 's/\A(\d+)\..*\Z/$1/; $_ = (($_ >= 8) ? "1" : "0");'` + +# we want to use the oldest available SDK for max compatiblity +unset PPC_SDK +unset PPC_CFLAGS +unset PPC_LDFLAGS +unset X86_SDK +unset X86_CFLAGS +unset X86_LDFLAGS +if [ -d /Developer/SDKs/MacOSX10.5.sdk ]; then + PPC_SDK=/Developer/SDKs/MacOSX10.5.sdk + PPC_CFLAGS="-arch ppc -isysroot /Developer/SDKs/MacOSX10.5.sdk \ + -DMAC_OS_X_VERSION_MIN_REQUIRED=1050" + PPC_LDFLAGS=" -mmacosx-version-min=10.5" + + X86_SDK=/Developer/SDKs/MacOSX10.5.sdk + X86_CFLAGS="-arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk \ + -DMAC_OS_X_VERSION_MIN_REQUIRED=1050" + X86_LDFLAGS=" -mmacosx-version-min=10.5" +fi + +if [ -d /Developer/SDKs/MacOSX10.4u.sdk ]; then + PPC_SDK=/Developer/SDKs/MacOSX10.4u.sdk + PPC_CFLAGS="-arch ppc -isysroot /Developer/SDKs/MacOSX10.4u.sdk \ + -DMAC_OS_X_VERSION_MIN_REQUIRED=1040" + PPC_LDFLAGS=" -mmacosx-version-min=10.4" + + X86_SDK=/Developer/SDKs/MacOSX10.4u.sdk + X86_CFLAGS="-arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk \ + -DMAC_OS_X_VERSION_MIN_REQUIRED=1040" + X86_LDFLAGS=" -mmacosx-version-min=10.4" +fi + +if [ -d /Developer/SDKs/MacOSX10.3.9.sdk ] && [ $TIGERHOST ]; then + PPC_SDK=/Developer/SDKs/MacOSX10.3.9.sdk + PPC_CFLAGS="-arch ppc -isysroot /Developer/SDKs/MacOSX10.3.9.sdk \ + -DMAC_OS_X_VERSION_MIN_REQUIRED=1030" + PPC_LDFLAGS=" -mmacosx-version-min=10.3" +fi + +if [ -z $PPC_SDK ] || [ -z $X86_SDK ]; then + echo "\ +ERROR: This script is for building a Universal Binary. You cannot build + for a different architecture unless you have the proper Mac OS X SDKs + installed. If you just want to to compile for your own system run + 'make' instead of this script." + exit 1 +fi + +echo "Building PPC Client/Dedicated Server against \"$PPC_SDK\"" +echo "Building X86 Client/Dedicated Server against \"$X86_SDK\"" +if [ "$PPC_SDK" != "/Developer/SDKs/MacOSX10.3.9.sdk" ] || \ + [ "$X86_SDK" != "/Developer/SDKs/MacOSX10.4u.sdk" ]; then + echo "\ +WARNING: in order to build a binary with maximum compatibility you must + build on Mac OS X 10.4 using Xcode 2.3 or 2.5 and have the + MacOSX10.3.9, and MacOSX10.4u SDKs installed from the Xcode + install disk Packages folder." +fi +sleep 3 + +if [ ! -d $DESTDIR ]; then + mkdir -p $DESTDIR +fi + +# For parallel make on multicore boxes... +NCPU=`sysctl -n hw.ncpu` + +# ppc client and server +if [ -d build/release-release-ppc ]; then + rm -r build/release-darwin-ppc +fi +(ARCH=ppc CFLAGS=$PPC_CFLAGS LDFLAGS=$PPC_LDFLAGS make -j$NCPU) || exit 1; + +# intel client and server +if [ -d build/release-darwin-x86 ]; then + rm -r build/release-darwin-x86 +fi +(ARCH=x86 CFLAGS=$X86_CFLAGS LDFLAGS=$X86_LDFLAGS make -j$NCPU) || exit 1; + +echo "Creating .app bundle $DESTDIR/$APPBUNDLE" +if [ ! -d $DESTDIR/$APPBUNDLE/Contents/MacOS/$BASEDIR ]; then + mkdir -p $DESTDIR/$APPBUNDLE/Contents/MacOS/$BASEDIR || exit 1; +fi +if [ ! -d $DESTDIR/$APPBUNDLE/Contents/MacOS/$MPACKDIR ]; then + mkdir -p $DESTDIR/$APPBUNDLE/Contents/MacOS/$MPACKDIR || exit 1; +fi +if [ ! -d $DESTDIR/$APPBUNDLE/Contents/Resources ]; then + mkdir -p $DESTDIR/$APPBUNDLE/Contents/Resources +fi +cp $ICNS $DESTDIR/$APPBUNDLE/Contents/Resources/Tremulous.icns || exit 1; +echo $PKGINFO > $DESTDIR/$APPBUNDLE/Contents/PkgInfo +echo " + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + $BINARY + CFBundleGetInfoString + $Q3_VERSION + CFBundleIconFile + Tremulous.icns + CFBundleIdentifier + net.tremulous + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Tremulous + CFBundlePackageType + APPL + CFBundleShortVersionString + $Q3_VERSION + CFBundleSignature + $PKGINFO + CFBundleVersion + $Q3_VERSION + NSExtensions + + NSPrincipalClass + NSApplication + + + " > $DESTDIR/$APPBUNDLE/Contents/Info.plist + +lipo -create -o $DESTDIR/$APPBUNDLE/Contents/MacOS/$BINARY $BIN_OBJ +lipo -create -o $DESTDIR/$APPBUNDLE/Contents/MacOS/$DEDBIN $BIN_DEDOBJ +cp $BASE_OBJ $DESTDIR/$APPBUNDLE/Contents/MacOS/$BASEDIR/ +cp src/libs/macosx/*.dylib $DESTDIR/$APPBUNDLE/Contents/MacOS/ + diff --git a/misc/SLA-dmg.sh b/misc/SLA-dmg.sh new file mode 100755 index 0000000..af268f3 --- /dev/null +++ b/misc/SLA-dmg.sh @@ -0,0 +1,73 @@ +#!/bin/bash +# +# This script appends the text from Q3A_EULA.txt to a .dmg as a SLA resource +# +# usage is './SLA-dmg.sh /path/to/Q3A_EULA.txt /path/to/ioquake3.dmg' +# + +if [ "x$1" = "x" ] || [ "x$2" = "x" ]; then + echo "usage: ./SLA-dmg.sh /path/to/Q3A_EULA.txt /path/to/ioquake3.dmg" + exit 1; +fi + +if [ ! -r $1 ]; then + echo "$1 is not a readable Q3A_EULA.txt file" + exit 1; +fi +if [ ! -w $2 ]; then + echo "$2 is not writable .dmg file" + exit 1; +fi +touch tmp.r +if [ ! -w tmp.r ]; then + echo "Could not create temporary file tmp.r for writing" + exit 1; +fi + +echo " +data 'LPic' (5000) { + \$\"0002 0011 0003 0001 0000 0000 0002 0000\" + \$\"0008 0003 0000 0001 0004 0000 0004 0005\" + \$\"0000 000E 0006 0001 0005 0007 0000 0007\" + \$\"0008 0000 0047 0009 0000 0034 000A 0001\" + \$\"0035 000B 0001 0020 000C 0000 0011 000D\" + \$\"0000 005B 0004 0000 0033 000F 0001 000C\" + \$\"0010 0000 000B 000E 0000\" +}; + +data 'TEXT' (5002, \"English\") { +" > tmp.r + +sed -e 's/"/\\"/g' -e 's/\(.*\)$/"\1\\n"/g' $1 >> tmp.r + +echo " +}; + +resource 'STR#' (5002, \"English\") { + { + \"English\", + \"Agree\", + \"Disagree\", + \"Print\", + \"Save...\", + \"IMPORTANT - Read this License Agreement carefully before clicking on \" + \"the \\\"Agree\\\" button. By clicking on the \\\"Agree\\\" button, you agree \" + \"to be bound by the terms of the License Agreement.\", + \"Software License Agreement\", + \"This text cannot be saved. This disk may be full or locked, or the \" + \"file may be locked.\", + \"Unable to print. Make sure you have selected a printer.\" + } +}; +" >> tmp.r + +hdiutil convert -format UDCO -o tmp.dmg $2 || exit 1 +hdiutil unflatten tmp.dmg || exit 1 +/Developer/Tools/Rez /Developer/Headers/FlatCarbon/*.r tmp.r -a -o tmp.dmg \ + || exit 1 +hdiutil flatten tmp.dmg || exit 1 +hdiutil internet-enable -yes tmp.dmg || exit 1 +mv tmp.dmg $2 || (echo "Could not copy tmp.dmg to $2" && exit 1) +rm tmp.dmg +rm tmp.r +echo "SLA $1 successfully added to $2" diff --git a/misc/Tremulous.icns b/misc/Tremulous.icns new file mode 100755 index 0000000..c4106ac Binary files /dev/null and b/misc/Tremulous.icns differ diff --git a/misc/entities.def b/misc/entities.def new file mode 100755 index 0000000..e61ce16 --- /dev/null +++ b/misc/entities.def @@ -0,0 +1,1707 @@ +// Tremulous entity definition file for GTKRadiant +// Tim Angus 08/09/03 + +// Based on entities.def from GTKRadiant 1.3.11 which in turn is based on... +// Based on draft by Suicide 20 7.30.99 and inolen 9-3-99 +// Upgraded by Eutectic: eutectic@ritualistic.com +// (visible models added by raYGunn - paths provided by Suicide 20) +// (terrain information added to func_group entity by Paul Jaquays) +// Q3Map2 entitys/keys added by ydnar +// Version: 1.5 +// Last updated: 2003-06-09 + +//============================================================================= + +LIGHT ENTITY + +//============================================================================= + + +/*QUAKED light (.65 .65 1) (-8 -8 -8) (8 8 8) LINEAR NOANGLE UNUSED1 UNUSED2 NOGRIDLIGHT +Non-displayed point light source. The -pointscale and -scale arguments to Q3Map2 affect the brightness of these lights. The -skyscale argument affects brightness of entity sun lights. + +-------- KEYS -------- +_light OR light: overrides the default 300 intensity. + +_color: weighted RGB value of light color (default white - 1.0 1.0 1.0). + +target: Lights pointed at a target will be spotlights. + +radius: overrides the default 64 unit radius of a spotlight at the target point. + +-------- Q3MAP2 KEYS -------- +_sun: Set this key to 1 on a spotlight to make an infinite sun light. + +fade: Fades light attenuation. Only affects linear lights. + +scale: Scales light attentation, from SOF2/JK2. Scales the "light" value. + +-------- SPAWNFLAGS -------- +LINEAR: Use a linear falloff. Default is inverse distance squared (more realistic). + +NOANGLE: Ignore angle attenuation. + +NOGRIDLIGHT: Do not affect the lightgrid (dynamic entity lighting). +*/ + +/*QUAKED lightJunior (0 0.7 0.3) (-6 -6 -6) (6 6 6) LINEAR NOANGLE UNUSED1 UNUSED2 NOGRIDLIGHT + +Non-displayed point light source THAT ONLY AFFECTS ENTITIES (lightgrid). The -pointscale and -scale arguments to Q3Map2 affect the brightness of these lights. The -skyscale argument affects brightness of entity sun lights. + +-------- KEYS -------- +_light OR light: overrides the default 300 intensity. + +_color: weighted RGB value of light color (default white - 1.0 1.0 1.0). + +target: Lights pointed at a target will be spotlights. + +radius: overrides the default 64 unit radius of a spotlight at the target point. + +-------- Q3MAP2 KEYS -------- +_sun: Set this key to 1 on a spotlight to make an infinite sun light. + +fade: Fades light attenuation. Only affects linear lights. + +scale: Scales light attentation, from SOF2/JK2. Scales the "light" value. + +-------- SPAWNFLAGS -------- +LINEAR: Use a linear falloff. Default is inverse distance squared (more realistic). + +NOANGLE: Ignore angle attenuation. + +NOGRIDLIGHT: Do not affect the lightgrid (dynamic entity lighting). Setting this spawnflag will disable this light entirely. +*/ + +//============================================================================= + +FUNC_* ENTITIES + +//============================================================================= + +/*QUAKED func_bobbing (0 .5 .8) ? X_AXIS Y_AXIS +Solid entity that oscillates back and forth in a linear motion. By default, it will have an amount of displacement in either direction equal to the dimension of the brush in the axis in which it's bobbing. Entity bobs on the Z axis (up-down) by default. It can also emit sound if the "noise" key is set. Will crush the player when blocked. + +-------- KEYS -------- +speed: amount of time in seconds for one complete oscillation cycle (default 4). + +height: sets the amount of travel of the oscillation movement (default 32). + +phase: sets the start offset of the oscillation cycle. Values must be 0 < phase < 1. Any integer phase value is the same as no offset (default 0). + +noise: path/name of .wav file to play. Use looping sounds only (eg. sound/world/drone6.wav - See Notes). + +model2: path/name of model to include (eg: models/mapobjects/jets/jets01.md3). + +origin: alternate method of setting XYZ origin of sound and .md3 model included with entity (See Notes). + +light: constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0). + +color: constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1). + +notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes. + +notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes. + +notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode). + +-------- Q3MAP2 KEYS -------- +_targetname: Used to attach a misc_model entity to this entity. + +_lightmapscale: Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0). + +_cs OR _castshadows: Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world. + +_rs OR _receiveshadows: Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities. + +_celshader: Sets the cel shader used for this geometry. Note: omit the "textures/" prefix. + +-------- Q3MAP2 TERRAIN KEYS -------- +_indexmap OR alphamap: Path/name for the art file used to guide the mapping of textures on the terrain surface. + +_layers OR layers: Integer value is the number unique root shaders that will be use on the terrain. + +_shader OR shader: Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix. + +-------- SPAWNFLAGS -------- +X_AXIS: entity will bob along the X axis. +Y_AXIS: entity will bob along the Y axis. + +-------- NOTES -------- +In order for the sound to be emitted from the entity, it is recommended to include a brush with an origin shader at its center, otherwise the sound will not follow the entity as it moves. Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value. + +Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname"). +*/ + +//============================================================================= + +/*QUAKED func_button (0 .5 .8) ? +When a button is touched by a player, it moves in the direction set by the "angle" key, triggers all its targets, stays pressed by an amount of time set by the "wait" key, then returns to it's original position where it can be operated again. + +-------- KEYS -------- +angle: determines the direction in which the button will move (up = -1, down = -2). + +target: all entities with a matching targetname will be triggered. + +speed: speed of button's displacement (default 40). + +wait: number of seconds button stays pressed (default 1, -1 = return immediately). + +lip: lip remaining at end of move (default 4 units). + +health: (default 0) if set to any non-zero value, the button must take damage (any amount) to activate. + +light: constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0). + +color: constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1). + +model2: path/name of model to include (eg: models/mapobjects/pipe/pipe02.md3). + +origin: alternate method of setting XYZ origin of .md3 model included with entity (See Notes). + +notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes. + +notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes. + +notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode). + +sound1to2: the sound played when the door, platform or button moves from state 1 to state 2. + +-------- Q3MAP2 KEYS -------- +_targetname: Used to attach a misc_model entity to this entity. + +_lightmapscale: Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0). + +_cs OR _castshadows: Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world. + +_rs OR _receiveshadows: Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities. + +_celshader: Sets the cel shader used for this geometry. Note: omit the "textures/" prefix. + +-------- Q3MAP2 TERRAIN KEYS -------- +_indexmap OR alphamap: Path/name for the art file used to guide the mapping of textures on the terrain surface. + +_layers OR layers: Integer value is the number unique root shaders that will be use on the terrain. + +_shader OR shader: Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix. + +-------- NOTES -------- +Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value. + +Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname"). +*/ + +//============================================================================= + +/*QUAKED func_door (0 .5 .8) ? START_OPEN - CRUSHER +Normal sliding door entity. By default, the door will activate when player walks close to it or when damage is inflicted to it. + +-------- KEYS -------- +angle: determines the opening direction of door (up = -1, down = -2). + +speed: determines how fast the door moves (default 100). + +wait: number of seconds before door returns (default 2, -1 = return immediately) + +lip: lip remaining at end of move (default 8) + +targetname: if set, a func_button or trigger is required to activate the door. + +health: (default 0) if set to any non-zero value, the button must take damage (any amount) to activate. + +dmg: damage to inflict on player when he blocks operation of door (default 4). Door will reverse direction when blocked unless CRUSHER spawnflag is set. + +team: assign the same team name to multiple doors that should operate together (see Notes). + +light: constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0). + +color: constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1). + +model2: path/name of model to include (eg: models/mapobjects/pipe/pipe02.md3). + +origin: alternate method of setting XYZ origin of .md3 model included with entity (See Notes). + +notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes. + +notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes. + +notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode). + +sound1to2: the sound played when the door, platform or button moves from state 1 to state 2. + +sound2to1: the sound played when the door or platform moves from from state 2 to state 1. + +soundPos2: the sound played when the door or platform reaches state 2. + +soundPos1: the sound played when the door or platform reaches state 1. + +-------- Q3MAP2 KEYS -------- +_targetname: Used to attach a misc_model entity to this entity. + +_lightmapscale: Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0). + +_cs OR _castshadows: Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world. + +_rs OR _receiveshadows: Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities. + +_celshader: Sets the cel shader used for this geometry. Note: omit the "textures/" prefix. + +-------- Q3MAP2 TERRAIN KEYS -------- +_indexmap OR alphamap: Path/name for the art file used to guide the mapping of textures on the terrain surface. + +_layers OR layers: Integer value is the number unique root shaders that will be use on the terrain. + +_shader OR shader: Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix. + +-------- SPAWNFLAGS -------- +START_OPEN: the door will spawn in the open state and operate in reverse. + +CRUSHER: door will not reverse direction when blocked and will keep damaging player until he dies or gets out of the way. + +-------- NOTES -------- +Unlike in Quake 2, doors that touch are NOT automatically teamed. If you want doors to operate together, you have to team them manually by assigning the same team name to all of them. Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value. + +Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname"). +*/ + +//============================================================================= + +/*QUAKED func_door_model (0 .5 .8) ? +A model based door entity. By default, the door will activate when player walks close to it. The opening and closing of the door is provided by an animation in the model itself. + +-------- KEYS -------- +speed: determines the time taken for the door to change state in msec (default 200). + +wait: number of seconds before door returns (default 2) + +targetname: if set, a func_button or trigger is required to activate the door. + +health: (default 0) if set to any non-zero value, the button must take damage (any amount) to activate. + +team: assign the same team name to multiple doors that should operate together (see Notes). + +light: constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0). + +color: constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1). + +model2: path/name of the door model (eg: models/mapobjects/pipe/pipe02.md3). + +modelOrigin: means of setting the origin of the model. + +scale: scale the model in each of the major axes (e.g. 1.0 1.0 2.0 -- twice as high as normal). + +animation: The first frame and number of frames in the door open animation (e.g. 0 10). This will be reversed for the close animation. + +notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes. + +notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes. + +notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode). + +sound1to2: the sound played when the door, platform or button moves from state 1 to state 2. + +sound2to1: the sound played when the door or platform moves from from state 2 to state 1. + +soundPos2: the sound played when the door or platform reaches state 2. + +soundPos1: the sound played when the door or platform reaches state 1. + +-------- Q3MAP2 KEYS -------- + +_targetname: Used to attach a misc_model entity to this entity. + +_lightmapscale: Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0). + +_cs OR _castshadows: Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world. + +_rs OR _receiveshadows: Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities. + +_celshader: Sets the cel shader used for this geometry. Note: omit the "textures/" prefix. + +-------- Q3MAP2 TERRAIN KEYS -------- +_indexmap OR alphamap: Path/name for the art file used to guide the mapping of textures on the terrain surface. + +_layers OR layers: Integer value is the number unique root shaders that will be use on the terrain. + +_shader OR shader: Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix. + +-------- NOTES -------- +Every func_door_model needs its model to be positioned, scaled and orientated using the modelOrigin, scale and angle/angles keys repsectively. +*/ + +//============================================================================= + +/*QUAKED func_door_rotating (0 .5 .8) ? START_OPEN - CRUSHER REVERSE - X_AXIS Y_AXIS +Rotating door entity. By default, the door will activate when player walks close toit. + +-------- KEYS -------- +speed: determines how fast the door moves (in degrees/second). + +rotatorAngle: the number of degrees through which to rotate (default 90). + +wait: number of seconds before door returns (default 2) + +targetname: if set, a func_button or trigger is required to activate the door. + +health: (default 0) if set to any non-zero value, the button must take damage (any amount) to activate. + +dmg: damage to inflict on player when he blocks operation of door (default 4). Door will reverse direction when blocked unless CRUSHER spawnflag is set. + +team: assign the same team name to multiple doors that should operate together (see Notes). + +light: constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0). + +color: constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1). + +model2: path/name of model to include (eg: models/mapobjects/pipe/pipe02.md3). + +origin: alternate method of setting XYZ origin of .md3 model included with entity (See Notes). + +notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes. + +notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes. + +notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode). + +sound1to2: the sound played when the door, platform or button moves from state 1 to state 2. + +sound2to1: the sound played when the door or platform moves from from state 2 to state 1. + +soundPos2: the sound played when the door or platform reaches state 2. + +soundPos1: the sound played when the door or platform reaches state 1. + +-------- Q3MAP2 KEYS -------- +_targetname: Used to attach a misc_model entity to this entity. + +_lightmapscale: Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0). + +_cs OR _castshadows: Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world. + +_rs OR _receiveshadows: Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities. + +_celshader: Sets the cel shader used for this geometry. Note: omit the "textures/" prefix. + +-------- Q3MAP2 TERRAIN KEYS -------- +_indexmap OR alphamap: Path/name for the art file used to guide the mapping of textures on the terrain surface. + +_layers OR layers: Integer value is the number unique root shaders that will be use on the terrain. + +_shader OR shader: Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix. + +-------- SPAWNFLAGS -------- +START_OPEN: the door will spawn in the open state and operate in reverse. + +CRUSHER: door will not reverse direction when blocked and will keep damaging player until he dies or gets out of the way. + +REVERSE: the door will open the other way. + +X_AXIS: rotate on the X axis instead of the Z. + +Y_AXIS: rotate on the Y axis instead of the Z. + +-------- NOTES -------- +Unlike in Quake 2, doors that touch are NOT automatically teamed. If you want doors to operate together, you have to team them manually by assigning the same team name to all of them. Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value. + +Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname"). + +You need to have an origin brush as part of this entity. The center of that brush will be the point around which it is rotated. It will rotate around the Z axis by default. You can check either the X_AXIS or Y_AXIS box to change that. +*/ + +//============================================================================= + +/*QUAKED func_group (0 .5 .8) ? +This is not an entity as such. It is strictly an editor utility to group world brushes and patches together for convenience (selecting, moving, copying, etc). You cannot group entities with this. + +-------- OLD TERRAIN KEYS (note: obsolete with Q3Map2) -------- +alphamap: this is the path/name for the art file used to guide the mapping of textures on the terrain surface. + +layers: this integer value is the number unique root shaders that will be use on the terrain. + +shader: this is the path to the metashader used to assign textures to the terrain entity. + +terrain: this is an on/off flag. When set to 1, the entity becomes a terrain entity. Note: unecessary when compiling with Q3Map2. See Q3Map2 keys. + +-------- Q3MAP2 KEYS -------- +_lightmapscale: Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0). + +_cs OR _castshadows: Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world. + +_rs OR _receiveshadows: Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities. + +_celshader: Sets the cel shader used for this geometry. Note: omit the "textures/" prefix. + +-------- Q3MAP2 TERRAIN KEYS -------- +_indexmap OR alphamap: Path/name for the art file used to guide the mapping of textures on the terrain surface. + +_layers OR layers: Integer value is the number unique root shaders that will be use on the terrain. + +_shader OR shader: Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix. + +-------- NOTES -------- +The TAB key can be used to flip through the component pieces of a selected func_group entity, isolating individual components. To make a func_group into a terrain entity, refer to the Terrain Construction documentation. +*/ + +//============================================================================= + +/*QUAKED func_pendulum (0 .5 .8) ? +Solid entity that describes a pendulum back and forth rotation movement. Rotates on the X axis by default. Pendulum frequency is a physical constant based on the length of the beam and gravity. Blocking the pendulum instantly kills a player. + +-------- KEYS -------- +angle: angle offset of axis of rotation from default X axis (default 0). + +speed: angle of swing arc in either direction from initial position (default 30). + +phase: sets the start offset of the swinging cycle. Values must be 0 < phase < 1. Any integer phase value is the same as no offset (default 0). + +noise: path/name of .wav file to play. Use looping sounds only (eg. sound/world/drone6.wav). + +model2: path/name of model to include (eg: models/mapobjects/jets/jets01.md3). + +origin: alternate method of setting XYZ origin of entity's rotation axis and .md3 model included with entity (default "0 0 0" - See Notes). + +light: constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0). + +color: constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1). + +notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes. + +notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes. + +notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode). + +-------- Q3MAP2 KEYS -------- +_targetname: Used to attach a misc_model entity to this entity. + +_lightmapscale: Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0). + +_cs OR _castshadows: Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world. + +_rs OR _receiveshadows: Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities. + +_celshader: Sets the cel shader used for this geometry. Note: omit the "textures/" prefix. + +-------- Q3MAP2 TERRAIN KEYS -------- +_indexmap OR alphamap: Path/name for the art file used to guide the mapping of textures on the terrain surface. + +_layers OR layers: Integer value is the number unique root shaders that will be use on the terrain. + +_shader OR shader: Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix. + +-------- NOTES -------- +You need to have an origin brush as part of this entity. The center of that brush will be the point through which the rotation axis passes. Setting the origin key is simply an alternate method to using an origin brush. Pendulum will rotate along the X axis by default. Very crude operation: pendulum cannot rotate along Z axis, the speed of swing (frequency) is not adjustable. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value. + +Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname"). +*/ + +//============================================================================= + +/*QUAKED func_plat (0 .5 .8) ? DONT_WAIT +Rising platform the player can ride to reach higher places. Plats must always be drawn in the raised position, so they will operate and be lighted correctly but they spawn in the lowered position. The plat will stay in the raised position until the player steps off. There are no proper sounds for this entity, only beep noises. It will spawn in the game and work properly but it sounds silly (see Notes). If DONT_WAIT is set then the platform will not wait for a client to leave before returning to its original position. + +-------- KEYS -------- +speed: determines how fast the plat moves (default 150). + +lip: lip remaining at end of move (default 16). Has no effect if "height" is set. + +height: if set, this will determine the total amount of vertical travel of the plat. + +dmg: damage to inflict on player when he blocks operation of plat (default 4). Plat will reverse direction when blocked. + +targetname: if set, the trigger that points to this will raise the plat each time it fires. The plat raises and comes back down a second later if no player is on it. + +light: constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0). + +color: constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1). + +model2: path/name of model to include (eg: models/mapobjects/pipe/pipe02.md3). + +origin: alternate method of setting XYZ origin of .md3 model included with entity (See Notes). + +notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes. + +notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes. + +notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode). + +sound1to2: the sound played when the door, platform or button moves from state 1 to state 2. + +sound2to1: the sound played when the door or platform moves from from state 2 to state 1. + +soundPos2: the sound played when the door or platform reaches state 2. + +soundPos1: the sound played when the door or platform reaches state 1. + +-------- Q3MAP2 KEYS -------- +_targetname: Used to attach a misc_model entity to this entity. + +_lightmapscale: Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0). + +_cs OR _castshadows: Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world. + +_rs OR _receiveshadows: Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities. + +_celshader: Sets the cel shader used for this geometry. Note: omit the "textures/" prefix. + +-------- Q3MAP2 TERRAIN KEYS -------- +_indexmap OR alphamap: Path/name for the art file used to guide the mapping of textures on the terrain surface. + +_layers OR layers: Integer value is the number unique root shaders that will be use on the terrain. + +_shader OR shader: Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix. + +-------- NOTES -------- +By default, the total amount of vertical travel of a platform is implicitly determined by the overall vertical size of the brushes of which it's made minus the lip value. But if the "height" key is used, then the total amount of vertical travel of the plat will be exactly that value regardless of the shape and size of the plat and regardless of the value of the "lip" key. Using the "height" key is the best method for any kind of platforms and the only possible one for thin plats which need to travel vertical distances many times their own thickness. Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value. + +There is a way to make plats play proper sounds. Just create a sound\movers\plats folder under baseq3 and put 2 sounds named pt1_strt.wav and pt1_end.wav in it. Those can be the renamed sounds from the Q2 plats or renamed copies of the sound\movers\doors sounds you can extract from your pak0.pk3 file or new custom sounds if you're up to it. Thanks to Fragzilla for the tip. + +Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname"). +*/ + +//============================================================================= + +/*QUAKED func_rotating (0 .5 .8) ? - - X_AXIS Y_AXIS +Solid entity that rotates continuously. Rotates on the Z axis by default and requires an origin brush. It will always start on in the game and is not targetable. + +-------- KEYS -------- +speed: determines how fast entity rotates (default 100). + +noise: path/name of .wav file to play. Use looping sounds only (eg. sound/world/drone6.wav). + +model2: path/name of model to include (eg: models/mapobjects/bitch/fembotbig.md3). + +origin: alternate method of setting XYZ origin of entity's rotation axis and .md3 model included with entity (default "0 0 0" - See Notes). + +light: constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0). + +color: constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1). + +notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes. + +notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes. + +notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode). + +-------- Q3MAP2 KEYS -------- +_targetname: Used to attach a misc_model entity to this entity. + +_lightmapscale: Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0). + +_cs OR _castshadows: Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world. + +_rs OR _receiveshadows: Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities. + +_celshader: Sets the cel shader used for this geometry. Note: omit the "textures/" prefix. + +-------- Q3MAP2 TERRAIN KEYS -------- +_indexmap OR alphamap: Path/name for the art file used to guide the mapping of textures on the terrain surface. + +_layers OR layers: Integer value is the number unique root shaders that will be use on the terrain. + +_shader OR shader: Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix. + +-------- SPAWNFLAGS -------- +X_AXIS: entity will rotate along the X axis. + +Y_AXIS: entity will rotate along the Y axis. + +-------- NOTES -------- +You need to have an origin brush as part of this entity. The center of that brush will be the point through which the rotation axis passes. Setting the origin key is simply an alternate method to using an origin brush. It will rotate along the Z axis by default. You can check either the X_AXIS or Y_AXIS box to change that. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value. + +Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname"). +*/ + +//============================================================================= + +/*QUAKED func_static (0 .5 .8) ? +Static non-solid bspmodel. Can be used for conditional walls and models. + +-------- KEYS -------- +model2: path/name of model to include (eg: models/mapobjects/bitch/fembotbig.md3). + +origin: alternate method of setting XYZ origin of .md3 model included with entity (See Notes). + +light: constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0). + +color: constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1). + +targetname: NOT SUPPORTED BY RENDERER - if set, a func_button or trigger can make entity disappear from the game (See Notes). + +notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes. + +notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes. + +notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode). + +-------- Q3MAP2 KEYS -------- +_targetname: Used to attach a misc_model entity to this entity. + +_lightmapscale: Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0). + +_cs OR _castshadows: Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world. + +_rs OR _receiveshadows: Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities. + +_celshader: Sets the cel shader used for this geometry. Note: omit the "textures/" prefix. + +-------- Q3MAP2 TERRAIN KEYS -------- +_indexmap OR alphamap: Path/name for the art file used to guide the mapping of textures on the terrain surface. + +_layers OR layers: Integer value is the number unique root shaders that will be use on the terrain. + +_shader OR shader: Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix. + +-------- NOTES -------- +When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value. If a model is included with a targeted func_static, the brush(es) of the entity will be removed from the game but the .md3 model won't: it will automatically be moved to the (0 0 0) world origin so you should NOT include an .md3 model to a targeted func_static. + +Because the map has only a single bot navigation file, func_static's cannot be used to make significant changes in game play flow between differing game types. + +Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname"). +*/ + +//============================================================================= + +/*QUAKED func_timer (0 .5 .8) (-8 -8 -8) (8 8 8) START_ON +Time delay trigger that will continuously fire its targets after a preset time delay. The time delay can also be randomized. When triggered, the timer will toggle on/off. + +-------- KEYS -------- +wait: delay in seconds between each triggering of its targets (default 1). + +random: random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes). + +target: this points to the entities to trigger. + +targetname: a func_button or trigger that points to this will toggle the timer on/off when activated. + +notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes. + +notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes. + +notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode). + +-------- SPAWNFLAGS -------- +START_ON: timer will start on in the game and continuously fire its targets. + +-------- NOTES -------- +When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random). +*/ + +//============================================================================= + +/*QUAKED func_train (0 .5 .8) ? START_OFF BLOCK_STOPS +Trains are moving solids that follow a string of path_corner entities. Trains in Tremulous are less basic than in Q3A, they also require an origin brush (see Notes). + +-------- KEYS -------- +speed: speed of displacement of train (default 100 or overridden by speed value of path). + +target: this points to the first path_corner of the path which is also the spawn location of the train's origin. + +model2: path/name of model to include (eg: models/mapobjects/pipe/pipe02.md3). + +origin: alternate method of setting XYZ origin of the train's brush(es) and .md3 model included with entity (See Notes). + +light: constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0). + +color: constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1). + +notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes. + +notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes. + +notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode). + +-------- SPAWNFLAGS -------- +START_OFF: the train will spawn in the off state + +BLOCK_STOPS: with this set a train simply stops if blocked, instead of killing. + +-------- Q3MAP2 KEYS -------- +_targetname: Used to attach a misc_model entity to this entity. + +_lightmapscale: Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0). + +_cs OR _castshadows: Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world. + +_rs OR _receiveshadows: Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities. + +_celshader: Sets the cel shader used for this geometry. Note: omit the "textures/" prefix. + +-------- Q3MAP2 TERRAIN KEYS -------- +_indexmap OR alphamap: Path/name for the art file used to guide the mapping of textures on the terrain surface. + +_layers OR layers: Integer value is the number unique root shaders that will be use on the terrain. + +_shader OR shader: Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix. + +-------- NOTES -------- +1. Trains instakill anything in their path by default. +2. Trains cannot emit sound. +3. When BLOCK_STOPS is set, trains cannot be stopped just by getting in their way, the player must be wedged between the train and another obstacle to block it. + +Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value. + +Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname").*/ + + + + +//============================================================================= + +INFO_* ENTITIES + +//============================================================================= + +/*QUAKED info_notnull (0 .5 0) (-8 -8 -8) (8 8 8) +Used as a positional target for entities that can use directional pointing. A target_position can be used instead of this but was kept in Q3A for legacy purposes. + +-------- KEYS -------- +targetname: must match the target key of entity that uses this for pointing. + +notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes. + +notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes. + +notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode). +*/ + + +//============================================================================= + +/*QUAKED info_null (0 .5 0) (-8 -8 -8) (8 8 8) +Used as a positional target for light entities to create a spotlight effect. A target_position can be used instead of this but was kept in Q3A for legacy purposes. + +-------- KEYS -------- +targetname: must match the target key of entity that uses this for pointing. + +notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes. + +notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes. + +notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode). +*/ + +//============================================================================= + +/*QUAKED info_player_intermission (1 0 1) (-8 -8 -8) (8 8 8) +Camera for intermission screen between matches. This also automatically generates the podium for bot arena matches (see Notes). Can be aimed by setting the "angles" key or targeting an pointing to an aiming entity. Use only one per level. + +-------- KEYS -------- +angles: alternate "pitch, yaw, roll" angles method of aiming intermission camera (default 0 0 0). + +target: point this to an info_notnull or target_position entity to set the camera's pointing angles. + +-------- NOTES -------- +In genuine bot arena matches, the podium for the 1st, 2nd and 3rd place players at the end of the match is generated by this entity. The podium's origin will automatically be located 128 units in the direction of the camera's view and 84 units down from the y height of the view line at that point. It will also always be generated on a level plane regardless of the pointing angle of the camera so if that angle is too steep, part of the podium model might not be visible. Make sure you leave at least 106 units of free space in front of where the camera points to otherwise the podium model won't be visible at all. +*/ + +//============================================================================= + +/*QUAKED info_alien_intermission (1 0 1) (-8 -8 -8) (8 8 8) +Camera for aliens before they spawn. Can be aimed by setting the "angles" key or targeting an pointing to an aiming entity. Use one per level. + +-------- KEYS -------- +angles: alternate "pitch, yaw, roll" angles method of aiming intermission camera (default 0 0 0). + +target: point this to an info_notnull or target_position entity to set the camera's pointing angles. +*/ + +//============================================================================= + +/*QUAKED info_human_intermission (1 0 1) (-8 -8 -8) (8 8 8) +Camera for humans before they spawn. Can be aimed by setting the "angles" key or targeting an pointing to an aiming entity. Use one per level. + +-------- KEYS -------- +angles: alternate "pitch, yaw, roll" angles method of aiming intermission camera (default 0 0 0). + +target: point this to an info_notnull or target_position entity to set the camera's pointing angles. +*/ + + + +//============================================================================= + +MISC_* ENTITIES + +//============================================================================= + +/*QUAKED misc_model (1 .5 .25) (-16 -16 -16) (16 16 16) +Generic placeholder for inserting MD3 models in game. Requires compilation of map geometry to be added to level. If the map is compiled with Q3Map2, then ASE, 3DS, OBJ and other model formats are supported. + +-------- KEYS -------- +angle: direction in which model will be oriented. + +model: path/name of model to use (eg: models/mapobjects/teleporter/teleporter.md3). + +-------- Q3MAP2 KEYS -------- +angles: Individual control of PITCH, YAW, and ROLL (default 0 0 0). + +modelscale: Floating-point value used to scale a model up or down (default 1.0). + +modelscale_vec: Floating-point vector used to scale a model's axes individually (default 1.0 1.0 1.0). + +_remap: Used to remap textures/shaders in the model. To remap all shaders to a given shader, use "*;models/mymodel/mytexture". To remap a specific shader, use "models/mymodel/old;models/mymodel/new". + +target: Used to attach the misc_model to a brush entity, where its "targetname" key is the same value. + +_lightmapscale: Floating point value scaling the resolution of lightmaps on this model (if model is using lightmapped shaders) (default 1.0). + +_cs OR _castshadows: Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world. + +_rs OR _receiveshadows: Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities. + +_celshader: Sets the cel shader used for this geometry. Note: omit the "textures/" prefix. +*/ + +//============================================================================= + +/*QUAKED misc_anim_model (1 .5 .25) (-16 -16 -16) (16 16 16) TRIGGER_TOGGLE +A little like misc_model except that it is a game entity and does not become part of the map geometry. An instance of this entity will draw an arbituary md3 in the world with an arbituary frame or with an animation. + +-------- KEYS -------- +angle: direction in which model will be oriented. + +radius: The scale of the model compared to its original size. Defaults to 1.0. + +animation: The guts of the entity. This is identical to an entry in an animation.cfg - Start Frame, Number of frames, Looping Frames, Frame rate. For example 0 30 30 20 will play frames 0 through 30 continously at 20 fps. + +model: path/name of model to use (eg: models/mapobjects/teleporter/teleporter.md3). + +-------- SPAWNFLAGS -------- +TRIGGER_TOGGLE: With this set triggering the entity disables the model altogether as opposed to the regular behaviour of toggling the animation. +*/ + +//============================================================================= + +/*QUAKED misc_particle_system (1 .5 .25) (-8 -8 -8) (8 8 8) SPAWN_DISABLED +A particle system entity. + +-------- KEYS -------- +psName: The name of the particle system to spawn at this entity. + +-------- SPAWNFLAGS -------- +SPAWN_DISABLED: Spawn disabled. + +-------- NOTES -------- +Triggering this entity toggles it on and off. +*/ + +//============================================================================= +/*QUAKED misc_light_flare (.65 .65 1) (-8 -8 -8) (8 8 8) SPAWN_DISABLED +A light flare entity. + +-------- KEYS -------- +targetShaderName: The name of the shader of the light flare. + +radius: The radius key is a vector. +The first component is the size of the light flare. The radius is calculated by taking the distance of the viewer from the light flare and dividing by this key, so the larger the key value, the smaller the flare. Values between 2 and 10 are sensible. +The second component indicates the angle around the direction the flare points for which it is visible. For example a value of 90 means that you can see the flare while infront of the entity, but not when behind it. If set to zero the light flare will be visible from any angle +The third component is similar to the first except that it specifies the size of the light source rather than the size of the light flare itself. This is useful when the higher detail flare fading modes are enabled. If this is set to the same value as the first component, fading will commence as soon as the edge of the light flare is occluded by some surface between the viewer and the flare. If it is set larger the flare will overlap the occluding surface before it begins to fade. + +angles: This reflects which direction the flare points. It is not important unless the second component of the radius key is employed. angles is a vector of PITCH YAW ROLL. For example a value of "90 0 0" would create a flare pointing down. ROLL is redundant in this context and can be set arbitrarily. + +-------- SPAWNFLAGS -------- +SPAWN_DISABLED: Spawn disabled. + +-------- NOTES -------- +Triggering this entity toggles it. +*/ + +//============================================================================= + +/*QUAKED misc_portal_camera (1 .5 .25) (-8 -8 -8) (8 8 8) SLOWROTATE FASTROTATE +Portal camera. This camera is used to project its view onto a portal surface in the level through the intermediary of a misc_portal_surface entity. Use the "angles" key or target a target_position or info_notnull entity to set the camera's pointing direction. + +-------- KEYS -------- +angles: this sets the pitch and yaw aiming angles of the portal camera (default 0 0). Use "roll" key to set roll angle. + +target: point this to a target_position entity to set the camera's pointing direction. + +targetname: a misc_portal_surface portal surface indicator must point to this. + +roll: roll angle of camera. A value of 0 is upside down and 180 is the same as the player's view. + +notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes. + +notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes. + +notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode). + +-------- SPAWNFLAGS -------- +SLOWROTATE: makes the portal camera rotate slowly along the roll axis. + +FASTROTATE: makes the portal camera rotate faster along the roll axis. + +NOROTATE: no rolling at all. + +-------- NOTES -------- +Both the setting "angles" key or "targeting a target_position" methods can be used to aim the camera. However, the target_position method is simpler. In both cases, the "roll" key must be used to set the roll angle. +*/ + +//============================================================================= + +/*QUAKED misc_portal_surface (1 .5 .25) (-8 -8 -8) (8 8 8) +Portal surface indicator. This will "lock on" the brush face closest to it and identify as a portal. The view displayed on the portal surface is the view of the misc_portal_camera that this entity targets. Also used for mirrors (see Notes). + +-------- KEYS -------- +target: point this to a misc_portal_camera that "sees" the view you want to display on the portal. + +notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes. + +notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes. + +notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode). + +-------- NOTES -------- +The entity must be no farther than 64 units away from the portal surface to lock onto it. To make a mirror, apply the common/mirror shader to the surface, place this entity near it but don't target a misc_portal_camera. +*/ + +//============================================================================= + +/*QUAKED misc_teleporter_dest (1 .5 .25) (-32 -32 -24) (32 32 -16) +Teleport destination location point for trigger_teleporter entities. + +-------- KEYS -------- +angle: direction in which player will look when teleported. + +targetname: make the trigger_teleporter point to this. + +notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes. + +notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes. + +notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode). +*/ + +/*QUAKED trigger_teleport (.5 .5 .5) ? SPECTATOR SPAWN_DISABLED +Allows client side prediction of teleportation events. +Must point at a target_position, which will be the teleport destination. + +If spectator is set, only spectators can use this teleport +Spectator teleporters are not normally placed in the editor, but are created +automatically near doors to allow spectators to move through them +*/ + + + +//============================================================================= + +PATH_* ENTITIES + +//============================================================================= + +/*QUAKED path_corner (.5 .3 0) (-8 -8 -8) (8 8 8) +Path corner entity that func_trains can be made to follow. + +-------- KEYS -------- +target: point to next path_corner in the path. + +targetname: the train following the path or the previous path_corner in the path points to this. + +speed: speed of func_train while moving to the next path corner. This will override the speed value of the train. + +wait: number of seconds func_train will pause on path corner before moving to next path corner (default 0 - see Notes). + +notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes. + +notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes. + +notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode). + +-------- NOTES -------- +Setting the wait key to -1 will not make the train stop on the path corner, it will simply default to 0. +*/ + + + +//============================================================================= + +TARGET_* ENTITIES + +//============================================================================= + +/*QUAKED target_hurt (1 0 0) (-8 -8 -8) (8 8 8) +When triggered, this hurts the entity that caused the trigger. + +-------- KEYS -------- +dmg: amount of damage to deal (default: 5) +*/ + +/*QUAKED target_rumble (1 0 0) (-8 -8 -8) (8 8 8) +When triggered, this initiates a level-wide rumble effect. All players are affected. + +-------- KEYS -------- +speed: severity of the quake (default: 100) + +count: duration of the quake (default: 10) +*/ + +/*QUAKED target_alien_win (1 0 0) (-8 -8 -8) (8 8 8) +When triggered, this causes an unconditional win for the alien team. +*/ + +/*QUAKED target_human_win (1 0 0) (-8 -8 -8) (8 8 8) +When triggered, this causes an unconditional win for the human team. +*/ + +/*QUAKED target_delay (0 .7 .7) (-8 -8 -8) (8 8 8) +Time delay trigger intermediary. Like a target_relay, this can only be fired by other triggers which will cause it in turn to fire its own targets. + +-------- KEYS -------- +targetname: activating trigger points to this. + +target: this points to entities to activate when this entity is triggered. + +wait: delay in seconds from when this gets triggered to when it fires its own targets (default approx. 1). + +delay: same as wait? replaces it? WTF?...I'm confused now. + +random: random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes). + +notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes. + +notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes. + +notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode). + +-------- NOTES -------- +When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random). +*/ + +//============================================================================= + +/*QUAKED target_kill (0 .5 0) (-8 -8 -8) (8 8 8) +This will kill the player who activates the trigger that fires this target. + +-------- KEYS -------- +targetname: the activating trigger points to this. + +notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes. + +notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes. + +notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode). +*/ + +//============================================================================= + +/*QUAKED target_location (0 .5 0) (-8 -8 -8) (8 8 8) +Location marker used by bots and players for team orders and team chat in the course of Teamplay games. The closest target_location in sight is used for the location. If none is in sight, the closest in distance is used. + +-------- KEYS -------- +message: name of the location (text string). Displayed in parentheses in front of all team chat and order messages. + +count: color of the location text displayed in parentheses during team chat. Set to 0-7 for color. + 0: white (default) + 1: red + 2: green + 3: yellow + 4: blue + 5: cyan + 6: magenta + 7: white + +notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes. + +notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes. + +notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode). +*/ + +//============================================================================= + +/*QUAKED target_position (0 .5 0) (-8 -8 -8) (8 8 8) +Aiming target for entities like light, misc_portal_camera and trigger_push (jump pads) in particular. + +-------- KEYS -------- +targetname: the entity that requires an aiming direction points to this. + +notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes. + +notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes. + +notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode). + +-------- NOTES -------- +To make a jump pad, place this entity at the highest point of the jump and target it with a trigger_push entity. +*/ + +//============================================================================= + +/*QUAKED target_print (0 .5 0) (-8 -8 -8) (8 8 8) HUMAN_TEAM ALIEN_TEAM PRIVATE +This will print a message on the center of the screen when triggered. By default, all the clients will see the message. + +-------- KEYS -------- +message: text string to print on screen. + +targetname: the activating trigger points to this. + +notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes. + +notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes. + +notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode). + +-------- SPAWNFLAGS -------- +HUMAN_TEAM: only the human team players will see the message. +ALIEN_TEAM: only the alien team players will see the message. +PRIVATE: only the player that activates the target will see the message. +*/ + +//============================================================================= + +/*QUAKED target_push (.5 .5 .5) (-8 -8 -8) (8 8 8) BOUNCEPAD NOSOUND +This can be used to create jump pads and launch ramps. The direction of push can be set by the "angles" key or pointing to a target_position or info_notnull entity. Unlike trigger_push, this is NOT client side predicted and must be activated by a trigger. + +-------- KEYS -------- +angles: this sets the pitch and yaw aiming angles of push entity (default 0 0). The roll angle does not apply. + +speed: speed of push (default 1000). Has no effect if entity targets an aiming entity. + +targetname: the activating trigger points to this. Push originates from the location of the trigger. + +target: this points to the aiming entity to which the player will jump. + +notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes. + +notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes. + +notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode). + +-------- SPAWNFLAGS -------- +BOUNCEPAD: if set, trigger will play bounce noise instead of beep noise when activated (recommended). +NOSOUND: if set, no sound is played at all + +-------- NOTES -------- +To make a jump pad or launch ramp, create a trigger_multiple where the jump must originate. Place the target_push directly above the trigger_multiple and place the target_position entity at the highest point of the jump. Target the trigger_multiple to the target_push and target the target_push to the target_position/info_notnull (or set the target_push's "angles" key). Note that the "angle" key also works. +*/ + +//============================================================================= + +/*QUAKED target_relay (0 .7 .7) (-8 -8 -8) (8 8 8) HUMAN_ONLY ALIEN_ONLY RANDOM +This can only be activated by other triggers which will cause it in turn to activate its own targets. + +-------- KEYS -------- +targetname: activating trigger points to this. + +target: this points to entities to activate when this entity is triggered. + +notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes. + +notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes. + +notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode). + +-------- SPAWNFLAGS -------- +HUMAN_ONLY: only human team players can activate trigger. +ALIEN_ONLY: only alien team players can activate trigger. +RANDOM: one one of the targeted entities will be triggered at random. +*/ + +//============================================================================= + +/*QUAKED target_score (0 .5 0) (-8 -8 -8) (8 8 8) +This is used to automatically give frag points to the player who activates this. A spawn location entity like info_player_* or CTF respawn points can target this entity to give points to the player when he spawns in the game. Or a trigger can also be used to activate this. The activator of the trigger will get the points. + +-------- KEYS -------- +targetname: ativating entity points to this. + +count: number of frag points to give to player (default 1). + +notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes. + +notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes. + +notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode). +*/ + +//============================================================================= + +/*QUAKED target_speaker (0 .7 .7) (-8 -8 -8) (8 8 8) LOOPED_ON LOOPED_OFF GLOBAL ACTIVATOR +Sound generating entity that plays .wav files. Normal non-looping sounds play each time the target_speaker is triggered. Looping sounds can be set to play by themselves (no activating trigger) or be toggled on/off by a trigger. + +-------- KEYS -------- +noise: path/name of .wav file to play (eg. sound/world/growl1.wav - see Notes). + +wait: delay in seconds between each time the sound is played ("random" key must be set - see Notes). + +random: random time variance in seconds added or subtracted from "wait" delay ("wait" key must be set - see Notes). + +targetname: the activating button or trigger points to this. + +notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes. + +notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes. + +notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode). + +-------- SPAWNFLAGS -------- +LOOPED_ON: sound will loop and initially start on in level (will toggle on/off when triggered). + +LOOPED_OFF: sound will loop and initially start off in level (will toggle on/off when triggered). + +GLOBAL: sound will play full volume throughout the level. + +ACTIVATOR: sound will play only for the player that activated the target. + +-------- NOTES -------- +The path portion value of the "noise" key can be replaced by the implicit folder character "*" for triggered sounds that belong to a particular player model. For example, if you want to create a "bottomless pit" in which the player screams and dies when he falls into, you would place a trigger_multiple over the floor of the pit and target a target_speaker with it. Then, you would set the "noise" key to "*falling1.wav". The * character means the current player model's sound folder. So if your current player model is Visor, * = sound/player/visor, if your current player model is Sarge, * = sound/player/sarge, etc. This cool feature provides an excellent way to create "player-specific" triggered sounds in your levels. + +The combination of the "wait" and "random" keys can be used to play non-looping sounds without requiring an activating trigger but both keys must be used together. The value of the "random" key is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random). +*/ + +//============================================================================= + +/*QUAKED target_teleporter (0 .5 0) (-8 -8 -8) (8 8 8) +Activating this will teleport players to the location of the targeted misc_teleporter_dest entity. Unlike trigger_teleport, this entity must be activated by a trigger and does NOT allow client prediction of events. + +-------- KEYS -------- +targetname: activating trigger points to this. + +target: this must point to a misc_teleporter_dest entity. + +notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes. + +notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes. + +notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode). +*/ + + + + +//============================================================================= + +TEAM_* ENTITIES + +//============================================================================= + +/*QUAKED team_human_spawn (0 .2 1) (-40 -40 -4) (40 40 4) +The human spawn point. + +-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY -------- +model="models/buildables/telenode/telenode.md3" +*/ + +//============================================================================= + +/*QUAKED team_human_armoury (0 .2 1) (-40 -40 -13) (40 40 50) +The human armoury. + +-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY -------- +model="models/buildables/arm/arm.md3" +*/ + +//============================================================================= + +/*QUAKED team_human_dcc (0 .2 1) (-35 -35 -13) (35 35 47) +The human defense computer. + +-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY -------- +model="models/buildables/dcc/dcc.md3" +*/ + +//============================================================================= + +/*QUAKED team_human_medistat (0 .2 1) (-35 -35 -7) (35 35 7) +The human medical station. + +-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY -------- +model="models/buildables/medistat/medistat.md3" +*/ + +//============================================================================= + +/*QUAKED team_human_mgturret (0 .2 1) (-25 -25 -20) (25 25 20) +The human machinegun turret. + +-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY -------- +model="models/buildables/mgturret/turret_base.md3" +*/ + +//============================================================================= + +/*QUAKED team_human_reactor (0 .2 1) (-50 -50 -15) (50 50 95) +The human reactor. + +-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY -------- +model="models/buildables/reactor/reactor.md3" +*/ + +//============================================================================= + +/*QUAKED team_human_repeater (0 .2 1) (-15 -15 -15) (15 15 25) +The human repeater. + +-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY -------- +model="models/buildables/repeater/repeater.md3" +*/ + +//============================================================================= + +/*QUAKED team_human_tesla (0 .2 1) (-22 -22 -40) (22 22 40) +The human tesla generator. + +-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY -------- +model="models/buildables/tesla/tesla.md3" +*/ + +//============================================================================= + + + +/*QUAKED team_alien_spawn (1 .2 0) (-15 -15 -15) (15 15 15) +The alien spawn point. + +-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY -------- +model="models/buildables/eggpod/eggpod.md3" +*/ + +//============================================================================= + +/*QUAKED team_alien_acid_tube (1 .2 0) (-35 -35 -11) (35 35 40) +The alien acid tube. + +-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY -------- +model="models/buildables/acid_tube/acid_tube.md3" +*/ + +//============================================================================= + +/*QUAKED team_alien_barricade (1 .2 0) (-35 -35 -15) (35 35 60) +The alien barricade. + +-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY -------- +model="models/buildables/barricade/barricade.md3" +*/ + +//============================================================================= + +/*QUAKED team_alien_booster (1 .2 0) (-26 -26 -9) (26 26 9) +The alien booster. + +-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY -------- +model="models/buildables/booster/booster.md3" +*/ + +//============================================================================= + +/*QUAKED team_alien_hovel (1 .2 0) (-50 -50 -20) (50 50 20) +The alien hovel. + +-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY -------- +model="models/buildables/hovel/hovel.md3" +*/ + +//============================================================================= + +/*QUAKED team_alien_overmind (1 .2 0) (-45 -45 -15) (45 45 95) +The alien overmind. + +-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY -------- +model="models/buildables/overmind/overmind.md3" +*/ + +//============================================================================= + +/*QUAKED team_alien_trapper (1 .2 0) (-15 -15 -15) (15 15 15) +The alien trapper. + +-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY -------- +model="models/buildables/trapper/trapper.md3" +*/ + +//============================================================================= + + + +//============================================================================= + +TRIGGER_* ENTITIES + +//============================================================================= + +/*QUAKED trigger_heal (.5 .5 .5) ? START_OFF SLOW +Any player that touches this will be healed. It does heal points of healage each server frame. Targeting the trigger will toggle its effects. + +-------- SPAWNFLAGS -------- +START_OFF: needs to be triggered (toggle) to activate. + +SLOW: changes the heal rate to once per second. + +-------- KEYS -------- +heal: Health points to heal (default 5) +*/ + +/*QUAKED trigger_ammo (.5 .5 .5) ? SLOW NOENERGY NOCASE +Any player that touches this will have the ammo for his held weapon restored. It gives ammo in chunks reflected by the key "ammo" each server frame. + +-------- SPAWNFLAGS -------- +SLOW: changes the ammo rate to once per second. + +NOENERGY: disables this entity for energy weapons. + +NOCASE: disables this entity for case based weapons. + +-------- KEYS -------- +ammo: Amount of ammo to give (default 1) +*/ + +/*QUAKED trigger_gravity (.5 .5 .5) ? +The gravity (for players) within this trigger is determined by the gravity key. Targetting this entity toggles its effects. +NOT THROUGHLY TESTED: please report whether or not this works for you. + +-------- KEYS -------- +gravity: The gravity within this trigger (default 800). +*/ + +/*QUAKED trigger_buildable (.5 .5 .5) ? SPAWN_DISABLED NEGATE +Triggered by a buildable or subset of buildables. If no buildables key is supplied every buildable will trigger this entity. +Targetting this entity toggles it. +NOT THROUGHLY TESTED: please report whether or not this works for you. + +-------- SPAWNFLAGS -------- +SPAWN_DISABLED: needs to be triggered (toggle) to activate. +NEGATE: negate the trigger condition. + +-------- KEYS -------- +target: this points to the entity to activate. + +buildables: a comma delimited list of buildables which will trigger this entity. + +wait: time in seconds until trigger becomes re-triggerable after it's been touched (default 0.2, -1 = trigger once). + +random: random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes). +*/ + +/*QUAKED trigger_class (.5 .5 .5) ? SPAWN_DISABLED NEGATE +Triggered by a specific class or subset of classes. If no classes key is supplied every class will trigger this entity. +Targetting this entity toggles it. +NOT THROUGHLY TESTED: please report whether or not this works for you. + +-------- SPAWNFLAGS -------- +SPAWN_DISABLED: needs to be triggered (toggle) to activate. +NEGATE: negate the trigger condition. + +-------- KEYS -------- +target: this points to the entity to activate. + +classes: a comma delimited list of classes which will trigger this entity. + +wait: time in seconds until trigger becomes re-triggerable after it's been touched (default 0.2, -1 = trigger once). + +random: random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes). +*/ + +/*QUAKED trigger_equipment (.5 .5 .5) ? SPAWN_DISABLED NEGATE +Triggered by a player carrying some item (weapon or upgrade) or subset of items. If no equipment key is supplied every human will trigger this entity. +Targetting this entity toggles it. +NOT THROUGHLY TESTED: please report whether or not this works for you. + +-------- SPAWNFLAGS -------- +SPAWN_DISABLED: needs to be triggered (toggle) to activate. +NEGATE: negate the trigger condition. + +-------- KEYS -------- +target: this points to the entity to activate. + +equipment: a comma delimited list of equipment which will trigger this entity. + +wait: time in seconds until trigger becomes re-triggerable after it's been touched (default 0.2, -1 = trigger once). + +random: random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes). +*/ + +//============================================================================= + +/*QUAKED trigger_stage (.5 .5 .5) (-8 -8 -8) (8 8 8) +Fires its targets when the team key reaches stage key. + +-------- KEYS -------- +target: this points to the entity to activate. + +team: the team which triggers this entity; 1 for aliens, 2 for humans + +stage: the stage at which this entity is triggered; 1 for stage 2, 2 for stage 3 +*/ + +//============================================================================= + +/*QUAKED trigger_win (.5 .5 .5) (-8 -8 -8) (8 8 8) +Fires its targets when the team key wins. + +-------- KEYS -------- +target: this points to the entity to activate. + +team: the team which triggers this entity; 1 for aliens, 2 for humans +*/ + +//============================================================================= + +/*QUAKED trigger_always (.5 .5 .5) (-8 -8 -8) (8 8 8) +Automatic trigger. It will fire the entities it targets as soon as it spawns in the game. + +-------- KEYS -------- +target: this points to the entity to activate. + +notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes. + +notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes. + +notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode). +*/ + +//============================================================================= + +/*QUAKED trigger_hurt (.5 .5 .5) ? START_OFF - SILENT NO_PROTECTION SLOW +Any player that touches this will be hurt by "dmg" points of damage once per server frame (very fast). A sizzling sound is also played while the player is being hurt. + +-------- KEYS -------- +dmg: number of points of damage inflicted to player per server frame (default 5 - integer values only). + +notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes. + +notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes. + +notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode). + +-------- SPAWNFLAGS -------- +START_OFF needs to be triggered (toggle) for damage + +SILENT: supresses the sizzling sound while player is being hurt. + +NO_PROTECTION: player will be hurt regardless of protection (see Notes). + +SLOW: changes the damage rate to once per second. + +-------- NOTES -------- +The invulnerability power-up (item_enviro) does not protect the player from damage caused by this entity regardless of whether the NO_PROTECTION spawnflag is set or not. Triggering a trigger_hurt will have no effect if the START_OFF spawnflag is not set. A trigger_hurt always starts on in the game. +*/ + +//============================================================================= + +/*QUAKED trigger_multiple (.5 .5 .5) ? +Variable size repeatable trigger. It will fire the entities it targets when touched by player. Can be made to operate like a trigger_once entity by setting the "wait" key to -1. It can also be activated by another trigger that targets it. + +-------- KEYS -------- +target: this points to the entity to activate. + +targetname: activating trigger points to this. + +wait: time in seconds until trigger becomes re-triggerable after it's been touched (default 0.2, -1 = trigger once). + +random: random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes). + +notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes. + +notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes. + +notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode). + +-------- NOTES -------- +When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random). +*/ + +//============================================================================= + +/*QUAKED trigger_push (.5 .5 .5) ? +This is used to create jump pads and launch ramps. It MUST point to a target_position or info_notnull entity to work. Unlike target_push, this is client side predicted. + +-------- KEYS -------- +target: this points to the target_position to which the player will jump. + +notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes. + +notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes. + +notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode). + +-------- NOTES -------- +To make a jump pad or launch ramp, place the target_position/info_notnull entity at the highest point of the jump and target it with this entity. +*/ + +//============================================================================= + +/*QUAKED trigger_teleport (.5 .5 .5) ? +Touching this will teleport players to the location of the targeted misc_teleporter_dest entity. This entity allows client prediction of events. + +-------- KEYS -------- +target: this must point to a misc_teleporter_dest entity. + +notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes. + +notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes. + +notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode). +*/ + + + +//============================================================================= + +WORLDSPAWN ENTITY + +//============================================================================= + +/*QUAKED worldspawn (0 0 0) ? +Only used for the world. +-------- KEYS -------- +message: text to print at user logon. Used for name of level. + +music: path/name of looping .wav file used for level's music (eg. music/sonic5.wav). + +humanBuildPoints: The maximum amount of power the humans can use. Defaults to 1000. + +humanMaxStage: The highest stage the humans are allowed to use [0/1/2]. Defaults to 2. +humanStage2Threshold: The number of kills the humans must aquire to advance to stage 2. Defaults to 50. +humanStage3Threshold: The number of kills the humans must aquire to advance to stage 3. Defaults to 100. + +alienBuildPoints: The maximum amount of sentience available to the overmind. Defaults to 1000. + +alienMaxStage: The highest stage the aliens are allowed to use [0/1/2]. Defaults to 2. +alienStage2Threshold: The number of kills the aliens must aquire to advance to stage 2. Defaults to 50. +alienStage3Threshold: The number of kills the aliens must aquire to advance to stage 3. Defaults to 100. + +disabledEquipment: A comma delimited list of human weapons or upgrades to disable for this map. +disabledClasses: A comma delimited list of alien classes to disable for this map. +disabledBuildables: A comma delimited list of buildables to disable for this map. + +_ambient OR ambient: Adds a constant value to overall lighting. Use is not recommended. Ambient light will have a tendency to flatten out variations in light and shade. + +_color: RGB value for ambient light color (default is 0 0 0). + +gravity: gravity of level (default is normal gravity: 800). + +gridsize: granularity of the lightgrid created by q3map. Value is three integers separated by spaces, representing number of units between grid points in X Y Z. Default gridsize value is 128 128 256. Use larger powers of 2 to reduce BSP size and compile time on very large maps. + +_blocksize: q3map always splits the BSP tree along the planes X=_blocksize*n and Y=_blocksize*n. Default _blocksize value is 1024. Increase the blocksize using larger powers of 2 to reduce compile times on very large maps with a low structural brush density. + +-------- Q3MAP2 KEYS -------- +_minlight: Minimum light value, levelwide. Uses the _color key to set color. Does not add unlike ambient. + +_minvertexlight: Minimum vertex lighting, levelwide. + +_mingridlight: Minimum lightgrid (dynamic entity lighting) levelwide. + +_keeplights: Keep light entities in the BSP. Normally stripped out by the BSP process and read from the .map file by the lighting phase. + +_noshadersun: Ignore q3map_sun/sun directives in sky shaders and ONLY use entity sun lights. + +_farplanedist: Limit on how many units the vis phase of compilation can see. Used in combination with level-wide fog, it can help reduce r_speeds on large, open maps. + +_foghull: Shader to use for "fog hull." Foghull shader should be a sky shader. Omit the "textures/" prefix. + +_lightmapscale: Floating point value scaling the resolution of lightmaps on brushes/patches in the world. Can be overridden in func_group (or other entities) (default 1.0). + +_cs OR _castshadows: Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world. + +_rs OR _receiveshadows: Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities. + +_celshader: Sets the cel shader used for this geometry. Note: omit the "textures/" prefix. Overridable in entities. + +-------- Q3MAP2 TERRAIN KEYS -------- +_indexmap OR alphamap: Path/name for the art file used to guide the mapping of textures on the terrain surface. + +_layers OR layers: Integer value is the number unique root shaders that will be use on the terrain. + +_shader OR shader: Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix. +*/ + diff --git a/misc/manual.lyx b/misc/manual.lyx new file mode 100755 index 0000000..fbb930e --- /dev/null +++ b/misc/manual.lyx @@ -0,0 +1,8376 @@ +#LyX 1.3 created this file. For more info see http://www.lyx.org/ +\lyxformat 221 +\textclass article +\language english +\inputencoding auto +\fontscheme pslatex +\graphics default +\paperfontsize default +\spacing single +\papersize a4paper +\paperpackage a4 +\use_geometry 1 +\use_amsmath 0 +\use_natbib 0 +\use_numerical_citations 0 +\paperorientation portrait +\leftmargin 2cm +\topmargin 2cm +\rightmargin 2cm +\bottommargin 2cm +\secnumdepth 3 +\tocdepth 3 +\paragraph_separation skip +\defskip medskip +\quotes_language english +\quotes_times 2 +\papercolumns 1 +\papersides 1 +\paperpagestyle empty + +\layout Title + +TREMULOUS 1.1.0 +\layout Standard + + +\begin_inset LatexCommand \tableofcontents{} + +\end_inset + + +\layout Section + +Introduction +\layout Standard + +Tremulous is a first person shooter featuring two opposing teams, humans + and aliens. + Both teams are able to build structures such as spawn points, which are + vital to their victory. + The goal of Tremulous is to eliminate the opposing team and all of their + spawn points. +\layout Standard + +Each team in Tremulous differs fundamentally from the other. + The aliens are class based, with two classes initially available: the alien + team's builder, known as the Granger, and the Dretch, the weakest offensive + alien. + The aliens are awarded frags for killing their foes which may be used to + evolve into stronger classes, capable of greater and more varied maneuvers. + In contrast the human team is upgrade based, receiving credits for kills + that may be exchanged at an Armoury structure for new weapons, armour and + equipment. + Two such upgrades are available for free: a rifle and a construction kit, + used for building structures. +\layout Standard + +During a game of Tremulous, each team occupies one of three stages of developmen +t. + These stages are reached by accruing more than a specific total number + of kills by the whole team. + Each new stage unlocks new classes, upgrades and buildable structures. + If one team reaches a stage significantly earlier than the other team it + stands a better chance of defeating the opposing team. +\layout Standard + +Section +\begin_inset LatexCommand \ref{sec:Game} + +\end_inset + + details the content of the game including the various controls that are + used to play. + Section +\begin_inset LatexCommand \ref{sec:Technical} + +\end_inset + + describes some technical aspects of how Tremulous works. + It is not necessary to read this section in order to play the game. +\layout Section + + +\begin_inset LatexCommand \label{sec:Game} + +\end_inset + +Game +\layout Subsection + +Aliens +\layout Standard + +Two classes are available upon joining the alien team: the Dretch and the + Granger. + As you gain kills, you may use your earned frags to evolve into higher + classes with the +\noun on +Use Structure/Evolve +\noun default + button. + The alien team is mostly limited to melee attacks and must use stealth + and speed to defeat the longer range humans. + All aliens automatically regenerate health at a slow rate. +\layout Subsubsection + +Classes +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Granger +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename granger.jpg + scale 85 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Cost: 0 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 1 +\end_inset + + + + +\end_inset + + +\layout Standard +\align center + +\begin_inset Tabular + + + + + + + +\begin_inset Text + +\layout Standard + +Ability +\end_inset + + +\begin_inset Text + +\layout Standard + +Control +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Build +\end_inset + + +\begin_inset Text + +\layout Standard + + +\noun on +Primary Attack +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Destroy Structure +\end_inset + + +\begin_inset Text + +\layout Standard + + +\noun on +Deconstruct Structure +\noun default + on an alien structure +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\end_inset + + +\layout Standard + +The +\emph on +Granger +\emph default + is the alien team's builder class. + +\noun on +Primary Attack +\noun default + will bring up a menu of structures available for building. + After selecting a structure a glowing outline of it will appear. + When this outline is green you can use the +\noun on +Primary Attack +\noun default + button to place it. + The outline changes to red when the structure cannot be placed in its current + location. + To cancel placing the structure press the +\noun on +Secondary Attack +\noun default + button. + To remove a placed structure use the +\noun on +Deconstruct Structure +\noun default + button. + After building or deconstructing a structure a timer will appear in the + lower right corner of the screen. + Until this timer expires you cannot create or destroy another building. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Advanced Granger +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename agranger.jpg + scale 85 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Cost: 0 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 2 +\end_inset + + + + +\end_inset + + +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + +Ability +\end_inset + + +\begin_inset Text + +\layout Standard + +Control +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Build +\end_inset + + +\begin_inset Text + +\layout Standard + + +\noun on +Primary Attack +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Slash +\end_inset + + +\begin_inset Text + +\layout Standard + + +\noun on +Secondary Attack +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Lob Projectile +\end_inset + + +\begin_inset Text + +\layout Standard + + +\noun on +Activate Upgrade +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Destroy Structure +\end_inset + + +\begin_inset Text + +\layout Standard + + +\noun on +Deconstruct Structure +\noun default +on an alien structure +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Wallwalk +\end_inset + + +\begin_inset Text + +\layout Standard + + +\noun on +Crouch +\end_inset + + + + +\end_inset + + +\layout Standard + +The +\emph on +Advanced Granger +\emph default + becomes available at no cost when the alien team reaches stage two. + In addition to the +\emph on +Granger's +\emph default + abilities, the +\emph on +Advanced Granger +\emph default + can move faster, jump higher, walk on walls and attack with a slash or + by lobbing small projectiles with the +\noun on +Activate Upgrade +\noun default + button. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Dretch +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename dretch.jpg + scale 75 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Cost: 0 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 1 +\end_inset + + + + +\end_inset + + +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + +Ability +\end_inset + + +\begin_inset Text + +\layout Standard + +Control +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Bite +\end_inset + + +\begin_inset Text + +\layout Standard + +Touch a human +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Wallwalk +\end_inset + + +\begin_inset Text + +\layout Standard + + +\noun on +Crouch +\end_inset + + + + +\end_inset + + +\layout Standard + +The +\emph on +Dretch +\emph default + is the alien team's weakest offensive class. + Its only attack is to make forward contact with a human player or human + defensive structure. + The amount of damage dealt to a human depends on what armour they were + wearing and where they were hit, with headshots resulting in the most damage. + +\emph on +Dretches +\emph default + can also wallwalk; toggle it by pressing the +\noun on +Crouch +\noun default + button. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Basilisk +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename basilisk.jpg + scale 85 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Cost: 1 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 1 +\end_inset + + + + +\end_inset + + +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + +Ability +\end_inset + + +\begin_inset Text + +\layout Standard + +Control +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Slash +\end_inset + + +\begin_inset Text + +\layout Standard + + +\noun on +Primary Attack +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Grab +\end_inset + + +\begin_inset Text + +\layout Standard + +Touch a human +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Wallwalk +\end_inset + + +\begin_inset Text + +\layout Standard + + +\noun on +Crouch +\end_inset + + + + +\end_inset + + +\layout Standard + +The +\emph on +Basilisk +\emph default + attacks by using the +\noun on +Primary Attack +\noun default + button. + It can also grab human players by making contact with them at close range. + This freezes humans in place and, if they're not wearing a +\emph on +Battlesuit +\emph default +, restricts their ability to turn. + The +\emph on +Basilisk +\emph default + can also wallwalk; toggle it by pressing the +\noun on +Crouch +\noun default + button. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Advanced Basilisk +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename abasilisk.jpg + scale 85 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Cost: 2 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 2 +\end_inset + + + + +\end_inset + + +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + +Ability +\end_inset + + +\begin_inset Text + +\layout Standard + +Control +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Slash +\end_inset + + +\begin_inset Text + +\layout Standard + + +\noun on +Primary Attack +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Gas +\end_inset + + +\begin_inset Text + +\layout Standard + + +\noun on +Secondary Attack +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Grab +\end_inset + + +\begin_inset Text + +\layout Standard + +Touch a human +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Wallwalk +\end_inset + + +\begin_inset Text + +\layout Standard + + +\noun on +Crouch +\end_inset + + + + +\end_inset + + +\layout Standard + +In addition to the +\emph on +Basilisk's +\emph default + abilities, the +\emph on +Advanced Basilisk +\emph default + can spray a cloud of noxious gas that will disorient and poison affected + human players. + Humans equipped with a +\emph on +Battlesuit +\emph default + are immune to gas. + Use this ability with the +\noun on +Secondary Attack +\noun default + button. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Marauder +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename marauder.jpg + scale 75 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Cost: 2 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 1 +\end_inset + + + + +\end_inset + + +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + +Ability +\end_inset + + +\begin_inset Text + +\layout Standard + +Control +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Bite +\end_inset + + +\begin_inset Text + +\layout Standard + + +\noun on +Primary Attack +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Wall Jump +\end_inset + + +\begin_inset Text + +\layout Standard + +Jump into a wall while holding down +\noun on +Jump +\end_inset + + + + +\end_inset + + +\layout Standard + +The +\emph on +Marauder +\emph default + attacks with the +\noun on +Primary Attack +\noun default + button and has the ability to rebound off walls. + To use this ability jump towards a wall and hold down the +\noun on +Jump +\noun default + button. + When you hit the wall you will be propelled upward and in the direction + opposite of the wall. + As long as you continue hitting walls you will continue wall jumping. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Advanced Marauder +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename amarauder.jpg + scale 75 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Cost: 3 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 2 +\end_inset + + + + +\end_inset + + +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + +Ability +\end_inset + + +\begin_inset Text + +\layout Standard + +Control +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Bite +\end_inset + + +\begin_inset Text + +\layout Standard + + +\noun on +Primary Attack +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Zap +\end_inset + + +\begin_inset Text + +\layout Standard + + +\noun on +Secondary Attack +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Wall Jump +\end_inset + + +\begin_inset Text + +\layout Standard + +Jump into a wall while holding down +\noun on +Jump +\end_inset + + + + +\end_inset + + +\layout Standard + +In addition to the +\emph on +Marauder's +\emph default + abilities, the +\emph on +Advanced Marauder +\emph default + can use a chain lightning attack. + To use this, press the +\noun on +Secondary Attack +\noun default + button while aiming at a nearby human or human structure. + If it connects the electric shock will jump to up to two other nearby targets + doing full damage to the first, half damage to the second and one third + damage to the third over a period of one second provided the attacker stays + within range. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Dragoon +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename dragoon.jpg + scale 85 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Cost: 3 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 1 +\end_inset + + + + +\end_inset + + +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + +Ability +\end_inset + + +\begin_inset Text + +\layout Standard + +Control +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Bite +\end_inset + + +\begin_inset Text + +\layout Standard + + +\noun on +Primary Attack +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Pounce +\end_inset + + +\begin_inset Text + +\layout Standard + +Hold down +\noun on +Secondary Attack +\noun default + briefly then release +\end_inset + + + + +\end_inset + + +\layout Standard + +The +\emph on +Dragoon +\emph default + attacks by either biting with the +\noun on +Primary Attack +\noun default + button or pouncing with +\noun on +Secondary Attack +\noun default +. + To pounce, first hold down the +\noun on +Secondary Attack +\noun default + button to charge up, then release to leap forward and damage anything that + gets in the way. + While charging you will be unable to jump normally and will move at a reduced + rate. + Aim up a little to fly further when pouncing. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Advanced Dragoon +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename adragoon.jpg + scale 85 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Cost: 4 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 3 +\end_inset + + + + +\end_inset + + +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + +Ability +\end_inset + + +\begin_inset Text + +\layout Standard + +Control +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Bite +\end_inset + + +\begin_inset Text + +\layout Standard + + +\noun on +Primary Attack +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Pounce +\end_inset + + +\begin_inset Text + +\layout Standard + +Hold down +\noun on +Secondary Attack +\noun default + briefly then release +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Shoot Barb +\end_inset + + +\begin_inset Text + +\layout Standard + + +\noun on +Activate Upgrade +\end_inset + + + + +\end_inset + + +\layout Standard + +In addition to the +\emph on +Dragoon's +\emph default + abilities, the +\emph on +Advanced Dragoon +\emph default + can fire long ranged spiked barbs with the +\noun on +Activate Upgrade +\noun default + button. + Up to three of these barbs may be held in reserve and they regenerate automatic +ally over time. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Tyrant +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename tyrant.jpg + scale 85 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Cost: 5 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 3 +\end_inset + + + + +\end_inset + + +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + +Ability +\end_inset + + +\begin_inset Text + +\layout Standard + +Control +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Slash +\end_inset + + +\begin_inset Text + +\layout Standard + + +\noun on +Primary Attack +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Trample +\end_inset + + +\begin_inset Text + +\layout Standard + +Hold down +\noun on +Secondary Attack +\noun default + briefly then release +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Healing Aura +\end_inset + + +\begin_inset Text + +\layout Standard + +Stand close to teammates to increase their regeneration rate +\end_inset + + + + +\end_inset + + +\layout Standard + +The +\emph on +Tyrant +\emph default + attacks by either slashing with the +\noun on +Primary Attack +\noun default + button or trampling with +\noun on +Secondary Attack +\noun default +. + To trample, first hold down the +\noun on +Secondary Attack +\noun default + button while moving forward to charge up, then release to run at high speed + for a short time, damaging anything in your path. + The +\emph on +Tyrant +\emph default + also has a healing aura that will double the regeneration rate of lower + class aliens within range. +\layout Subsubsection + +Structures +\layout Standard + +All alien structures must be built in proximity to an +\emph on +Egg +\emph default + or an +\emph on +Overmind +\emph default +. + All alien structures require the presence of an +\emph on + Overmind +\emph default + to function. + All alien structures create `creep' around their bases that slows human + movement. + When destroyed, alien structures explode in a shower of acid harmful to + humans. + All structures may be built on level floors and when +\emph on +Advanced Grangers +\emph default + become available some structures may also be built on walls and ceilings. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Overmind +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename overmind.jpg + scale 75 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Sentience: 0 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 1 +\end_inset + + + + +\end_inset + + +\layout Standard + +The +\emph on +Overmind +\emph default + is the collective consciousness that controls all the alien structures + in a map and enables aliens to evolve into higher forms. + There can only be one +\emph on +Overmind +\emph default + and it must be alive before any other structures can be built. + If the +\emph on +Overmind +\emph default + is destroyed then all structures besides +\emph on +Eggs +\emph default + cease to function and every alien loses the ability to upgrade their class + until a new +\emph on +Overmind +\emph default + is built. + The +\emph on +Overmind +\emph default + has a limited amount of `sentience' which is distributed amongst every + other structure built, each having its own cost. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Egg +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename egg.jpg + scale 85 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Sentience: 10 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 1 +\end_inset + + + + +\end_inset + + +\layout Standard + +The +\emph on +Egg +\emph default + is the most basic and important alien structure; it is from these that + aliens spawn into the game. + They are also the only structure that continues to function in the absence + of an +\emph on +Overmind +\emph default +. + +\emph on +Eggs +\emph default + may be built on ceilings. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Acid Tube +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename acidtube.jpg + scale 85 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Sentience: 8 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 1 +\end_inset + + + + +\end_inset + + +\layout Standard + + +\emph on +Acid Tubes +\emph default + are the primary defensive structure for the alien team. + When approached by a human they eject lethal acid in all directions, even + over other structures. + +\emph on + Acid Tubes +\emph default + may be built on walls and ceilings. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + +Barricade +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename barricade.jpg + scale 75 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Sentience: 10 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 1 +\end_inset + + + + +\end_inset + + +\layout Standard + + +\emph on +Barricades +\emph default + are used to obstruct corridors and doorways, hindering human movement and + line-of-sight. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Trapper +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename trapper.jpg + scale 75 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Sentience: 8 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 2 +\end_inset + + + + +\end_inset + + +\layout Standard + + +\emph on +Trappers +\emph default + fire a blob of adhesive spit at any human in their line of sight, freezing + them in place and, if they're not wearing a +\emph on +Battlesuit +\emph default +, restricts their ability to turn. + +\emph on + Trappers +\emph default + may be built on walls and ceilings, and are rarely effective when built + on floors. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + +Booster +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename booster.jpg + scale 85 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Sentience: 12 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 2 +\end_inset + + + + +\end_inset + + +\layout Standard + +Any alien that touches a +\emph on +Booster +\emph default + is provided with a poison enhancement on all their melee attacks for a + limited time. + Poison causes victims to lose health steadily over time unless they use + a +\emph on + Medkit +\emph default + or visit a +\emph on +Medistation +\emph default +. + Poison does not work against humans equipped with a +\emph on +Battlesuit +\emph default +. + The +\emph on +Booster +\emph default + will also double the regeneration rate of any nearby aliens with the exception + of +\emph on + Tyrants +\emph default +. + The healing aura of a +\emph on + Tyrant +\emph off + +\emph default +i +\emph off +s not +\emph default +cumulative +\emph off + with the healing effect of boosters. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Hovel +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename hovel.jpg + scale 85 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Sentience: 0 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 3 +\end_inset + + + + +\end_inset + + +\layout Standard + + +\emph on +Hovels +\emph default + are armored shells that +\emph on +Grangers +\emph default + may hide in should the need arise. + There can only be one Hovel. + They may be entered and exited with the +\noun on +Use Structure/Evolve +\noun default + button. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Hive +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename hive.jpg + scale 85 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Sentience: 12 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 3 +\end_inset + + + + +\end_inset + + +\layout Standard + + +\emph on +Hives +\emph default + house millions of tiny insectoid aliens. + When a human approaches the structure the insects attack. + +\emph on +Hives +\emph default + may be built on ceilings. +\layout Subsection + +Humans +\layout Subsubsection + +Weapons +\layout Standard + +Humans may spawn with either the +\emph on +Construction Kit +\emph default + or the +\emph on +Rifle +\emph default +. + As credits are earned, humans may sell their old upgrades and purchase + new ones at an +\emph on +Armoury +\emph default + structure. + Ammo may be refilled for normal weapons at +\emph on +Armouries +\emph default +, or at +\emph on +Reactors +\emph default + and +\emph on +Repeaters +\emph default + for energy weapons, all at no cost. + Players may only carry one weapon at a time, excluding the +\emph on +Blaster +\emph default +. + In general the humans rely on long range weapons to make up for their lack + of mobility relative to the alien team. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Construction Kit +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename ckit.jpg + scale 75 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Cost: 0 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 1 +\end_inset + + + + +\end_inset + + +\layout Standard + +The +\emph on +Construction Kit +\emph default + is the humans' method of building structures. + The +\noun on +Primary +\noun default + +\noun on +Attack +\noun default + button will bring up a menu of structures available for building. + After selecting a structure, a glowing outline of it will appear. + When this outline is green, pressing the +\noun on +Primary Attack +\noun default + button will place it. + When the outline is red, the structure cannot be placed in its current + location. + To cancel placing the structure, press the +\noun on +Secondary Attack +\noun default + button. + To remove a placed structure, use the +\noun on +Deconstruct Structure +\noun default + button. + After building or deconstructing a structure, a timer will show up in the + lower right corner of the screen. + Until this timer expires, you cannot create, destroy or repair any structures. + Damaged structures may otherwise be repaired with the +\noun on +Secondary Attack +\noun default + button. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Advanced Construction Kit +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename ackit.jpg + scale 75 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Cost: 0 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 2 +\end_inset + + + + +\end_inset + + +\layout Standard + +At stage two an upgraded +\emph on +Construction Kit +\emph default + becomes available that allows the building of more advanced structures. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Blaster +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename blaster.jpg + scale 75 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Cost: 0 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 1 +\end_inset + + + + +\end_inset + + +\layout Standard + +The +\emph on +Blaster +\emph default + is the human team's standard issue backup weapon. + All players spawn with one automatically and may not exchange it for another + weapon. + The +\emph on +Blaster +\emph default + fires a weak projectile and uses no ammo. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Rifle +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename rifle.jpg + scale 75 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Cost: 0 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 1 +\end_inset + + + + +\end_inset + + +\layout Standard + +The +\emph on +Rifle +\emph default + is the human team's most basic weapon and is available from spawning. + It rapidly fires moderately accurate shots with clip sizes of 30. + Up to 6 extra clips may be carried at a time. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Pain Saw +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename psaw.jpg + scale 85 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Cost: 100 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 1 +\end_inset + + + + +\end_inset + + +\layout Standard + +The +\emph on +Pain Saw +\emph default + is a powerful melee weapon that emits a steady electric hum when in use. + It uses no ammunition. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Shotgun +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename shotgun.jpg + scale 85 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Cost: 150 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 1 +\end_inset + + + + +\end_inset + + +\layout Standard + +The +\emph on +Shotgun +\emph default + fires 8 pellets at a wide angle and is thus best used in close quarters. + It holds 8 shots per clip and 3 extra clips may be carried at a time. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Las Gun +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename lasgun.jpg + scale 85 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Cost: 250 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 1 +\end_inset + + + + +\end_inset + + +\layout Standard + +The +\emph on +Las Gun +\emph default + is similar to the +\emph on +Rifle +\emph default + but is more powerful, accurate, slower to fire and uses no clips. + It is an energy weapon and so must be refilled at a +\emph on +Reactor +\emph default + or +\emph on +Repeater +\emph default +. + It can hold up to 200 cells at a time, or 300 with a +\emph on +Battery Pack +\emph default +. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Mass Driver +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename mdriver.jpg + scale 85 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Cost: 350 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 1 +\end_inset + + + + +\end_inset + + +\layout Standard + +The +\emph on +Mass Driver +\emph default + fires powerful, accurate shots at a slow rate of fire. + It is an energy weapon and holds 5 shots per clip, or 7 with a +\emph on +Battery Pack +\emph default +. + Up to 4 extra clips may be carried at a time. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Chaingun +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename chaingun.jpg + scale 85 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Cost: 400 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 1 +\end_inset + + + + +\end_inset + + +\layout Standard + +The +\emph on +Chaingun +\emph default + is a powerful, wildly inaccurate rapid-fire weapon. + It holds up to 300 bullets at a time and is best used when crouching to + reduce its kickback. + Humans equipped with a +\emph on +Battlesuit +\emph default +do not experience this kickback. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Pulse Rifle +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename prifle.jpg + scale 85 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Cost: 400 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 2 +\end_inset + + + + +\end_inset + + +\layout Standard + +The +\emph on +Pulse Rifle +\emph default + is an energy weapon that fires projectiles at high speeds. + It holds up to 50 cells per clip, or 75 with a +\emph on +Battery Pack +\emph default +. + Up to 4 extra clips may be carried at a time. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Grenade +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename grenade.jpg + scale 75 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Cost: 200 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 2 +\end_inset + + + + +\end_inset + + +\layout Standard + +The +\emph on +Grenade +\emph default + is a hand held explosive device. + It is thrown for a short distance by using the +\noun on +Activate Upgrade +\noun default + button. + After a brief delay it will explode and cause tremendous damage to anything + in its area of effect. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Flamethrower +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename flamer.jpg + scale 85 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Cost: 450 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 3 +\end_inset + + + + +\end_inset + + +\layout Standard + +The +\emph on +Flamethrower +\emph default + is a short range incendiary weapon. + It holds up to 150 shots at a time and can easily damage the careless wielder. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Lucifer Cannon +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename lcannon.jpg + scale 85 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Cost: 600 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 3 +\end_inset + + + + +\end_inset + + +\layout Standard + +The +\emph on +Lucifer Cannon +\emph default + is the human team's most devastating weapon. + It is an energy weapon that can hold up to 90 cells at a time, or 135 with + a +\emph on +Battery Pack +\emph default +. + By holding down the +\noun on +Primary Attack +\noun default + button, a player may charge up a powerful, slow moving projectile with + splash damage. + The longer the attack is charged the more powerful the projectile and the + more ammo used. + If the attack is charged for too long the weapon will explode, damaging + the player. + The +\noun on +Secondary Attack +\noun default +button fires a smaller projectile that requires no charging. +\layout Subsubsection + +Upgrades +\layout Standard + +Human players may equip themselves with any number of the following upgrades, + with a few exceptions: the +\emph on +Jet Pack +\emph default + and +\emph on +Battery Pack +\emph default + may not be used together and the +\emph on +Battlesuit +\emph default + may not be used with the +\emph on +Jet Pack +\emph default +, +\emph on +Battery Pack +\emph default +, +\emph on +Light Armour +\emph default +, or +\emph on +Helmet +\emph default +. + Only one of any type of upgrade may be carried at a time. + Upgrades that do not grant an intrinsic effect must be selected in the + player's inventory with the +\noun on +Next Upgrade +\noun default + and +\noun on +Previous Upgrade +\noun default + buttons and then activated with the +\noun on +Activate Upgrade +\noun default + button. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Light Armour +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename larmour.jpg + scale 75 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Cost: 70 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 1 +\end_inset + + + + +\end_inset + + +\layout Standard + + +\emph on +Light Armour +\emph default + grants the wearer improved defense to the torso and leg areas. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Helmet +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename helmet.jpg + scale 85 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Cost: 90 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 2 +\end_inset + + + + +\end_inset + + +\layout Standard + +The +\emph on +Helmet +\emph default + improves the defense of the wearer's head and also displays a radar that + shows the relative positions of nearby enemies and enemy structures. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Medkit +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Cost: 0 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 1 +\end_inset + + + + +\end_inset + + +\layout Standard + + +\emph on +Medkits +\emph default + are a free holdable given to every human upon spawning and refilled at +\emph on + Medistations +\emph default + to players with full health. + They may not be refilled or exchanged at +\emph on + Armouries +\emph default +. + When used with the +\noun on + Activate Upgrade +\noun default + button, +\emph on + Medkits +\emph default + immediately begin restoring health at a slow rate, gradually speeding up + until all damage incurred before the +\emph on + Medkit +\emph default + was activated is healed. + Additionally, if a human is poisoned, using a +\emph on + Medkit +\emph default + will cure the poison and confer a 30 second immunity to poison. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Battery Pack +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename battpack.jpg + scale 75 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Cost: 100 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 1 +\end_inset + + + + +\end_inset + + +\layout Standard + +The +\emph on +Battery Pack +\emph default + increases the maximum ammo capacity of energy weapons by 50%. + It may not be used in conjunction with the +\emph on +Jet Pack +\emph default +. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Jet Pack +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename jetpack.jpg + scale 75 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Cost: 120 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 2 +\end_inset + + + + +\end_inset + + +\layout Standard + +The +\emph on +Jet Pack +\emph default + grants the wearer the power of slow but unlimited flight. + When activated with the +\noun on +Activate Upgrade +\noun default + button, a player may ascend or descend using the +\noun on +Jump +\noun default + or +\noun on +Crouch +\noun default + buttons, respectively. + The +\emph on +Jet Pack +\emph default + ceases to function if there is no operational +\emph on +Reactor +\emph default +present. + Additionally it temporarily cuts out if the player receives any damage. + The +\emph on +Jet Pack +\emph default + may not be used in conjunction with the +\emph on +Battery Pack +\emph default +. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Battlesuit +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename bsuit.jpg + scale 85 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Cost: 400 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 3 +\end_inset + + + + +\end_inset + + +\layout Standard + +The +\emph on +Battlesuit +\emph default + provides a significant defensive boost to the wearer's entire body. + Due to this coverage, the +\emph on +Battlesuit +\emph default + may not be used in conjunction with any other wearable upgrade ( +\emph on +Light Armour +\emph default +, +\emph on +Helmet +\emph default +, +\emph on +Battery Pack +\emph default +, and +\emph on +Jet Pack +\emph default +). + Players are also prevented from crouching while wearing Battlesuits. +\layout Subsubsection + +Structures +\layout Standard + +All human structures must be built in proximity to a +\emph on +Reactor +\emph default + or a +\emph on +Repeater +\emph default +. + With +\emph on +Telenodes +\emph default + as the only exception, all structures require the presence of a working + +\emph on +Reactor +\emph default + to function. + All human structures explode in a powerful blast harmful to anything within + their radius when destroyed. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Reactor +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename reactor.jpg + scale 75 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Power: 0 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 1 +\end_inset + + + + +\end_inset + + +\layout Standard + +The +\emph on +Reactor +\emph default + is the power source for all human structures in a map. + There may only be one +\emph on +Reactor +\emph default +, and it must be present before any structures other than +\emph on + Repeaters +\emph default + can be built. + If the +\emph on +Reactor +\emph default + is destroyed then all structures besides +\emph on +Telenodes +\emph default + cease to function. + The +\emph on +Reactor +\emph default + has a limited amount of power which is distributed among every other structure + built, each having its own cost. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Telenode +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename telenode.jpg + scale 85 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Power: 10 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 1 +\end_inset + + + + +\end_inset + + +\layout Standard + +The +\emph on +Telenode +\emph default + is the most basic and fundamental human structure; it is from these that + humans spawn into the game. + They are also the only structure that continues to function in the absence + of a +\emph on + Reactor +\emph default +. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Machine Gun Turret +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename turret.jpg + scale 85 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Power: 8 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 1 +\end_inset + + + + +\end_inset + + +\layout Standard + +The +\emph on +Machine Gun Turret +\emph default + is the primary defensive structure for the human team. + While they have a clear line of sight to an alien within their range, they + will track and fire at the alien until it is dead. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Tesla Generator +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename tesla.jpg + scale 80 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Power: 10 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 3 +\end_inset + + + + +\end_inset + + +\layout Standard + + +\emph on +Tesla Generators +\emph default + are a defensive structure that will unconditionally hit any target within + their range and line of sight with an electrical surge. + To be built and function, a +\emph on +Tesla Generator +\emph default + requires the presence of a +\emph on +Defense Computer +\emph default + somewhere in the map. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Armoury +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename armoury.jpg + scale 85 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Power: 10 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 1 +\end_inset + + + + +\end_inset + + +\layout Standard + +The +\emph on +Armoury +\emph default + is an essential part of every human base, allowing upgrades beyond the + basic spawning equipment to be bought and exchanged. + It is the sole means of human advancement. + To use an +\emph on +Armoury +\emph default +, approach it and press the +\noun on +Use Structure/Evolve +\noun default + button. + Ammo for non-energy weapons may also be acquired at no cost from an +\emph on +Armoury +\emph default + by using the +\noun on +Buy Ammo +\noun default + button. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Defense Computer +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename dcc.jpg + scale 85 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Power: 8 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 2 +\end_inset + + + + +\end_inset + + +\layout Standard + + +\emph on +Defense Computers +\emph default + coordinate the attacks of +\emph on +Machine Gun Turrets +\emph default +, preventing them from firing at a single target when multiple targets are + available. + They are also required for the production of +\emph on +Tesla Generators +\emph default +. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Medistation +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename medistat.jpg + scale 85 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Power: 8 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 1 +\end_inset + + + + +\end_inset + + +\layout Standard + +The +\emph on +Medistation +\emph default + provides the only means for humans to heal themselves. + By standing on one, a human will quickly regenerate health up to their + maximum of 100. + +\emph on + Medistations +\emph default + will also refill +\emph on + Medkits +\emph default + to humans with full health. + Only one person may use a +\emph on +Medistation +\emph default + at a time. +\layout Standard +\align center + +\begin_inset Tabular + + + + + + +\begin_inset Text + +\layout Standard + + +\emph on +Repeater +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\begin_inset Graphics + filename repeater.jpg + scale 85 + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Power: 0 +\end_inset + + +\begin_inset Text + +\layout Standard + +Stage: 2 +\end_inset + + + + +\end_inset + + +\layout Standard + + +\emph on +Repeaters +\emph default + serve as power distributors that may be built anywhere not already powered, + even when no +\emph on +Reactor +\emph default + is present. + Any other structure may be built in proximity to a working +\emph on +Repeater +\emph default + as if it were a +\emph on +Reactor +\emph default +. + If a +\emph on +Repeater +\emph default + powers nothing for 90 seconds, it will automatically self destruct. +\layout Section + + +\begin_inset LatexCommand \label{sec:Technical} + +\end_inset + +Technical +\layout Subsection + +Bindings +\layout Standard +\align center + +\begin_inset Tabular + + + + + + + +\begin_inset Text + +\layout Standard + +Name in menu +\end_inset + + +\begin_inset Text + +\layout Standard + +Binding +\end_inset + + +\begin_inset Text + +\layout Standard + +Function +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\noun on +Primary Attack +\end_inset + + +\begin_inset Text + +\layout Standard + + +\series bold ++attack +\end_inset + + +\begin_inset Text + +\layout Standard + +Use primary attack function. +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\noun on +Secondary Attack +\end_inset + + +\begin_inset Text + +\layout Standard + + +\series bold ++button5 +\end_inset + + +\begin_inset Text + +\layout Standard + +Use secondary attack function. +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\noun on +Previous Upgrade +\end_inset + + +\begin_inset Text + +\layout Standard + + +\series bold +weapprev +\end_inset + + +\begin_inset Text + +\layout Standard + +As human, preselect the previous upgrade in your inventory. +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\noun on +Next Upgrade +\end_inset + + +\begin_inset Text + +\layout Standard + + +\series bold +weapnext +\end_inset + + +\begin_inset Text + +\layout Standard + +As human, preselect the next upgrade in your inventory. +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\noun on +Activate Upgrade +\end_inset + + +\begin_inset Text + +\layout Standard + + +\series bold ++button2 +\end_inset + + +\begin_inset Text + +\layout Standard + +As human, activate the current preselected inventory item. + Also used for some alien abilities. +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\noun on +Reload +\end_inset + + +\begin_inset Text + +\layout Standard + + +\series bold +reload +\end_inset + + +\begin_inset Text + +\layout Standard + +As human, reload the selected weapon. +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\noun on +Buy Ammo +\end_inset + + +\begin_inset Text + +\layout Standard + + +\series bold +buy ammo +\end_inset + + +\begin_inset Text + +\layout Standard + +As human, buy ammo from an +\emph on +armoury +\emph default +, +\emph on +repeater +\emph default + or +\emph on +reactor +\emph default +. +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\noun on +Use Medkit +\end_inset + + +\begin_inset Text + +\layout Standard + + +\series bold +itemact medkit +\end_inset + + +\begin_inset Text + +\layout Standard + +As human, activate your +\emph on +Medkit +\emph default +. +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\noun on +Use Structure/Evolve +\end_inset + + +\begin_inset Text + +\layout Standard + + +\series bold ++button7 +\end_inset + + +\begin_inset Text + +\layout Standard + +As human, use the structure in front of the player. + As alien, evolve into a different class. +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\noun on +Deconstruct Structure +\end_inset + + +\begin_inset Text + +\layout Standard + + +\series bold +deconstruct +\end_inset + + +\begin_inset Text + +\layout Standard + +As a builder class, deconstruct the structure in front of the player cleanly. +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\noun on +Sprint +\end_inset + + +\begin_inset Text + +\layout Standard + + +\series bold +boost +\end_inset + + +\begin_inset Text + +\layout Standard + +Run faster. +\end_inset + + + + +\begin_inset Text + +\layout Standard + +-- +\end_inset + + +\begin_inset Text + +\layout Standard + + +\series bold +destroy +\end_inset + + +\begin_inset Text + +\layout Standard + +As a builder class, destroy the structure in front of the player. +\end_inset + + + + +\begin_inset Text + +\layout Standard + +-- +\end_inset + + +\begin_inset Text + +\layout Standard + + +\series bold +itemact +\end_inset + + +\begin_inset Text + +\layout Standard + +If held, activate the specified item. + For weapons this will select them. +\end_inset + + + + +\begin_inset Text + +\layout Standard + +-- +\end_inset + + +\begin_inset Text + +\layout Standard + + +\series bold +itemdeact +\end_inset + + +\begin_inset Text + +\layout Standard + +If held, deactivate the specified item. +\end_inset + + + + +\begin_inset Text + +\layout Standard + +-- +\end_inset + + +\begin_inset Text + +\layout Standard + + +\series bold +itemtoggle +\end_inset + + +\begin_inset Text + +\layout Standard + +If held, toggle the state of the specified item. +\end_inset + + + + +\begin_inset Text + +\layout Standard + +-- +\end_inset + + +\begin_inset Text + +\layout Standard + + +\series bold +sell +\end_inset + + +\begin_inset Text + +\layout Standard + +If held and within range of an +\emph on +armoury +\emph default +, sell the specified item. +\end_inset + + + + +\begin_inset Text + +\layout Standard + +-- +\end_inset + + +\begin_inset Text + +\layout Standard + + +\series bold +sell weapons +\end_inset + + +\begin_inset Text + +\layout Standard + +If within range of an +\emph on +armoury +\emph default +, sell all weapons. +\end_inset + + + + +\begin_inset Text + +\layout Standard + +-- +\end_inset + + +\begin_inset Text + +\layout Standard + + +\series bold +sell upgrades +\end_inset + + +\begin_inset Text + +\layout Standard + +If within range of an +\emph on +armoury +\emph default +, sell all upgrades. +\end_inset + + + + +\begin_inset Text + +\layout Standard + +-- +\end_inset + + +\begin_inset Text + +\layout Standard + + +\series bold +buy +\end_inset + + +\begin_inset Text + +\layout Standard + +If within range of an +\emph on +armoury +\emph default + and sufficiently wealthy, buy the specified item. +\end_inset + + + + +\begin_inset Text + +\layout Standard + +-- +\end_inset + + +\begin_inset Text + +\layout Standard + + +\series bold +class +\end_inset + + +\begin_inset Text + +\layout Standard + +Given sufficient kills, evolve to the specified class. +\end_inset + + + + +\begin_inset Text + +\layout Standard + +-- +\end_inset + + +\begin_inset Text + +\layout Standard + + +\series bold +build +\end_inset + + +\begin_inset Text + +\layout Standard + +As a builder class, build the specified structure. +\end_inset + + + + +\end_inset + + +\layout Standard + + +\series bold + +\series default + -- +\emph on +blaster, rifle, ckit, ackit, shotgun, lgun, prifle, mdriver, flamer, chaingun, + lcannon, psaw, gren, medkit, jetpack +\layout Standard + + +\series bold + +\series default + -- +\emph on +builder, builderupg, level0, level1, level1upg, level2, level2upg, level3, + level3upg, level4 +\layout Standard + + +\series bold + +\series default + -- +\emph on +eggpod, barricade, booster, acid_tube, hive, trapper, overmind, hovel, telenode, + medistat, mgturret, tesla, dcc, arm, reactor, repeater +\layout Subsection + +Particle System +\layout Standard + +Files matching the pattern scripts/*.particle are loaded as particle system + description files. + Each .particle file can contain an arbitrary number of discrete particle + systems, much like a .shader file can house many shaders. + A particle system is declared by a name followed by curly braces within + which the functionality of the particle system is defined. + For example: +\layout LyX-Code + +aShinyNewParticleSystem { } +\layout Standard + +Inside the particle system declaration are placed up to four particle ejectors. + Ejectors are identified by the keyword ejector and curly braces: +\layout LyX-Code + +aShinyNewParticleSystem +\layout LyX-Code + +{ +\layout LyX-Code + + ejector { } +\layout LyX-Code + + ejector { } +\layout LyX-Code + + thirdPersonOnly +\layout LyX-Code + +} +\layout Standard + +The thirdPersonOnly keyword may be used to specify that the particle system + is not visible from the first person if it relates to that client. + The role of the particle ejector is to create some number of new particles + at a defined rate. + These attributes are controlled by the following parameters: +\layout Itemize + + +\emph on +count |infinite +\emph default + - the number of particles this ejector will spawn. +\layout Itemize + + +\emph on +delay +\emph default + - the delay in msec before the ejector starts spawning. +\layout Itemize + + +\emph on +period +\emph default + - the period between particle ejections. +\layout Standard + +It is perfectly acceptable to have an initial period of zero. + In this case the number of particles specified by the count keyword will + be ejected at once. + It is not permissible to have count infinite and a period of zero for obvious + reasons. +\layout Standard + +At ejection time each ejector creates up to four new particles based on + templates. + These are specified in the ejector section using the particle keyword: +\layout LyX-Code + +aShinyNewParticleSystem +\layout LyX-Code + +{ +\layout LyX-Code + + ejector +\layout LyX-Code + + { +\layout LyX-Code + + particle { } +\layout LyX-Code + + particle { } +\layout LyX-Code + + count 50 +\layout LyX-Code + + delay 0 +\layout LyX-Code + + period 0 - 0 +\layout LyX-Code + + } +\layout LyX-Code + +} +\layout Standard + +Each particle template has a number of attributes: +\layout Itemize + + +\emph on +shader |sync ... + +\emph default + - this specifies the shaders to use for the particle. + The frame rate can be set to a static rate or the +\emph on +sync +\emph default + parameter can be used in which case the frame rate will be synchronised + to the lifetime of the particle such that the first frame is displayed + on birth and the last frame is displayed immediately before death. +\layout Itemize + +model ... + - use one of the specified models as the particle. + This cannot be used in conjunction with the shader keyword. +\layout Itemize + +modelAnmation |sync - animation + parameters to use when model particles are employed. +\layout Itemize + + +\emph on +displacement +\emph default + - a static displacement about the attachment point. + The +\emph on +variance +\emph default + parameter specifies a random displacement in all axes. +\layout Itemize + + +\emph on +normalDisplacement +\emph default + - for particle systems that have their normal set (impact particle systems + for example) this specifies the magnitude of a displacement along the normal. +\layout Itemize + + +\emph on +velocityType static|static_transform|tag|cent|normal +\emph default + - this specifies how the particle will compute its initial velocity. + +\emph on +static +\emph default + means it is specified statically in the .particle file, +\emph on +static_transform means the same, except that it is transformed by the orientatio +n matrix of what it is attached to, tag +\emph default + means the velocity is in the direction of the tag it is attached to, +\emph on +cent +\emph default + means the velocity is in the direction of the cent it is attached to and + +\emph on +normal +\emph default + means the velocity is in the direction of the particle system normal. +\layout Itemize + + +\emph on +velocityDir linear|point +\emph default + - this specifies whether the initial velocity is computed as a simple direction + or as the direction towards a secondary point (defined by +\emph on +velocityPoint +\emph default + or dynamically through +\emph on +velocityType cent +\emph default +). +\layout Itemize + + +\emph on +velocity +\emph default + - for when +\emph on +velocityType +\emph default + +\emph on +static +\emph default + is present this specifies the direction. + The +\emph on +variance +\emph default + here is specified in degrees e.g. + "~5" - up to 5 degrees deviation. +\layout Itemize + + +\emph on +velocityMagnitude +\emph default + - the magnitude of the velocity. +\layout Itemize + + +\emph on +velocityPoint +\emph default + - for when +\emph on +velocityType static +\emph default + and +\emph on +velocityDir point +\emph default + are present this specifies the point to move towards. +\layout Itemize + + +\emph on +parentVelocityFraction +\emph default + - for when the particle system is attached to a cent this specifies the + fraction of the cent's velocity that is added to the particle's velocity. +\layout Itemize + + +\emph on +accelerationType static|static_transform|tag|cent|normal +\emph default + - this specifies how the particle will compute its acceleration. + +\emph on +static +\emph default + means it is specified statically in the .particle file, +\emph on +static_transform means the same, except that it is transformed by the orientatio +n matrix of what it is attached to, +\emph default + +\emph on +tag +\emph default + means the acceleration is in the direction of the tag it is attached to, + +\emph on +cent +\emph default + means the acceleration is in the direction of the cent it is attached to + and +\emph on +normal +\emph default + means the acceleration is in the direction of the particle system normal. +\layout Itemize + + +\emph on +accelerationDir linear|point +\emph default + - this specifies whether the acceleration is computed as a simple direction + or as the direction towards a secondary point (defined by +\emph on +accelerationPoint +\emph default + or dynamically through +\emph on +accelerationType cent +\emph default +). +\layout Itemize + + +\emph on +acceleration +\emph default + - for when +\emph on +accelerationType +\emph default + static is present this specifies the direction. + The +\emph on +variance +\emph default + here is specified in degrees e.g. + "~5" - up to 5 degrees deviation. +\layout Itemize + + +\emph on +accelerationMagnitude +\emph default + - the magnitude of the acceleration. +\layout Itemize + + +\emph on +accelerationPoint +\emph default + - for when +\emph on +accelerationType static +\emph default + and +\emph on +accelerationDir point +\emph default + are present this specifies the point to move towards. +\layout Itemize + + +\emph on +bounce |cull +\emph default + - the fraction of velocity that is reflected when a particle collides. + If this is set to 0.0 the particle won't collide. + When +\emph on +cull +\emph default + is used particles are culled as soon as they collide with objects. +\layout Itemize + +bounceMark - make a mark at each bounce point + for up to bounces. +\layout Itemize + +bounceSound - make a sound at each bounce point for up to + bounces. +\layout Itemize + +dynamicLight { } + - attach a dynamic light to this particle. +\layout Itemize + +color { } { } - color the particle + where refers to the initial color component and refers to the final + color component. +\layout Itemize + + +\emph on +overdrawProtection +\emph default + - cull particles that occupy a large amount of screen space. +\layout Itemize + + +\emph on +realLight +\emph default + - light particles using the lightgrid instead of fullbright. +\layout Itemize + + +\emph on +cullOnStartSolid +\emph default + - cull particles that are spawned inside brushes. +\layout Itemize + + +\emph on +radius +\emph default + - the radius of the particle throughout its lifetime. + The +\emph on +delay +\emph default + parameter specifies the time in msec before radius scaling begins. + The +\emph on +initial +\emph default + and +\emph on +final +\emph default + parameters specify the radii of the particle in quake units. +\layout Itemize + + +\emph on +alpha +\emph default + - the alpha of the particle throughout its lifetime. + The +\emph on +delay +\emph default + parameter specifies the time in msec before alpha scaling begins. + The +\emph on +initial +\emph default + and +\emph on +final +\emph default + parameters specify the alpha of the particle where 1.0 is totally opaque + and 0.0 is totally transparent. +\layout Itemize + + +\emph on +rotation +\emph default + - the rotation of the particle throughout its lifetime. + The +\emph on +delay +\emph default + parameter specifies the time in msec before the rotation begins. + The +\emph on +initial +\emph default + and +\emph on +final +\emph default + parameters specify the rotation of the particle in degrees. +\layout Itemize + + +\emph on +lifeTime