summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorenneract <trem.redman@gmail.com>2014-02-25 13:03:43 +0100
committerenneract <trem.redman@gmail.com>2014-02-25 13:03:43 +0100
commitdac3d3127fc94231bdde0c0822bb12de01e9e836 (patch)
tree17829bc1a1b0ddb2d49421c5ea0114b4c2eff436
parentcd9f8731a13a29d51a401f67ec2aa0b8962e01c8 (diff)
0.1.7
-rw-r--r--assets/configs/buildables/capbank.cfg5
-rw-r--r--assets/configs/buildables/refinery.cfg5
-rw-r--r--assets/configs/buildables/rtg.cfg5
-rw-r--r--assets/credits.txt94
-rw-r--r--assets/default.cfg97
-rw-r--r--assets/emoticons/1up_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/F1_1x1.tgabin0 -> 2861 bytes
-rwxr-xr-xassets/emoticons/F2_1x1.tgabin0 -> 2754 bytes
-rwxr-xr-xassets/emoticons/F3_1x1.tgabin0 -> 2846 bytes
-rw-r--r--assets/emoticons/FAP_1x1.tgabin0 -> 16402 bytes
-rw-r--r--assets/emoticons/Tremulous_1x1.tgabin0 -> 18997 bytes
-rw-r--r--assets/emoticons/aaron_4x1.tgabin0 -> 14781 bytes
-rwxr-xr-xassets/emoticons/acidtube_1x1.tgabin0 -> 9773 bytes
-rwxr-xr-xassets/emoticons/act-up_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/advbasilisk_1x1.tgabin0 -> 6307 bytes
-rwxr-xr-xassets/emoticons/advdragoon_1x1.tgabin0 -> 4811 bytes
-rwxr-xr-xassets/emoticons/advdretch_1x1.tgabin0 -> 4544 bytes
-rwxr-xr-xassets/emoticons/advgranger_1x1.tgabin0 -> 6238 bytes
-rwxr-xr-xassets/emoticons/advmarauder_1x1.tgabin0 -> 3917 bytes
-rwxr-xr-xassets/emoticons/advtyrant_1x1.tgabin0 -> 4975 bytes
-rwxr-xr-xassets/emoticons/ah_1x1.tgabin0 -> 9425 bytes
-rwxr-xr-xassets/emoticons/airplane_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/alien_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/angel_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/angry_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/anrere_1x1.tgabin0 -> 7480 bytes
-rw-r--r--assets/emoticons/apple_1x1.tgabin0 -> 2822 bytes
-rw-r--r--assets/emoticons/approved_2x1.tgabin0 -> 4456 bytes
-rwxr-xr-xassets/emoticons/armoury_1x1.tgabin0 -> 11939 bytes
-rwxr-xr-xassets/emoticons/arrogant_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/at-wits-end_1x1.tgabin0 -> 4114 bytes
-rw-r--r--assets/emoticons/bacon_2x1.tgabin0 -> 4197 bytes
-rwxr-xr-xassets/emoticons/bad_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/barricade_1x1.tgabin0 -> 6110 bytes
-rwxr-xr-xassets/emoticons/bashful_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/basilisk_1x1.tgabin0 -> 6305 bytes
-rwxr-xr-xassets/emoticons/beat-up_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/beauty_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/beer_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/bgranger_1x1.tgabin0 -> 10716 bytes
-rwxr-xr-xassets/emoticons/bheart_1x1.tgabin0 -> 5889 bytes
-rwxr-xr-xassets/emoticons/bigping_1x1.tgabin0 -> 16279 bytes
-rw-r--r--assets/emoticons/bigwimply_1x1.tgabin0 -> 1430 bytes
-rwxr-xr-xassets/emoticons/blaster_1x1.tgabin0 -> 5634 bytes
-rw-r--r--assets/emoticons/blastershot1_2x1.tgabin0 -> 2603 bytes
-rw-r--r--assets/emoticons/blastershot2_2x1.tgabin0 -> 2490 bytes
-rwxr-xr-xassets/emoticons/blowkiss_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/bomb_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/booster_1x1.tgabin0 -> 4862 bytes
-rwxr-xr-xassets/emoticons/bowl_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/boy_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/brb_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/bsuit_1x1.tgabin0 -> 4458 bytes
-rwxr-xr-xassets/emoticons/bulgy-eyes_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/bunny_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/bye_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/cake_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/call-me_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/camera_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/can_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/car_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/cat_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/chaingun_2x1.tgabin0 -> 9847 bytes
-rw-r--r--assets/emoticons/chaingunshot1_2x1.tgabin0 -> 5346 bytes
-rwxr-xr-xassets/emoticons/chicken_1x1.tgabin0 -> 4114 bytes
-rw-r--r--assets/emoticons/chrome_1x1.tgabin0 -> 3557 bytes
-rw-r--r--assets/emoticons/chronic_1x1.tgabin0 -> 16402 bytes
-rwxr-xr-xassets/emoticons/cigarette_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/ckit_2x1.tgabin0 -> 14139 bytes
-rwxr-xr-xassets/emoticons/clap_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/clock_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/cloudy_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/clover_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/clown_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/coffee_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/coins_1x1.tgabin0 -> 4114 bytes
-rw-r--r--assets/emoticons/colloquy_1x1.tgabin0 -> 3387 bytes
-rw-r--r--assets/emoticons/communist_1x1.tgabin0 -> 3486 bytes
-rwxr-xr-xassets/emoticons/computer_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/confused_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/console_1x1.tgabin0 -> 4114 bytes
-rw-r--r--assets/emoticons/cookiemonster_1x1.tgabin0 -> 6793 bytes
-rw-r--r--assets/emoticons/cork_1x1.tgabin0 -> 9109 bytes
-rwxr-xr-xassets/emoticons/cow_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/cowboy_1x1.tgabin0 -> 4114 bytes
-rw-r--r--assets/emoticons/crab_1x1.tgabin0 -> 7378 bytes
-rwxr-xr-xassets/emoticons/crying_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/curl-lip_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/curse_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/cute_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/cyclops_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/dance_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/dazed_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/defcomp_1x1.tgabin0 -> 10338 bytes
-rw-r--r--assets/emoticons/democrat_1x1.tgabin0 -> 3300 bytes
-rw-r--r--assets/emoticons/denied_2x1.tgabin0 -> 4176 bytes
-rwxr-xr-xassets/emoticons/desire_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/devil_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/disappointed_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/disdain_1x1.tgabin0 -> 4114 bytes
-rw-r--r--assets/emoticons/dkok_2x1.tgabin0 -> 2676 bytes
-rwxr-xr-xassets/emoticons/doctor_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/dog_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/doh_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/dont-know_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/dragoon_1x1.tgabin0 -> 4827 bytes
-rwxr-xr-xassets/emoticons/dretch_1x1.tgabin0 -> 4544 bytes
-rwxr-xr-xassets/emoticons/drink_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/drool_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/ds_1x1.tgabin0 -> 4634 bytes
-rw-r--r--assets/emoticons/eagle_1x1.tgabin0 -> 10905 bytes
-rwxr-xr-xassets/emoticons/earth_1x1.tgabin0 -> 13648 bytes
-rwxr-xr-xassets/emoticons/eat_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/egg_1x1.tgabin0 -> 7436 bytes
-rwxr-xr-xassets/emoticons/embarrassed_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/excruciating_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/eyeroll_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/f1b_1x1.tgabin0 -> 2655 bytes
-rwxr-xr-xassets/emoticons/f2b_1x1.tgabin0 -> 2628 bytes
-rwxr-xr-xassets/emoticons/f3b_1x1.tgabin0 -> 2624 bytes
-rwxr-xr-xassets/emoticons/female-fighter_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/film_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/fingers-crossed_1x1.tgabin0 -> 4114 bytes
-rw-r--r--assets/emoticons/firefox_1x1.tgabin0 -> 3572 bytes
-rwxr-xr-xassets/emoticons/flag_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/flags/a_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ad_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ae_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/af_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ai_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/al_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/am_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ao_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ar_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/as_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/at_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/au_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/aw_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ax_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/az_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/b_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ba_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/bb_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/bd_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/be_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/bf_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/bh_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/bi_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/bj_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/bm_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/bo_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/br_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/bs_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/bt_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/bv_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/bw_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/by_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/bz_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/c_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ca_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/catalonia_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/cc_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/cd_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/cf_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ch_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ci_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ck_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/cl_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/cm_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/co_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/cr_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/cs_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/cu_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/cv_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/cx_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/cy_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/cz_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/de_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/dj_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/dk_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/dm_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/do_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/dz_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/e_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ec_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ee_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/eh_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/england_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/er_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/es_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/et_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/eu_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/fam_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/fi_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/fj_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/fk_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/fm_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/fo_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/fr_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ga_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/gb_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/gd_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ge_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/gf_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/gh_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/gi_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/gl_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/gm_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/gq_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/gr_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/gs_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/gt_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/gu_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/gw_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/gy_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/h_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/hk_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/hm_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/hr_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ht_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/hu_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/i_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/id_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ie_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/il_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/io_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/iq_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ir_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/is_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/it_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/j_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/jm_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/jo_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/k_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ke_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/kh_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ki_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/km_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/kr_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/kw_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ky_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/kz_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/la_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/lb_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/lc_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/li_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/lk_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/lr_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ls_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/lt_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/lu_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/lv_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ly_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/m_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ma_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/mc_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/md_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/me_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/mh_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/mk_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ml_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/mm_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/mo_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/mq_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/mr_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ms_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/mt_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/mu_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/mv_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/mw_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/mx_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/my_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/mz_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/na_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/nc_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ne_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/nf_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ni_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/nl_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/no_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/nr_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/nu_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/nz_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/om_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/pa_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/pe_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/pf_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ph_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/pk_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/pl_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/pm_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/pr_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ps_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/pt_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/pw_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/py_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/qa_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/re_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ro_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/rs_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ru_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/rw_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/s_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/sa_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/sb_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/sc_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/scld_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/sd_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/se_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/sh_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/si_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/sj_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/sk_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/sl_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/sm_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/so_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/sr_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/st_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/sv_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/sy_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/sz_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/t_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/tc_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/td_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/tf_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/th_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/tj_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/tk_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/tl_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/tm_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/to_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/tr_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/tt_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/tv_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/tw_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/tz_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/u_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ua_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/um_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/us_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/uy_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/uz_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/v_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/va_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/vc_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ve_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/vi_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/vu_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/wa_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/wf_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ws_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/ye_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/yt_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/za_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/zm_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flags/zw_1x1.tgabin0 -> 1042 bytes
-rwxr-xr-xassets/emoticons/flamer_2x1.tgabin0 -> 17303 bytes
-rwxr-xr-xassets/emoticons/foot-in-mouth_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/forcefield_1x1.tgabin0 -> 7615 bytes
-rwxr-xr-xassets/emoticons/freaked-out_1x1.tgabin0 -> 4114 bytes
-rw-r--r--assets/emoticons/fry_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/ftrapper_1x1.tgabin0 -> 10989 bytes
-rwxr-xr-xassets/emoticons/ghost_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/giggle_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/girl_1x1.tgabin0 -> 4114 bytes
-rw-r--r--assets/emoticons/glameow_1x1.tgabin0 -> 2875 bytes
-rwxr-xr-xassets/emoticons/glasses-cool_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/glasses-nerdy_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/gleaf_1x1.tgabin0 -> 9572 bytes
-rwxr-xr-xassets/emoticons/go-away_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/goat_1x1.tgabin0 -> 4114 bytes
-rw-r--r--assets/emoticons/goldgunl_2x1.tgabin0 -> 8210 bytes
-rw-r--r--assets/emoticons/goldgunr_2x1.tgabin0 -> 8210 bytes
-rwxr-xr-xassets/emoticons/good_1x1.tgabin0 -> 4114 bytes
-rw-r--r--assets/emoticons/gotmilk_2x1.tgabin0 -> 5632 bytes
-rwxr-xr-xassets/emoticons/granger_1x1.tgabin0 -> 6741 bytes
-rw-r--r--assets/emoticons/greenparty_1x1.tgabin0 -> 8042 bytes
-rwxr-xr-xassets/emoticons/grenade_1x1.tgabin0 -> 8975 bytes
-rw-r--r--assets/emoticons/gxchat_1x1.tgabin0 -> 3146 bytes
-rwxr-xr-xassets/emoticons/hammer_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/handcuffs_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/handshake_1x1.tgabin0 -> 4114 bytes
-rw-r--r--assets/emoticons/hankhill_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/heart_1x1.tgabin0 -> 11812 bytes
-rwxr-xr-xassets/emoticons/highfive_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/hive_1x1.tgabin0 -> 9506 bytes
-rw-r--r--assets/emoticons/hl2_1x1.tgabin0 -> 2024 bytes
-rwxr-xr-xassets/emoticons/hovel_1x1.tgabin0 -> 6692 bytes
-rwxr-xr-xassets/emoticons/hug-left_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/hug-right_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/human_1x1.tgabin0 -> 4878 bytes
-rwxr-xr-xassets/emoticons/hypnotized_1x1.tgabin0 -> 4114 bytes
-rw-r--r--assets/emoticons/ie_1x1.tgabin0 -> 2598 bytes
-rwxr-xr-xassets/emoticons/ikusari_1x1.tgabin0 -> 9578 bytes
-rwxr-xr-xassets/emoticons/in-love_1x1.tgabin0 -> 4114 bytes
-rw-r--r--assets/emoticons/irssi_1x1.tgabin0 -> 1749 bytes
-rwxr-xr-xassets/emoticons/island_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/jump_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/jupiter_1x1.tgabin0 -> 14294 bytes
-rw-r--r--assets/emoticons/kiss2_1x1.tgabin0 -> 12332 bytes
-rwxr-xr-xassets/emoticons/kiss_1x1.tgabin0 -> 12332 bytes
-rwxr-xr-xassets/emoticons/kissed_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/kissing_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/knife_1x1.tgabin0 -> 4114 bytes
-rw-r--r--assets/emoticons/konversation_1x1.tgabin0 -> 3926 bytes
-rwxr-xr-xassets/emoticons/kor1_1x1.tgabin0 -> 9470 bytes
-rwxr-xr-xassets/emoticons/kor2_1x1.tgabin0 -> 14824 bytes
-rwxr-xr-xassets/emoticons/kor3_1x1.tgabin0 -> 11036 bytes
-rwxr-xr-xassets/emoticons/kor_1x1.tgabin0 -> 10684 bytes
-rw-r--r--assets/emoticons/korban1_8x1.tgabin0 -> 10447 bytes
-rw-r--r--assets/emoticons/korban2_8x1.tgabin0 -> 11984 bytes
-rwxr-xr-xassets/emoticons/korn_2x1.tgabin0 -> 14383 bytes
-rwxr-xr-xassets/emoticons/korx1_1x1.tgabin0 -> 10545 bytes
-rwxr-xr-xassets/emoticons/korx2_1x1.tgabin0 -> 15699 bytes
-rwxr-xr-xassets/emoticons/korx3_1x1.tgabin0 -> 13205 bytes
-rw-r--r--assets/emoticons/lambda_1x1.tgabin0 -> 2200 bytes
-rwxr-xr-xassets/emoticons/lamp_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/lasgun_2x1.tgabin0 -> 12871 bytes
-rw-r--r--assets/emoticons/lasgunshot2_2x1.tgabin0 -> 5212 bytes
-rwxr-xr-xassets/emoticons/lashes_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/laugh_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/lcannon_2x1.tgabin0 -> 13825 bytes
-rw-r--r--assets/emoticons/lcannonshot1_2x1.tgabin0 -> 19675 bytes
-rw-r--r--assets/emoticons/lcannonshot2_2x1.tgabin0 -> 25142 bytes
-rwxr-xr-xassets/emoticons/liquor_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/loser_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/love-over_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/love_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/lying_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/mad-tongue_1x1.tgabin0 -> 4114 bytes
-rw-r--r--assets/emoticons/magnum_2x1.tgabin0 -> 7812 bytes
-rwxr-xr-xassets/emoticons/mail_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/male-fighter1_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/male-fighter2_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/marauder_1x1.tgabin0 -> 3833 bytes
-rwxr-xr-xassets/emoticons/mars_1x1.tgabin0 -> 13437 bytes
-rwxr-xr-xassets/emoticons/mdriver_2x1.tgabin0 -> 8518 bytes
-rw-r--r--assets/emoticons/mdrivershot1_2x1.tgabin0 -> 3612 bytes
-rw-r--r--assets/emoticons/mdrivershot2_2x1.tgabin0 -> 6465 bytes
-rwxr-xr-xassets/emoticons/mean_1x1.tgabin0 -> 4114 bytes
-rw-r--r--assets/emoticons/meatwad_1x1.tgabin0 -> 3300 bytes
-rwxr-xr-xassets/emoticons/medstat_1x1.tgabin0 -> 8355 bytes
-rwxr-xr-xassets/emoticons/meeting_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/mercury_1x1.tgabin0 -> 8053 bytes
-rwxr-xr-xassets/emoticons/messed_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/mg_1x1.tgabin0 -> 8696 bytes
-rw-r--r--assets/emoticons/midori_1x1.tgabin0 -> 3056 bytes
-rwxr-xr-xassets/emoticons/milk_1x1.tgabin0 -> 8572 bytes
-rw-r--r--assets/emoticons/mirc_1x1.tgabin0 -> 3887 bytes
-rwxr-xr-xassets/emoticons/mobile_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/mohawk_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/moneymouth_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/monkey_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/moon_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/msn_1x1.tgabin0 -> 3181 bytes
-rwxr-xr-xassets/emoticons/music_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/musical-note_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/nailbiting_1x1.tgabin0 -> 4114 bytes
-rw-r--r--assets/emoticons/narwahl_1x1.tgabin0 -> 3721 bytes
-rwxr-xr-xassets/emoticons/neptune_1x1.tgabin0 -> 13435 bytes
-rwxr-xr-xassets/emoticons/neutral_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/nutella_1x1.tgabin0 -> 10866 bytes
-rwxr-xr-xassets/emoticons/on-the-phone_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/os/apple_1x1.tgabin0 -> 16428 bytes
-rwxr-xr-xassets/emoticons/os/arch2_1x1.tgabin0 -> 16428 bytes
-rwxr-xr-xassets/emoticons/os/arch3_1x1.tgabin0 -> 16428 bytes
-rwxr-xr-xassets/emoticons/os/arch_1x1.tgabin0 -> 16428 bytes
-rwxr-xr-xassets/emoticons/os/centos_1x1.tgabin0 -> 8325 bytes
-rwxr-xr-xassets/emoticons/os/debian_1x1.tgabin0 -> 16428 bytes
-rwxr-xr-xassets/emoticons/os/dsl_1x1.tgabin0 -> 16428 bytes
-rwxr-xr-xassets/emoticons/os/fedora_1x1.tgabin0 -> 16428 bytes
-rwxr-xr-xassets/emoticons/os/freebsd_1x1.tgabin0 -> 14054 bytes
-rwxr-xr-xassets/emoticons/os/gentoo_1x1.tgabin0 -> 16428 bytes
-rwxr-xr-xassets/emoticons/os/gnome_1x1.tgabin0 -> 16428 bytes
-rwxr-xr-xassets/emoticons/os/kanotix_1x1.tgabin0 -> 16428 bytes
-rwxr-xr-xassets/emoticons/os/kde_1x1.tgabin0 -> 16428 bytes
-rwxr-xr-xassets/emoticons/os/knoppix_1x1.tgabin0 -> 16428 bytes
-rwxr-xr-xassets/emoticons/os/kubuntu_1x1.tgabin0 -> 16428 bytes
-rwxr-xr-xassets/emoticons/os/linspire_1x1.tgabin0 -> 16428 bytes
-rwxr-xr-xassets/emoticons/os/linux_1x1.tgabin0 -> 16428 bytes
-rwxr-xr-xassets/emoticons/os/mac_1x1.tgabin0 -> 16428 bytes
-rwxr-xr-xassets/emoticons/os/mandriva_1x1.tgabin0 -> 16428 bytes
-rwxr-xr-xassets/emoticons/os/mint_1x1.tgabin0 -> 11227 bytes
-rwxr-xr-xassets/emoticons/os/netbsd_1x1.tgabin0 -> 16428 bytes
-rwxr-xr-xassets/emoticons/os/openbsd_1x1.tgabin0 -> 16428 bytes
-rwxr-xr-xassets/emoticons/os/pclinuxos_1x1.tgabin0 -> 12354 bytes
-rwxr-xr-xassets/emoticons/os/puppy_1x1.tgabin0 -> 16428 bytes
-rwxr-xr-xassets/emoticons/os/redhat_1x1.tgabin0 -> 16428 bytes
-rwxr-xr-xassets/emoticons/os/sabayon_1x1.tgabin0 -> 12166 bytes
-rwxr-xr-xassets/emoticons/os/slackware_1x1.tgabin0 -> 9918 bytes
-rwxr-xr-xassets/emoticons/os/slax_1x1.tgabin0 -> 10564 bytes
-rwxr-xr-xassets/emoticons/os/suse_1x1.tgabin0 -> 16428 bytes
-rwxr-xr-xassets/emoticons/os/symphony_1x1.tgabin0 -> 16428 bytes
-rwxr-xr-xassets/emoticons/os/ubuntu_1x1.tgabin0 -> 16428 bytes
-rwxr-xr-xassets/emoticons/os/windows_1x1.tgabin0 -> 12276 bytes
-rwxr-xr-xassets/emoticons/os/xfce_1x1.tgabin0 -> 16428 bytes
-rwxr-xr-xassets/emoticons/os/xubuntu_1x1.tgabin0 -> 6697 bytes
-rwxr-xr-xassets/emoticons/overmind_1x1.tgabin0 -> 7880 bytes
-rw-r--r--assets/emoticons/painsawShot1_2x1.tgabin0 -> 6828 bytes
-rwxr-xr-xassets/emoticons/painsaw_2x1.tgabin0 -> 14135 bytes
-rwxr-xr-xassets/emoticons/party_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/peace_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/phone_1x1.tgabin0 -> 4114 bytes
-rw-r--r--assets/emoticons/pidgin_1x1.tgabin0 -> 3301 bytes
-rwxr-xr-xassets/emoticons/pig_1x1.tgabin0 -> 4114 bytes
-rw-r--r--assets/emoticons/pikachu_1x1.tgabin0 -> 2612 bytes
-rwxr-xr-xassets/emoticons/pill_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/pirate_1x1.tgabin0 -> 4114 bytes
-rw-r--r--assets/emoticons/pirateparty_1x1.tgabin0 -> 5958 bytes
-rwxr-xr-xassets/emoticons/pissed-off_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/pizza_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/plate_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/poop_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/pray_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/present_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/prifle_2x1.tgabin0 -> 14233 bytes
-rw-r--r--assets/emoticons/prifleshot1_2x1.tgabin0 -> 4549 bytes
-rwxr-xr-xassets/emoticons/pumpkin_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/qq_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/question_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/quiet_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/rain_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/rainbow_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/reactor_1x1.tgabin0 -> 10112 bytes
-rwxr-xr-xassets/emoticons/repeater_1x1.tgabin0 -> 9801 bytes
-rw-r--r--assets/emoticons/republican_1x1.tgabin0 -> 3389 bytes
-rwxr-xr-xassets/emoticons/retard_1x1.tgabin0 -> 16279 bytes
-rwxr-xr-xassets/emoticons/rifle_2x1.tgabin0 -> 15418 bytes
-rw-r--r--assets/emoticons/rifleshot1_2x1.tgabin0 -> 5207 bytes
-rw-r--r--assets/emoticons/rifleshot2_2x1.tgabin0 -> 6713 bytes
-rwxr-xr-xassets/emoticons/rk_1x1.tgabin0 -> 16402 bytes
-rwxr-xr-xassets/emoticons/rose-dead_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/rose_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/rotfl_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/sad_1x1.tgabin0 -> 4114 bytes
-rw-r--r--assets/emoticons/safari_1x1.tgabin0 -> 3434 bytes
-rwxr-xr-xassets/emoticons/sarcastic_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/saturn_1x1.tgabin0 -> 7057 bytes
-rwxr-xr-xassets/emoticons/search_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/secret_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/shame_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/sheep_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/shock_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/shotgun_2x1.tgabin0 -> 13558 bytes
-rw-r--r--assets/emoticons/shotgunshot1_2x1.tgabin0 -> 11786 bytes
-rwxr-xr-xassets/emoticons/shout_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/shut-mouth_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/sick_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/sidefrown_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/silly_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/sinister_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/skeleton_1x1.tgabin0 -> 4114 bytes
-rw-r--r--assets/emoticons/skeletor_2x1.tgabin0 -> 4979 bytes
-rwxr-xr-xassets/emoticons/skywalker_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/sleepy_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/smile-big_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/smile_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/smirk_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/snail_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/snicker_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/snowman_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/soccerball_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/soda_1x1.tgabin0 -> 5338 bytes
-rw-r--r--assets/emoticons/soh2_1x1.tgabin0 -> 16402 bytes
-rwxr-xr-xassets/emoticons/soh_1x1.tgabin0 -> 6966 bytes
-rwxr-xr-xassets/emoticons/soldier_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/spam_1x1.tgabin0 -> 4172 bytes
-rw-r--r--assets/emoticons/squirrel_2x1.tgabin0 -> 8210 bytes
-rwxr-xr-xassets/emoticons/star_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/starving_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/stop_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/struggle_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/sun_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/swatter_1x1.tgabin0 -> 3889 bytes
-rwxr-xr-xassets/emoticons/sweat_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/talktohand_1x1.tgabin0 -> 4114 bytes
-rw-r--r--assets/emoticons/teamspeak_1x1.tgabin0 -> 3981 bytes
-rwxr-xr-xassets/emoticons/teeth_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/telenode_1x1.tgabin0 -> 9795 bytes
-rwxr-xr-xassets/emoticons/terror_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/tesla_1x1.tgabin0 -> 6126 bytes
-rwxr-xr-xassets/emoticons/thinking_1x1.tgabin0 -> 4114 bytes
-rw-r--r--assets/emoticons/thorn1_1x1.tgabin0 -> 1280 bytes
-rw-r--r--assets/emoticons/thorn2_1x1.tgabin0 -> 1412 bytes
-rwxr-xr-xassets/emoticons/thunder_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/time-out_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/tongue_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/trapper_1x1.tgabin0 -> 9113 bytes
-rwxr-xr-xassets/emoticons/tremble_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/turret_1x1.tgabin0 -> 4648 bytes
-rwxr-xr-xassets/emoticons/turtle_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/tv_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/tyrant_1x1.tgabin0 -> 4959 bytes
-rwxr-xr-xassets/emoticons/umbrella_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/uranus_1x1.tgabin0 -> 12448 bytes
-rwxr-xr-xassets/emoticons/vampire_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/venus_1x1.tgabin0 -> 11971 bytes
-rwxr-xr-xassets/emoticons/victory_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/waiting_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/watermelon_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/waving_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/weep_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/wilt_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/wink_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/worship_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/xael_2x1.tgabin0 -> 14233 bytes
-rw-r--r--assets/emoticons/xchat_1x1.tgabin0 -> 2996 bytes
-rw-r--r--assets/emoticons/yahoo_1x1.tgabin0 -> 2023 bytes
-rwxr-xr-xassets/emoticons/yawn_1x1.tgabin0 -> 4114 bytes
-rwxr-xr-xassets/emoticons/yin-yang_1x1.tgabin0 -> 4114 bytes
-rw-r--r--assets/gfx/2d/blip.tgabin0 -> 1228 bytes
-rw-r--r--assets/gfx/2d/ch_acircle.tgabin0 -> 42268 bytes
-rw-r--r--assets/gfx/2d/ch_adot.tgabin0 -> 11675 bytes
-rw-r--r--assets/gfx/2d/ch_afriendly.tgabin0 -> 19331 bytes
-rw-r--r--assets/gfx/2d/ch_aheadshot.tgabin0 -> 39227 bytes
-rw-r--r--assets/gfx/2d/ch_circle.tgabin0 -> 34334 bytes
-rw-r--r--assets/gfx/2d/ch_circlehit.tgabin0 -> 38239 bytes
-rw-r--r--assets/gfx/2d/ch_dot.tgabin0 -> 4872 bytes
-rw-r--r--assets/gfx/2d/ch_dothit.tgabin0 -> 13194 bytes
-rw-r--r--assets/gfx/2d/ch_friendly.tgabin0 -> 10686 bytes
-rw-r--r--assets/gfx/2d/digital/0.tgabin0 -> 9386 bytes
-rw-r--r--assets/gfx/2d/digital/1.tgabin0 -> 3632 bytes
-rw-r--r--assets/gfx/2d/digital/2.tgabin0 -> 6359 bytes
-rw-r--r--assets/gfx/2d/digital/3.tgabin0 -> 6304 bytes
-rw-r--r--assets/gfx/2d/digital/4.tgabin0 -> 6305 bytes
-rw-r--r--assets/gfx/2d/digital/5.tgabin0 -> 6437 bytes
-rw-r--r--assets/gfx/2d/digital/6.tgabin0 -> 7512 bytes
-rw-r--r--assets/gfx/2d/digital/7.tgabin0 -> 4458 bytes
-rw-r--r--assets/gfx/2d/digital/8.tgabin0 -> 8466 bytes
-rw-r--r--assets/gfx/2d/digital/9.tgabin0 -> 7391 bytes
-rw-r--r--assets/gfx/2d/digital/comma.tgabin0 -> 2869 bytes
-rw-r--r--assets/gfx/2d/digital/minus.tgabin0 -> 4794 bytes
-rw-r--r--assets/gfx/ckit/background.jpgbin0 -> 21628 bytes
-rw-r--r--assets/gfx/ckit/icon_bp.tgabin0 -> 1944 bytes
-rw-r--r--assets/gfx/ckit/icon_current.tgabin0 -> 1784 bytes
-rw-r--r--assets/gfx/ckit/icon_depth.tgabin0 -> 1730 bytes
-rw-r--r--assets/gfx/ckit/icon_health.tgabin0 -> 3096 bytes
-rw-r--r--assets/gfx/ckit/icon_height.tgabin0 -> 2164 bytes
-rw-r--r--assets/gfx/ckit/icon_network.tgabin0 -> 2920 bytes
-rw-r--r--assets/gfx/ckit/icon_nopower.tgabin0 -> 4904 bytes
-rw-r--r--assets/gfx/ckit/icon_nosurge.tgabin0 -> 4582 bytes
-rw-r--r--assets/gfx/ckit/icon_off.tgabin0 -> 1568 bytes
-rw-r--r--assets/gfx/ckit/icon_power.tgabin0 -> 1654 bytes
-rw-r--r--assets/gfx/ckit/icon_storedbp.tgabin0 -> 4122 bytes
-rw-r--r--assets/gfx/ckit/icon_surge.tgabin0 -> 1370 bytes
-rw-r--r--assets/gfx/ckit/icon_time.tgabin0 -> 3358 bytes
-rw-r--r--assets/gfx/ckit/icon_voltage.tgabin0 -> 1924 bytes
-rw-r--r--assets/gfx/ckit/icon_width.tgabin0 -> 2540 bytes
-rw-r--r--assets/gfx/ckit/noise.jpgbin0 -> 23158 bytes
-rw-r--r--assets/gfx/lightning/lightning01.jpgbin0 -> 113809 bytes
-rw-r--r--assets/models/buildables/capbank/animation.cfg14
-rw-r--r--assets/models/buildables/capbank/capbank.jpgbin0 -> 81251 bytes
-rw-r--r--assets/models/buildables/capbank/capbank.md3bin0 -> 21428 bytes
-rw-r--r--assets/models/buildables/capbank/capbank_lights.jpgbin0 -> 15703 bytes
-rw-r--r--assets/models/buildables/medistat/animation.cfg18
-rw-r--r--assets/models/buildables/refinery/animation.cfg15
-rw-r--r--assets/models/buildables/refinery/refinery.jpgbin0 -> 48604 bytes
-rw-r--r--assets/models/buildables/refinery/refinery.md3bin0 -> 240204 bytes
-rw-r--r--assets/models/buildables/rtg/animation.cfg14
-rw-r--r--assets/models/buildables/rtg/rtg.jpgbin0 -> 182743 bytes
-rw-r--r--assets/models/buildables/rtg/rtg.md3bin0 -> 6404 bytes
-rw-r--r--assets/models/cuboid/concrete/concrete.jpgbin15999 -> 237950 bytes
-rw-r--r--assets/models/cuboid/cracks.tgabin0 -> 85188 bytes
-rw-r--r--assets/models/cuboid/cracks_0.jpgbin3196 -> 0 bytes
-rw-r--r--assets/models/cuboid/cracks_1.jpgbin10416 -> 0 bytes
-rw-r--r--assets/models/cuboid/cracks_2.jpgbin16116 -> 0 bytes
-rw-r--r--assets/models/cuboid/glass/glass.jpgbin4467 -> 59342 bytes
-rw-r--r--assets/models/cuboid/ladder/test.tgabin0 -> 114412 bytes
-rw-r--r--assets/models/cuboid/organic/fragment.tgabin65437 -> 42327 bytes
-rw-r--r--assets/models/cuboid/organic/organic.jpgbin4537 -> 305082 bytes
-rw-r--r--assets/models/cuboid/organic/organic_fx.jpgbin4467 -> 454502 bytes
-rw-r--r--assets/models/cuboid/slime/fragment.tgabin40464 -> 65482 bytes
-rw-r--r--assets/models/cuboid/slime/slime.jpgbin6958 -> 614949 bytes
-rw-r--r--assets/models/players/builder/animation.cfg47
-rw-r--r--assets/models/players/level0/animation.cfg47
-rw-r--r--assets/models/players/level1/animation.cfg48
-rw-r--r--assets/models/players/level2/animation.cfg48
-rw-r--r--assets/models/players/level3/animation.cfg48
-rw-r--r--assets/models/players/level4/animation.cfg48
-rw-r--r--assets/models/weapons/abuild/weapon.cfg11
-rw-r--r--assets/models/weapons/abuildupg/weapon.cfg2
-rw-r--r--assets/models/weapons/blaster/weapon.cfg2
-rw-r--r--assets/models/weapons/chaingun/weapon.cfg20
-rw-r--r--assets/models/weapons/ckit/ckit_background.md3bin0 -> 428 bytes
-rw-r--r--assets/models/weapons/ckit/ckit_bigicona.md3bin0 -> 428 bytes
-rw-r--r--assets/models/weapons/ckit/ckit_bigiconb.md3bin0 -> 428 bytes
-rw-r--r--assets/models/weapons/ckit/ckit_digit.md3bin0 -> 428 bytes
-rw-r--r--assets/models/weapons/ckit/ckit_icon.md3bin0 -> 428 bytes
-rw-r--r--assets/models/weapons/ckit/ckit_overlay.md3bin0 -> 428 bytes
-rw-r--r--assets/models/weapons/ckit/weapon.cfg4
-rw-r--r--assets/models/weapons/flamer/weapon.cfg2
-rw-r--r--assets/models/weapons/lcannon/weapon.cfg36
-rw-r--r--assets/models/weapons/level0/weapon.cfg9
-rw-r--r--assets/models/weapons/level1/weapon.cfg11
-rw-r--r--assets/models/weapons/level1upg/weapon.cfg17
-rw-r--r--assets/models/weapons/level2/weapon.cfg11
-rw-r--r--assets/models/weapons/level2upg/weapon.cfg18
-rw-r--r--assets/models/weapons/level3/weapon.cfg16
-rw-r--r--assets/models/weapons/level3upg/weapon.cfg28
-rw-r--r--assets/models/weapons/level4/weapon.cfg2
-rw-r--r--assets/models/weapons/lgun/weapon.cfg13
-rw-r--r--assets/models/weapons/mdriver/weapon.cfg12
-rw-r--r--assets/models/weapons/prifle/weapon.cfg17
-rw-r--r--assets/models/weapons/psaw/weapon.cfg13
-rw-r--r--assets/models/weapons/rifle/weapon.cfg20
-rw-r--r--assets/models/weapons/shotgun/weapon.cfg14
-rw-r--r--assets/scripts/conkit.shader300
-rw-r--r--assets/scripts/cuboid.particle27
-rw-r--r--assets/scripts/cuboid.shader100
-rw-r--r--assets/sound/buildables/capbank/sound.cfg14
-rw-r--r--assets/sound/buildables/human/powerzap1.wavbin0 -> 49884 bytes
-rw-r--r--assets/sound/buildables/human/powerzap2.wavbin0 -> 90060 bytes
-rw-r--r--assets/sound/buildables/human/powerzap3.wavbin0 -> 112692 bytes
-rw-r--r--assets/sound/buildables/human/powerzap4.wavbin0 -> 136594 bytes
-rw-r--r--assets/sound/buildables/human/switch.wavbin0 -> 40080 bytes
-rw-r--r--assets/sound/buildables/human/unpowered_surge-old1.wavbin0 -> 553998 bytes
-rw-r--r--assets/sound/buildables/human/unpowered_surge.wavbin0 -> 553998 bytes
-rw-r--r--assets/sound/buildables/refinery/idle1.wavbin0 -> 168580 bytes
-rw-r--r--assets/sound/buildables/refinery/sound.cfg14
-rw-r--r--assets/sound/buildables/rtg/idle1.wavbin0 -> 325834 bytes
-rw-r--r--assets/sound/buildables/rtg/sound.cfg14
-rw-r--r--assets/sound/feedback/hit.wavbin0 -> 22894 bytes
-rw-r--r--assets/ui/assets/human/scanner.tgabin0 -> 72695 bytes
-rw-r--r--assets/video/ckit.roqbin0 -> 515109 bytes
-rw-r--r--src/cgame/cg_buildable.c682
-rw-r--r--src/cgame/cg_draw.c81
-rw-r--r--src/cgame/cg_ents.c3
-rw-r--r--src/cgame/cg_event.c19
-rw-r--r--src/cgame/cg_local.h121
-rw-r--r--src/cgame/cg_main.c92
-rw-r--r--src/cgame/cg_playerstate.c6
-rw-r--r--src/cgame/cg_servercmds.c11
-rw-r--r--src/cgame/cg_tutorial.c48
-rw-r--r--src/cgame/cg_weapons.c292
-rw-r--r--src/game/bg_misc.c244
-rw-r--r--src/game/bg_public.h41
-rw-r--r--src/game/g_active.c123
-rw-r--r--src/game/g_buildable.c2285
-rw-r--r--src/game/g_client.c8
-rw-r--r--src/game/g_cmds.c108
-rw-r--r--src/game/g_combat.c26
-rw-r--r--src/game/g_local.h64
-rw-r--r--src/game/g_main.c141
-rw-r--r--src/game/g_weapon.c4
-rw-r--r--src/game/tremulous.h89
-rw-r--r--src/ui/ui_main.c35
-rw-r--r--src_assets/crosshairs.svg3149
747 files changed, 6920 insertions, 2052 deletions
diff --git a/assets/configs/buildables/capbank.cfg b/assets/configs/buildables/capbank.cfg
new file mode 100644
index 0000000..c7c41f6
--- /dev/null
+++ b/assets/configs/buildables/capbank.cfg
@@ -0,0 +1,5 @@
+model 0 models/buildables/capbank/capbank.md3
+modelScale 25.0
+mins -32 -32 0
+maxs 32 32 51
+zOffset 0.0
diff --git a/assets/configs/buildables/refinery.cfg b/assets/configs/buildables/refinery.cfg
new file mode 100644
index 0000000..372da6b
--- /dev/null
+++ b/assets/configs/buildables/refinery.cfg
@@ -0,0 +1,5 @@
+model 0 models/buildables/refinery/refinery.md3
+modelScale 1.5
+mins -30 -30 -22
+maxs 30 30 52
+zOffset 0 \ No newline at end of file
diff --git a/assets/configs/buildables/rtg.cfg b/assets/configs/buildables/rtg.cfg
new file mode 100644
index 0000000..6141572
--- /dev/null
+++ b/assets/configs/buildables/rtg.cfg
@@ -0,0 +1,5 @@
+model 0 models/buildables/rtg/rtg.md3
+modelScale 10.0
+mins -24 -24 0
+maxs 24 24 68
+zOffset 0.0
diff --git a/assets/credits.txt b/assets/credits.txt
index 5855702..7776fe0 100644
--- a/assets/credits.txt
+++ b/assets/credits.txt
@@ -6,6 +6,45 @@ Cuboid - a Tremulous 1.2 mod focused on cuboids and fixing balance issues.
Version Release date
______________________________________________________________________________________________
+0.1.7 Feb 25 2014
+NOTES:
+- Because of a bug in Tremulous code, cuboid and power info might behave weirdly if g_synchronousClients is disabled.
+GAMEPLAY:
+- Destroying buildables is now rewarded with credits (g_buildableValueModifier, default 0.16).
+- Rewards for killing players significantly decreased (g_playerValueModifier, default 0.5).
+- Complete overhaul of the Human building system:
+ * Build points are now per-player and are obtained from special buildings. The points are now referred to as "mass".
+ * To obtain mass, approach an RTG Unit or a Refinery. The CKit will display the amount of mass stored within the building next to the box with arrows around icon. To get the mass, issue a reload (the 'R' button).
+ * It is possible to transfer mass between players. Issuing a reload with a Human player on the crosshair will transfer mass to the player.
+ * Power is now simulated using a physically-correct model - the terms "voltage", "current" and "resistance" now apply to all Human buildings. The model is as follows:
+ + All power sources (including the Capacitor Bank) and their internal resistance (in series) are connected in parallel to each other.
+ + These, in turn, are connected in series with all other buildables (which are resistances, in parallel).
+ + The circuit is solved using multiple applications of Ohm's law and Kirchhoff's laws.
+ + Buildings draw much more power while active and will not work if there's not enough power.
+ + Buildings require power in order to be built. This disqualifies Reactor as the first buildable (as it requires power to be built).
+ * Added the RTG unit, which replaces every Reactor in all default layouts. It produces some power and some mass and does not require power or mass in order to be built.
+ * Multiple Reactors can be built, Reactors now require mass.
+ * DCs now heal buildables smoothly and there is no limit on how many DCs can heal a single buildable. Instead, DCs drain a lot of power from the power grid.
+ * Overloaded power sources emit zapping sounds and sparks. At the moment, the effect is only aesthetic (power sources don't explode when overloaded).
+ * On Sudden Death it is still possible to build, but no more mass will be available in Refineries and RTG Units.
+ * g_massYieldModifier (default: 1) can be used to increase/decrease mass yield in RTG Units and Refineries for balancing purposes.
+ * g_voltageModifier (default: 1) can be used to increase/decrease the voltage in all power grids. Do not change it unless the current settings turn out to be incredibly unbalanced.
+- CKit now features a fully-functional dynamic display on the model, which shows information about buildables (health, power info, etc.) and also replaces the ugly cuboid info text.
+- Removed the deconstruction marking system.
+- Decreased building time for all Human cuboids.
+- Direct line-of-sight is now needed to activate a buildable (to avoid accidental power switching).
+- Moved Glass to S2, Ladder to S3, Slime to S2.
+- Decreased Marauder's air aceleration by 50%.
+- Increased Human's air accelereation by 30% and speed by 10%.
+- Added hit sounds.
+NON-GAMEPLAY:
+- Fixed a bug related to voting.
+- Merged with KoRx's emoticon pack - now there's a shitload of emoticons available!
+- Cuboids are now rendered differently - the textures are no longer stretched (their UV maps are aligned to world). Also, most of their textures were redone and a much higher resolution.
+- New crosshairs with hit indication.
+- Alien animations now match their footsteps better.
+- Fixed a minor bug in Medistation's animations.
+
0.1.6 Jan 19 2014
GAMEPLAY:
- Introduced the Basivision (Activate Upgrade, +button2). While enabled, Basilisks can see in dark and see humans and their buildings through walls.
@@ -116,12 +155,16 @@ Below is the full list of all resources used by the mod.
File Author Licence
______________________________________________________________________________________________
-configs/cuboids/* theinvsblman cc-by
+configs/* theinvsblman cc-by
credits.txt theinvsblman cc-by
cuboid/logo_1.tga - logo_15.tga theinvsblman cc-by
cuboid/logo_left.tga, logo_right.tga Bitstream Bistream Vera Fonts Copyright
-emoticons/* theinvsblman cc-by
+default.cfg Darklegion Development cc-by-sa
gfx/2d/basivision_*.jpg theinvsblman cc-by
+gfx/2d/blip.tga Pikachu cc0
+gfx/2d/ckit/* theinvsblman cc-by
+gfx/2d/ch_* Pikachu cc0
+gfx/2d/digital/* Paul Flo Williams OFL
gfx/blood/* Pikachu cc0
gfx/cuboid/* theinvsblman cc-by
gfx/fire/* Pikachu cc0
@@ -129,6 +172,7 @@ gfx/fireball/* Pikachu
gfx/flash/* Pikachu cc0
gfx/gas/* Pikachu cc0
gfx/lcannon/* Pikachu cc0
+gfx/lighting/* Pikachu cc0
gfx/misc/*build.tga Pikachu cc0
gfx/misc/creep.tga Darklegion Development, Pikachu cc-by-sa
gfx/smoke/* Pikachu cc0
@@ -136,35 +180,40 @@ gfx/spark/* Pikachu
gfx/sprites/* Pikachu cc0
icons/iconu_biokit.tga Purga cc0
icons/iconu_helmet_mk2.tga Darklegion Development, theinvsblman cc-by-sa
-models/cuboid/concrete/concrete.jpg Randy Reddig @ shaderlab.com shaderlab*
+models/buildables/medistat/animati... Darklegion Development, Pikachu cc-by-sa
+models/buildables/capbank/* theinvsblman cc-by
+models/buildables/refinery/* Nalf
+models/buildables/rtg/* theinvsblman cc-by
+models/cuboid/concrete/concrete.jpg theinvsblman cc-by
models/cuboid/concrete/fragment.tga Randy Reddig @ shaderlab.com, theinvsblman shaderlab*
-models/cuboid/cracks* theinvsblman cc-by
-models/cuboid/cuboid.md3 theinvsblman cc-by
-models/cuboid/glass/fragment.tga theinvsblman cc-by
-models/cuboid/glass/glass.jpg theinvsblman cc-by
+models/cuboid/cracks.tga theinvsblman cc-by
+models/cuboid/glass/* theinvsblman cc-by
models/cuboid/ladder/fragment.tga Randy Reddig @ shaderlab.com, theinvsblman shaderlab*
models/cuboid/ladder/ladder.jpg Randy Reddig @ shaderlab.com shaderlab*
-models/cuboid/organic/fragment.tga Darklegion Development, theinvsblman cc-by-sa
-models/cuboid/organic/organic.jpg Darklegion Development, theinvsblman cc-by-sa
-models/cuboid/organic/organic_fx.jpg Darklegion Development, theinvsblman cc-by-sa
-models/cuboid/slime/fragment.tga theinvsblman cc-by
-models/cuboid/slime/slime.jpg theinvsblman cc-by
+models/cuboid/organic/* theinvsblman cc-by
+models/cuboid/slime/* theinvsblman cc-by
+models/players/*/animation.cfg Darklegion Development, Pikachu cc-by-sa
models/players/human_base/h_helmet... Darklegion Development, cron cc-by-sa
models/players/human_base/head_mk2... Darklegion Development, cron cc-by-sa
models/players/human_base/head_lig... Darklegion Development, theinvsblman cc-by-sa
-models/weapons/abuildupg/weapon.cfg Darklegion Development, theinvsblman cc-by-sa
+models/weapons/*/weapon.cfg Darklegion Development, theinvsblman cc-by-sa
models/weapons/blaster/flash0.wav Quake2World gpl2
models/weapons/blaster/hit.wav Pikachu cc0
-models/weapons/blaster/weapon.cfg Darklegion Development, theinvsblman cc-by-sa
+models/weapons/ckit/*.md3 Darklegion Development, theinvsblman cc-by-sa
models/weapons/flamer/fireloop_qui... Darklegion Development, theinvsblman cc-by-sa
-models/weapons/flamer/weapon.cfg Darklegion Development, theinvsblman cc-by-sa
-models/weapons/level4/weapon.cfg Darklegion Development, theinvsblman cc-by-sa
scripts/cuboid.shader theinvsblman cc-by
scripts/cuboid.particle Darklegion Development, theinvsblman cc-by-sa
+sound/buildables/acid_tube/acidspl... Pikachu cc0
+sound/buildables/capbank/sound.cfg theinvsblman cc-by
+sound/buildables/human/powerzap*.wav club sound @ freesound.org cc-by-nc
+sound/buildables/human/switch.wav jessepash, Pooleside @ freesound.org cc-by
+sound/buildables/human/unpowered_s... Tomlija, Halleck @ freesound.org cc-by
sound/buildables/mgturret/spinup_a... Darklegion Development, Pikachu cc-by-sa
sound/buildables/mgturret/spinup_b... Darklegion Development, Pikachu cc-by-sa
sound/buildables/mgturret/turretki... Pikachu cc0
-sound/buildables/acid_tube/acidspl... Pikachu cc0
+sound/buildables/refinery/* Nalf
+sound/buildables/rtg/idle1.wav jasonthomasd, Empty Bell @ freesound.org cc-by
+sound/buildables/rtg/sound.cfg theinvsblman cc-by
sound/buildables/tesla/idle1.wav Darklegion Development, Pikachu cc-by-sa
sound/cuboid/axischange.wav Ongitak @ freesound.org cc-by
sound/cuboid/concrete/dstr0.wav Michael Manzke @ freesound.org cc-by-nc
@@ -193,7 +242,8 @@ sound/cuboid/slime/dstr0.wav Michael Manzke @ freesound.org
sound/cuboid/slime/dstr1.wav Audionautics @ freesound.org cc-by
sound/cuboid/slime/pain0.wav anechoix @ freesound.org cc-by-nc
sound/cuboid/slime/pain1.wav anechoix @ freesound.org cc-by-nc
-sound/feedback/*.wav Pikachu cc0
+sound/feedback/*.wav (except hit.wav) Pikachu cc0
+sound/feedback/hit.wav Xonotic gpl2+
sound/player/alienhatch.wav Darklegion Development, theinvsblman cc-by-sa
sound/player/alienfailedhatch.wav Darklegion Development, theinvsblman cc-by-sa
sound/player/human_bsuit/* Darklegion Development, Pikachu cc-by-sa
@@ -201,18 +251,24 @@ sound/upgrades/jetpack/hi.wav Pikachu
sound/upgrades/jetpack/idle.wav Pikachu cc0
sound/upgrades/jetpack/low.wav Pikachu cc0
sound/upgrades/jetpack/jump.wav alexmol @ freesound.org, Q009,
- Pikachu cc-by-sa 3
+ Pikachu cc-by-sa 3.0
sound/upgrades/jetpack/lowfuel.wav Pikachu cc0
sound/upgrades/jetpack/nojumpfuel.wav Pikachu cc0
sound/upgrades/jetpack/refuel.wav joeseshon @ freesound.org,
alexmol @ freesound.org, Pikachu cc-by
+ui/assets/human/scanner.tga Pikachu cc0
ui/assets/neutral/cross_implanted.tga Darklegion Development, theinvsblman cc-by-sa
ui/help.txt theinvsblman cc-by
ui/ingame_options.menu Darklegion Development, theinvsblman cc-by-sa
ui/teamscore.menu Darklegion Development, theinvsblman cc-by-sa
ui/menudef.h Darklegion Development cc-by-sa
+video/ckit.roq theinvsblman cc-by
vm/*.qvm authors denoted in Programming section GPL
+EMOTICONS:
+ Cuboid-related emoticons (concrete, cuboid, glass, ladder, organic, slime) were created by the invisible man and are licensed under the terms of CC-BY.
+ All other emoticons come from KoRx's 0.3.3r2 emoticons pack.
+
Terms of the Creative Commons licenses (includes the Sampling Plus license) can be found at: http://creativecommons.org/licenses/.
Terms of the Bitstream Vera Fonts Copyright can be found at: http://dejavu-fonts.org/wiki/License.
diff --git a/assets/default.cfg b/assets/default.cfg
new file mode 100644
index 0000000..0308dbc
--- /dev/null
+++ b/assets/default.cfg
@@ -0,0 +1,97 @@
+//
+// KEY BINDINGS
+//
+
+unbindall
+
+bind - sizedown
+bind _ sizedown
+bind = sizeup
+bind + sizeup
+
+//
+// WEAPONS/UPGRADES
+//
+bind MOUSE1 +attack
+bind MOUSE2 +button5
+
+bind [ weapprev
+bind ] weapnext
+bind mwheelup weapprev
+bind mwheeldown weapnext
+bind ENTER +button2
+bind MOUSE3 +button2
+
+
+//
+// CHARACTER CONTROLS
+//
+
+bind CTRL +attack
+
+bind ALT +strafe
+bind SHIFT +speed
+
+bind DEL +lookdown
+bind PGDN +lookup
+bind END centerview
+
+bind c +movedown
+bind SPACE +moveup
+
+
+bind UPARROW +forward
+bind DOWNARROW +back
+bind LEFTARROW +left
+bind RIGHTARROW +right
+bind w +forward
+bind a +moveleft
+bind s +back
+bind d +moveright
+
+bind x +button8
+bind v +button6
+
+bind \ +mlook
+
+//
+// MISC
+//
+
+bind t messagemode
+bind y messagemode2
+bind u messagemode3
+bind i messagemode4
+
+bind r reload
+bind b "buy ammo"
+bind m "itemact medkit"
+bind g "itemact gren"
+bind j "itemtoggle jetpack"
+bind z "itemtoggle blaster"
+bind q +button7
+bind e deconstruct
+bind f +button3
+bind h scoresUp
+bind n scoresDown
+
+//
+// CLIENT ENVIRONMENT COMMANDS
+//
+
+bind PAUSE pause
+bind ESCAPE togglemenu
+
+bind TAB +scores
+
+bind F1 "vote yes"
+bind F2 "vote no"
+bind F3 "teamvote yes"
+bind F4 "teamvote no"
+
+
+//
+// DEVELOPER KEYS
+//
+bind F11 screenshotJPEG
+
diff --git a/assets/emoticons/1up_1x1.tga b/assets/emoticons/1up_1x1.tga
new file mode 100644
index 0000000..1c4f9fc
--- /dev/null
+++ b/assets/emoticons/1up_1x1.tga
Binary files differ
diff --git a/assets/emoticons/F1_1x1.tga b/assets/emoticons/F1_1x1.tga
new file mode 100755
index 0000000..92fc194
--- /dev/null
+++ b/assets/emoticons/F1_1x1.tga
Binary files differ
diff --git a/assets/emoticons/F2_1x1.tga b/assets/emoticons/F2_1x1.tga
new file mode 100755
index 0000000..c3f525f
--- /dev/null
+++ b/assets/emoticons/F2_1x1.tga
Binary files differ
diff --git a/assets/emoticons/F3_1x1.tga b/assets/emoticons/F3_1x1.tga
new file mode 100755
index 0000000..eef8d34
--- /dev/null
+++ b/assets/emoticons/F3_1x1.tga
Binary files differ
diff --git a/assets/emoticons/FAP_1x1.tga b/assets/emoticons/FAP_1x1.tga
new file mode 100644
index 0000000..63cb204
--- /dev/null
+++ b/assets/emoticons/FAP_1x1.tga
Binary files differ
diff --git a/assets/emoticons/Tremulous_1x1.tga b/assets/emoticons/Tremulous_1x1.tga
new file mode 100644
index 0000000..6c015c6
--- /dev/null
+++ b/assets/emoticons/Tremulous_1x1.tga
Binary files differ
diff --git a/assets/emoticons/aaron_4x1.tga b/assets/emoticons/aaron_4x1.tga
new file mode 100644
index 0000000..fd9a96e
--- /dev/null
+++ b/assets/emoticons/aaron_4x1.tga
Binary files differ
diff --git a/assets/emoticons/acidtube_1x1.tga b/assets/emoticons/acidtube_1x1.tga
new file mode 100755
index 0000000..aff4cb9
--- /dev/null
+++ b/assets/emoticons/acidtube_1x1.tga
Binary files differ
diff --git a/assets/emoticons/act-up_1x1.tga b/assets/emoticons/act-up_1x1.tga
new file mode 100755
index 0000000..072fe47
--- /dev/null
+++ b/assets/emoticons/act-up_1x1.tga
Binary files differ
diff --git a/assets/emoticons/advbasilisk_1x1.tga b/assets/emoticons/advbasilisk_1x1.tga
new file mode 100755
index 0000000..f387d81
--- /dev/null
+++ b/assets/emoticons/advbasilisk_1x1.tga
Binary files differ
diff --git a/assets/emoticons/advdragoon_1x1.tga b/assets/emoticons/advdragoon_1x1.tga
new file mode 100755
index 0000000..fbbe685
--- /dev/null
+++ b/assets/emoticons/advdragoon_1x1.tga
Binary files differ
diff --git a/assets/emoticons/advdretch_1x1.tga b/assets/emoticons/advdretch_1x1.tga
new file mode 100755
index 0000000..0a05f96
--- /dev/null
+++ b/assets/emoticons/advdretch_1x1.tga
Binary files differ
diff --git a/assets/emoticons/advgranger_1x1.tga b/assets/emoticons/advgranger_1x1.tga
new file mode 100755
index 0000000..5535b5f
--- /dev/null
+++ b/assets/emoticons/advgranger_1x1.tga
Binary files differ
diff --git a/assets/emoticons/advmarauder_1x1.tga b/assets/emoticons/advmarauder_1x1.tga
new file mode 100755
index 0000000..19e2a85
--- /dev/null
+++ b/assets/emoticons/advmarauder_1x1.tga
Binary files differ
diff --git a/assets/emoticons/advtyrant_1x1.tga b/assets/emoticons/advtyrant_1x1.tga
new file mode 100755
index 0000000..e462c30
--- /dev/null
+++ b/assets/emoticons/advtyrant_1x1.tga
Binary files differ
diff --git a/assets/emoticons/ah_1x1.tga b/assets/emoticons/ah_1x1.tga
new file mode 100755
index 0000000..19c8bd7
--- /dev/null
+++ b/assets/emoticons/ah_1x1.tga
Binary files differ
diff --git a/assets/emoticons/airplane_1x1.tga b/assets/emoticons/airplane_1x1.tga
new file mode 100755
index 0000000..be458b6
--- /dev/null
+++ b/assets/emoticons/airplane_1x1.tga
Binary files differ
diff --git a/assets/emoticons/alien_1x1.tga b/assets/emoticons/alien_1x1.tga
new file mode 100755
index 0000000..d7449f3
--- /dev/null
+++ b/assets/emoticons/alien_1x1.tga
Binary files differ
diff --git a/assets/emoticons/angel_1x1.tga b/assets/emoticons/angel_1x1.tga
new file mode 100755
index 0000000..8fb00f5
--- /dev/null
+++ b/assets/emoticons/angel_1x1.tga
Binary files differ
diff --git a/assets/emoticons/angry_1x1.tga b/assets/emoticons/angry_1x1.tga
new file mode 100755
index 0000000..efd7320
--- /dev/null
+++ b/assets/emoticons/angry_1x1.tga
Binary files differ
diff --git a/assets/emoticons/anrere_1x1.tga b/assets/emoticons/anrere_1x1.tga
new file mode 100755
index 0000000..503a11d
--- /dev/null
+++ b/assets/emoticons/anrere_1x1.tga
Binary files differ
diff --git a/assets/emoticons/apple_1x1.tga b/assets/emoticons/apple_1x1.tga
new file mode 100644
index 0000000..35494f0
--- /dev/null
+++ b/assets/emoticons/apple_1x1.tga
Binary files differ
diff --git a/assets/emoticons/approved_2x1.tga b/assets/emoticons/approved_2x1.tga
new file mode 100644
index 0000000..f5ccb61
--- /dev/null
+++ b/assets/emoticons/approved_2x1.tga
Binary files differ
diff --git a/assets/emoticons/armoury_1x1.tga b/assets/emoticons/armoury_1x1.tga
new file mode 100755
index 0000000..f5ebc97
--- /dev/null
+++ b/assets/emoticons/armoury_1x1.tga
Binary files differ
diff --git a/assets/emoticons/arrogant_1x1.tga b/assets/emoticons/arrogant_1x1.tga
new file mode 100755
index 0000000..c1c4bf8
--- /dev/null
+++ b/assets/emoticons/arrogant_1x1.tga
Binary files differ
diff --git a/assets/emoticons/at-wits-end_1x1.tga b/assets/emoticons/at-wits-end_1x1.tga
new file mode 100755
index 0000000..21438c9
--- /dev/null
+++ b/assets/emoticons/at-wits-end_1x1.tga
Binary files differ
diff --git a/assets/emoticons/bacon_2x1.tga b/assets/emoticons/bacon_2x1.tga
new file mode 100644
index 0000000..bdd4967
--- /dev/null
+++ b/assets/emoticons/bacon_2x1.tga
Binary files differ
diff --git a/assets/emoticons/bad_1x1.tga b/assets/emoticons/bad_1x1.tga
new file mode 100755
index 0000000..ed95adc
--- /dev/null
+++ b/assets/emoticons/bad_1x1.tga
Binary files differ
diff --git a/assets/emoticons/barricade_1x1.tga b/assets/emoticons/barricade_1x1.tga
new file mode 100755
index 0000000..40efed1
--- /dev/null
+++ b/assets/emoticons/barricade_1x1.tga
Binary files differ
diff --git a/assets/emoticons/bashful_1x1.tga b/assets/emoticons/bashful_1x1.tga
new file mode 100755
index 0000000..fd1eb15
--- /dev/null
+++ b/assets/emoticons/bashful_1x1.tga
Binary files differ
diff --git a/assets/emoticons/basilisk_1x1.tga b/assets/emoticons/basilisk_1x1.tga
new file mode 100755
index 0000000..59be142
--- /dev/null
+++ b/assets/emoticons/basilisk_1x1.tga
Binary files differ
diff --git a/assets/emoticons/beat-up_1x1.tga b/assets/emoticons/beat-up_1x1.tga
new file mode 100755
index 0000000..a6973b5
--- /dev/null
+++ b/assets/emoticons/beat-up_1x1.tga
Binary files differ
diff --git a/assets/emoticons/beauty_1x1.tga b/assets/emoticons/beauty_1x1.tga
new file mode 100755
index 0000000..c5d63b3
--- /dev/null
+++ b/assets/emoticons/beauty_1x1.tga
Binary files differ
diff --git a/assets/emoticons/beer_1x1.tga b/assets/emoticons/beer_1x1.tga
new file mode 100755
index 0000000..06b39db
--- /dev/null
+++ b/assets/emoticons/beer_1x1.tga
Binary files differ
diff --git a/assets/emoticons/bgranger_1x1.tga b/assets/emoticons/bgranger_1x1.tga
new file mode 100755
index 0000000..764cc7c
--- /dev/null
+++ b/assets/emoticons/bgranger_1x1.tga
Binary files differ
diff --git a/assets/emoticons/bheart_1x1.tga b/assets/emoticons/bheart_1x1.tga
new file mode 100755
index 0000000..3efa6df
--- /dev/null
+++ b/assets/emoticons/bheart_1x1.tga
Binary files differ
diff --git a/assets/emoticons/bigping_1x1.tga b/assets/emoticons/bigping_1x1.tga
new file mode 100755
index 0000000..3c90abc
--- /dev/null
+++ b/assets/emoticons/bigping_1x1.tga
Binary files differ
diff --git a/assets/emoticons/bigwimply_1x1.tga b/assets/emoticons/bigwimply_1x1.tga
new file mode 100644
index 0000000..c721d60
--- /dev/null
+++ b/assets/emoticons/bigwimply_1x1.tga
Binary files differ
diff --git a/assets/emoticons/blaster_1x1.tga b/assets/emoticons/blaster_1x1.tga
new file mode 100755
index 0000000..6860b70
--- /dev/null
+++ b/assets/emoticons/blaster_1x1.tga
Binary files differ
diff --git a/assets/emoticons/blastershot1_2x1.tga b/assets/emoticons/blastershot1_2x1.tga
new file mode 100644
index 0000000..942c2b8
--- /dev/null
+++ b/assets/emoticons/blastershot1_2x1.tga
Binary files differ
diff --git a/assets/emoticons/blastershot2_2x1.tga b/assets/emoticons/blastershot2_2x1.tga
new file mode 100644
index 0000000..a94a90e
--- /dev/null
+++ b/assets/emoticons/blastershot2_2x1.tga
Binary files differ
diff --git a/assets/emoticons/blowkiss_1x1.tga b/assets/emoticons/blowkiss_1x1.tga
new file mode 100755
index 0000000..7780402
--- /dev/null
+++ b/assets/emoticons/blowkiss_1x1.tga
Binary files differ
diff --git a/assets/emoticons/bomb_1x1.tga b/assets/emoticons/bomb_1x1.tga
new file mode 100755
index 0000000..5130bb5
--- /dev/null
+++ b/assets/emoticons/bomb_1x1.tga
Binary files differ
diff --git a/assets/emoticons/booster_1x1.tga b/assets/emoticons/booster_1x1.tga
new file mode 100755
index 0000000..a69f904
--- /dev/null
+++ b/assets/emoticons/booster_1x1.tga
Binary files differ
diff --git a/assets/emoticons/bowl_1x1.tga b/assets/emoticons/bowl_1x1.tga
new file mode 100755
index 0000000..c4181f3
--- /dev/null
+++ b/assets/emoticons/bowl_1x1.tga
Binary files differ
diff --git a/assets/emoticons/boy_1x1.tga b/assets/emoticons/boy_1x1.tga
new file mode 100755
index 0000000..c99b38e
--- /dev/null
+++ b/assets/emoticons/boy_1x1.tga
Binary files differ
diff --git a/assets/emoticons/brb_1x1.tga b/assets/emoticons/brb_1x1.tga
new file mode 100755
index 0000000..439f2da
--- /dev/null
+++ b/assets/emoticons/brb_1x1.tga
Binary files differ
diff --git a/assets/emoticons/bsuit_1x1.tga b/assets/emoticons/bsuit_1x1.tga
new file mode 100755
index 0000000..867e63b
--- /dev/null
+++ b/assets/emoticons/bsuit_1x1.tga
Binary files differ
diff --git a/assets/emoticons/bulgy-eyes_1x1.tga b/assets/emoticons/bulgy-eyes_1x1.tga
new file mode 100755
index 0000000..6fa5ccd
--- /dev/null
+++ b/assets/emoticons/bulgy-eyes_1x1.tga
Binary files differ
diff --git a/assets/emoticons/bunny_1x1.tga b/assets/emoticons/bunny_1x1.tga
new file mode 100755
index 0000000..245aa90
--- /dev/null
+++ b/assets/emoticons/bunny_1x1.tga
Binary files differ
diff --git a/assets/emoticons/bye_1x1.tga b/assets/emoticons/bye_1x1.tga
new file mode 100755
index 0000000..36abca1
--- /dev/null
+++ b/assets/emoticons/bye_1x1.tga
Binary files differ
diff --git a/assets/emoticons/cake_1x1.tga b/assets/emoticons/cake_1x1.tga
new file mode 100755
index 0000000..03b0e7d
--- /dev/null
+++ b/assets/emoticons/cake_1x1.tga
Binary files differ
diff --git a/assets/emoticons/call-me_1x1.tga b/assets/emoticons/call-me_1x1.tga
new file mode 100755
index 0000000..d9b00a9
--- /dev/null
+++ b/assets/emoticons/call-me_1x1.tga
Binary files differ
diff --git a/assets/emoticons/camera_1x1.tga b/assets/emoticons/camera_1x1.tga
new file mode 100755
index 0000000..38fbf0f
--- /dev/null
+++ b/assets/emoticons/camera_1x1.tga
Binary files differ
diff --git a/assets/emoticons/can_1x1.tga b/assets/emoticons/can_1x1.tga
new file mode 100755
index 0000000..f2b8096
--- /dev/null
+++ b/assets/emoticons/can_1x1.tga
Binary files differ
diff --git a/assets/emoticons/car_1x1.tga b/assets/emoticons/car_1x1.tga
new file mode 100755
index 0000000..a20e3b5
--- /dev/null
+++ b/assets/emoticons/car_1x1.tga
Binary files differ
diff --git a/assets/emoticons/cat_1x1.tga b/assets/emoticons/cat_1x1.tga
new file mode 100755
index 0000000..5bc43f2
--- /dev/null
+++ b/assets/emoticons/cat_1x1.tga
Binary files differ
diff --git a/assets/emoticons/chaingun_2x1.tga b/assets/emoticons/chaingun_2x1.tga
new file mode 100755
index 0000000..8cddec8
--- /dev/null
+++ b/assets/emoticons/chaingun_2x1.tga
Binary files differ
diff --git a/assets/emoticons/chaingunshot1_2x1.tga b/assets/emoticons/chaingunshot1_2x1.tga
new file mode 100644
index 0000000..d57a7d8
--- /dev/null
+++ b/assets/emoticons/chaingunshot1_2x1.tga
Binary files differ
diff --git a/assets/emoticons/chicken_1x1.tga b/assets/emoticons/chicken_1x1.tga
new file mode 100755
index 0000000..d997822
--- /dev/null
+++ b/assets/emoticons/chicken_1x1.tga
Binary files differ
diff --git a/assets/emoticons/chrome_1x1.tga b/assets/emoticons/chrome_1x1.tga
new file mode 100644
index 0000000..a35aa12
--- /dev/null
+++ b/assets/emoticons/chrome_1x1.tga
Binary files differ
diff --git a/assets/emoticons/chronic_1x1.tga b/assets/emoticons/chronic_1x1.tga
new file mode 100644
index 0000000..f3f6f8c
--- /dev/null
+++ b/assets/emoticons/chronic_1x1.tga
Binary files differ
diff --git a/assets/emoticons/cigarette_1x1.tga b/assets/emoticons/cigarette_1x1.tga
new file mode 100755
index 0000000..1c08011
--- /dev/null
+++ b/assets/emoticons/cigarette_1x1.tga
Binary files differ
diff --git a/assets/emoticons/ckit_2x1.tga b/assets/emoticons/ckit_2x1.tga
new file mode 100755
index 0000000..afd35cd
--- /dev/null
+++ b/assets/emoticons/ckit_2x1.tga
Binary files differ
diff --git a/assets/emoticons/clap_1x1.tga b/assets/emoticons/clap_1x1.tga
new file mode 100755
index 0000000..6ae4f34
--- /dev/null
+++ b/assets/emoticons/clap_1x1.tga
Binary files differ
diff --git a/assets/emoticons/clock_1x1.tga b/assets/emoticons/clock_1x1.tga
new file mode 100755
index 0000000..78ef4a7
--- /dev/null
+++ b/assets/emoticons/clock_1x1.tga
Binary files differ
diff --git a/assets/emoticons/cloudy_1x1.tga b/assets/emoticons/cloudy_1x1.tga
new file mode 100755
index 0000000..63fba7c
--- /dev/null
+++ b/assets/emoticons/cloudy_1x1.tga
Binary files differ
diff --git a/assets/emoticons/clover_1x1.tga b/assets/emoticons/clover_1x1.tga
new file mode 100755
index 0000000..891362b
--- /dev/null
+++ b/assets/emoticons/clover_1x1.tga
Binary files differ
diff --git a/assets/emoticons/clown_1x1.tga b/assets/emoticons/clown_1x1.tga
new file mode 100755
index 0000000..ca8ac5f
--- /dev/null
+++ b/assets/emoticons/clown_1x1.tga
Binary files differ
diff --git a/assets/emoticons/coffee_1x1.tga b/assets/emoticons/coffee_1x1.tga
new file mode 100755
index 0000000..6d7fa5d
--- /dev/null
+++ b/assets/emoticons/coffee_1x1.tga
Binary files differ
diff --git a/assets/emoticons/coins_1x1.tga b/assets/emoticons/coins_1x1.tga
new file mode 100755
index 0000000..d29ff84
--- /dev/null
+++ b/assets/emoticons/coins_1x1.tga
Binary files differ
diff --git a/assets/emoticons/colloquy_1x1.tga b/assets/emoticons/colloquy_1x1.tga
new file mode 100644
index 0000000..6391ed4
--- /dev/null
+++ b/assets/emoticons/colloquy_1x1.tga
Binary files differ
diff --git a/assets/emoticons/communist_1x1.tga b/assets/emoticons/communist_1x1.tga
new file mode 100644
index 0000000..0984013
--- /dev/null
+++ b/assets/emoticons/communist_1x1.tga
Binary files differ
diff --git a/assets/emoticons/computer_1x1.tga b/assets/emoticons/computer_1x1.tga
new file mode 100755
index 0000000..98173c3
--- /dev/null
+++ b/assets/emoticons/computer_1x1.tga
Binary files differ
diff --git a/assets/emoticons/confused_1x1.tga b/assets/emoticons/confused_1x1.tga
new file mode 100755
index 0000000..01a71e3
--- /dev/null
+++ b/assets/emoticons/confused_1x1.tga
Binary files differ
diff --git a/assets/emoticons/console_1x1.tga b/assets/emoticons/console_1x1.tga
new file mode 100755
index 0000000..afd2ae6
--- /dev/null
+++ b/assets/emoticons/console_1x1.tga
Binary files differ
diff --git a/assets/emoticons/cookiemonster_1x1.tga b/assets/emoticons/cookiemonster_1x1.tga
new file mode 100644
index 0000000..cd0f244
--- /dev/null
+++ b/assets/emoticons/cookiemonster_1x1.tga
Binary files differ
diff --git a/assets/emoticons/cork_1x1.tga b/assets/emoticons/cork_1x1.tga
new file mode 100644
index 0000000..0155998
--- /dev/null
+++ b/assets/emoticons/cork_1x1.tga
Binary files differ
diff --git a/assets/emoticons/cow_1x1.tga b/assets/emoticons/cow_1x1.tga
new file mode 100755
index 0000000..720a856
--- /dev/null
+++ b/assets/emoticons/cow_1x1.tga
Binary files differ
diff --git a/assets/emoticons/cowboy_1x1.tga b/assets/emoticons/cowboy_1x1.tga
new file mode 100755
index 0000000..4422511
--- /dev/null
+++ b/assets/emoticons/cowboy_1x1.tga
Binary files differ
diff --git a/assets/emoticons/crab_1x1.tga b/assets/emoticons/crab_1x1.tga
new file mode 100644
index 0000000..3b7dba6
--- /dev/null
+++ b/assets/emoticons/crab_1x1.tga
Binary files differ
diff --git a/assets/emoticons/crying_1x1.tga b/assets/emoticons/crying_1x1.tga
new file mode 100755
index 0000000..c404e0d
--- /dev/null
+++ b/assets/emoticons/crying_1x1.tga
Binary files differ
diff --git a/assets/emoticons/curl-lip_1x1.tga b/assets/emoticons/curl-lip_1x1.tga
new file mode 100755
index 0000000..7d0db4b
--- /dev/null
+++ b/assets/emoticons/curl-lip_1x1.tga
Binary files differ
diff --git a/assets/emoticons/curse_1x1.tga b/assets/emoticons/curse_1x1.tga
new file mode 100755
index 0000000..99ec877
--- /dev/null
+++ b/assets/emoticons/curse_1x1.tga
Binary files differ
diff --git a/assets/emoticons/cute_1x1.tga b/assets/emoticons/cute_1x1.tga
new file mode 100755
index 0000000..8cc467d
--- /dev/null
+++ b/assets/emoticons/cute_1x1.tga
Binary files differ
diff --git a/assets/emoticons/cyclops_1x1.tga b/assets/emoticons/cyclops_1x1.tga
new file mode 100755
index 0000000..20598bf
--- /dev/null
+++ b/assets/emoticons/cyclops_1x1.tga
Binary files differ
diff --git a/assets/emoticons/dance_1x1.tga b/assets/emoticons/dance_1x1.tga
new file mode 100755
index 0000000..66d7f15
--- /dev/null
+++ b/assets/emoticons/dance_1x1.tga
Binary files differ
diff --git a/assets/emoticons/dazed_1x1.tga b/assets/emoticons/dazed_1x1.tga
new file mode 100755
index 0000000..1e2b20a
--- /dev/null
+++ b/assets/emoticons/dazed_1x1.tga
Binary files differ
diff --git a/assets/emoticons/defcomp_1x1.tga b/assets/emoticons/defcomp_1x1.tga
new file mode 100755
index 0000000..0e8ec49
--- /dev/null
+++ b/assets/emoticons/defcomp_1x1.tga
Binary files differ
diff --git a/assets/emoticons/democrat_1x1.tga b/assets/emoticons/democrat_1x1.tga
new file mode 100644
index 0000000..f17f0b4
--- /dev/null
+++ b/assets/emoticons/democrat_1x1.tga
Binary files differ
diff --git a/assets/emoticons/denied_2x1.tga b/assets/emoticons/denied_2x1.tga
new file mode 100644
index 0000000..3193eab
--- /dev/null
+++ b/assets/emoticons/denied_2x1.tga
Binary files differ
diff --git a/assets/emoticons/desire_1x1.tga b/assets/emoticons/desire_1x1.tga
new file mode 100755
index 0000000..093ea94
--- /dev/null
+++ b/assets/emoticons/desire_1x1.tga
Binary files differ
diff --git a/assets/emoticons/devil_1x1.tga b/assets/emoticons/devil_1x1.tga
new file mode 100755
index 0000000..e2823c5
--- /dev/null
+++ b/assets/emoticons/devil_1x1.tga
Binary files differ
diff --git a/assets/emoticons/disappointed_1x1.tga b/assets/emoticons/disappointed_1x1.tga
new file mode 100755
index 0000000..8799a26
--- /dev/null
+++ b/assets/emoticons/disappointed_1x1.tga
Binary files differ
diff --git a/assets/emoticons/disdain_1x1.tga b/assets/emoticons/disdain_1x1.tga
new file mode 100755
index 0000000..ffdec98
--- /dev/null
+++ b/assets/emoticons/disdain_1x1.tga
Binary files differ
diff --git a/assets/emoticons/dkok_2x1.tga b/assets/emoticons/dkok_2x1.tga
new file mode 100644
index 0000000..150a6a2
--- /dev/null
+++ b/assets/emoticons/dkok_2x1.tga
Binary files differ
diff --git a/assets/emoticons/doctor_1x1.tga b/assets/emoticons/doctor_1x1.tga
new file mode 100755
index 0000000..f71ef12
--- /dev/null
+++ b/assets/emoticons/doctor_1x1.tga
Binary files differ
diff --git a/assets/emoticons/dog_1x1.tga b/assets/emoticons/dog_1x1.tga
new file mode 100755
index 0000000..446e4c1
--- /dev/null
+++ b/assets/emoticons/dog_1x1.tga
Binary files differ
diff --git a/assets/emoticons/doh_1x1.tga b/assets/emoticons/doh_1x1.tga
new file mode 100755
index 0000000..7057a8d
--- /dev/null
+++ b/assets/emoticons/doh_1x1.tga
Binary files differ
diff --git a/assets/emoticons/dont-know_1x1.tga b/assets/emoticons/dont-know_1x1.tga
new file mode 100755
index 0000000..9475f23
--- /dev/null
+++ b/assets/emoticons/dont-know_1x1.tga
Binary files differ
diff --git a/assets/emoticons/dragoon_1x1.tga b/assets/emoticons/dragoon_1x1.tga
new file mode 100755
index 0000000..c13529c
--- /dev/null
+++ b/assets/emoticons/dragoon_1x1.tga
Binary files differ
diff --git a/assets/emoticons/dretch_1x1.tga b/assets/emoticons/dretch_1x1.tga
new file mode 100755
index 0000000..170b731
--- /dev/null
+++ b/assets/emoticons/dretch_1x1.tga
Binary files differ
diff --git a/assets/emoticons/drink_1x1.tga b/assets/emoticons/drink_1x1.tga
new file mode 100755
index 0000000..82236e9
--- /dev/null
+++ b/assets/emoticons/drink_1x1.tga
Binary files differ
diff --git a/assets/emoticons/drool_1x1.tga b/assets/emoticons/drool_1x1.tga
new file mode 100755
index 0000000..b98d439
--- /dev/null
+++ b/assets/emoticons/drool_1x1.tga
Binary files differ
diff --git a/assets/emoticons/ds_1x1.tga b/assets/emoticons/ds_1x1.tga
new file mode 100755
index 0000000..c38ce48
--- /dev/null
+++ b/assets/emoticons/ds_1x1.tga
Binary files differ
diff --git a/assets/emoticons/eagle_1x1.tga b/assets/emoticons/eagle_1x1.tga
new file mode 100644
index 0000000..6f2cf8c
--- /dev/null
+++ b/assets/emoticons/eagle_1x1.tga
Binary files differ
diff --git a/assets/emoticons/earth_1x1.tga b/assets/emoticons/earth_1x1.tga
new file mode 100755
index 0000000..60f0a18
--- /dev/null
+++ b/assets/emoticons/earth_1x1.tga
Binary files differ
diff --git a/assets/emoticons/eat_1x1.tga b/assets/emoticons/eat_1x1.tga
new file mode 100755
index 0000000..ec718a3
--- /dev/null
+++ b/assets/emoticons/eat_1x1.tga
Binary files differ
diff --git a/assets/emoticons/egg_1x1.tga b/assets/emoticons/egg_1x1.tga
new file mode 100755
index 0000000..b96b9e5
--- /dev/null
+++ b/assets/emoticons/egg_1x1.tga
Binary files differ
diff --git a/assets/emoticons/embarrassed_1x1.tga b/assets/emoticons/embarrassed_1x1.tga
new file mode 100755
index 0000000..4a1926c
--- /dev/null
+++ b/assets/emoticons/embarrassed_1x1.tga
Binary files differ
diff --git a/assets/emoticons/excruciating_1x1.tga b/assets/emoticons/excruciating_1x1.tga
new file mode 100755
index 0000000..a0c50bb
--- /dev/null
+++ b/assets/emoticons/excruciating_1x1.tga
Binary files differ
diff --git a/assets/emoticons/eyeroll_1x1.tga b/assets/emoticons/eyeroll_1x1.tga
new file mode 100755
index 0000000..6991cf1
--- /dev/null
+++ b/assets/emoticons/eyeroll_1x1.tga
Binary files differ
diff --git a/assets/emoticons/f1b_1x1.tga b/assets/emoticons/f1b_1x1.tga
new file mode 100755
index 0000000..f2ba3d1
--- /dev/null
+++ b/assets/emoticons/f1b_1x1.tga
Binary files differ
diff --git a/assets/emoticons/f2b_1x1.tga b/assets/emoticons/f2b_1x1.tga
new file mode 100755
index 0000000..f9d3de8
--- /dev/null
+++ b/assets/emoticons/f2b_1x1.tga
Binary files differ
diff --git a/assets/emoticons/f3b_1x1.tga b/assets/emoticons/f3b_1x1.tga
new file mode 100755
index 0000000..2dfbdfa
--- /dev/null
+++ b/assets/emoticons/f3b_1x1.tga
Binary files differ
diff --git a/assets/emoticons/female-fighter_1x1.tga b/assets/emoticons/female-fighter_1x1.tga
new file mode 100755
index 0000000..337a3fc
--- /dev/null
+++ b/assets/emoticons/female-fighter_1x1.tga
Binary files differ
diff --git a/assets/emoticons/film_1x1.tga b/assets/emoticons/film_1x1.tga
new file mode 100755
index 0000000..640a16a
--- /dev/null
+++ b/assets/emoticons/film_1x1.tga
Binary files differ
diff --git a/assets/emoticons/fingers-crossed_1x1.tga b/assets/emoticons/fingers-crossed_1x1.tga
new file mode 100755
index 0000000..cf55dca
--- /dev/null
+++ b/assets/emoticons/fingers-crossed_1x1.tga
Binary files differ
diff --git a/assets/emoticons/firefox_1x1.tga b/assets/emoticons/firefox_1x1.tga
new file mode 100644
index 0000000..3979c3f
--- /dev/null
+++ b/assets/emoticons/firefox_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flag_1x1.tga b/assets/emoticons/flag_1x1.tga
new file mode 100755
index 0000000..12ce63a
--- /dev/null
+++ b/assets/emoticons/flag_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/a_1x1.tga b/assets/emoticons/flags/a_1x1.tga
new file mode 100755
index 0000000..8ece210
--- /dev/null
+++ b/assets/emoticons/flags/a_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ad_1x1.tga b/assets/emoticons/flags/ad_1x1.tga
new file mode 100755
index 0000000..156b077
--- /dev/null
+++ b/assets/emoticons/flags/ad_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ae_1x1.tga b/assets/emoticons/flags/ae_1x1.tga
new file mode 100755
index 0000000..55db6ac
--- /dev/null
+++ b/assets/emoticons/flags/ae_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/af_1x1.tga b/assets/emoticons/flags/af_1x1.tga
new file mode 100755
index 0000000..e51759e
--- /dev/null
+++ b/assets/emoticons/flags/af_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ai_1x1.tga b/assets/emoticons/flags/ai_1x1.tga
new file mode 100755
index 0000000..01656b4
--- /dev/null
+++ b/assets/emoticons/flags/ai_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/al_1x1.tga b/assets/emoticons/flags/al_1x1.tga
new file mode 100755
index 0000000..207696e
--- /dev/null
+++ b/assets/emoticons/flags/al_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/am_1x1.tga b/assets/emoticons/flags/am_1x1.tga
new file mode 100755
index 0000000..39073fa
--- /dev/null
+++ b/assets/emoticons/flags/am_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ao_1x1.tga b/assets/emoticons/flags/ao_1x1.tga
new file mode 100755
index 0000000..e812868
--- /dev/null
+++ b/assets/emoticons/flags/ao_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ar_1x1.tga b/assets/emoticons/flags/ar_1x1.tga
new file mode 100755
index 0000000..b1bffce
--- /dev/null
+++ b/assets/emoticons/flags/ar_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/as_1x1.tga b/assets/emoticons/flags/as_1x1.tga
new file mode 100755
index 0000000..ed51e03
--- /dev/null
+++ b/assets/emoticons/flags/as_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/at_1x1.tga b/assets/emoticons/flags/at_1x1.tga
new file mode 100755
index 0000000..830b3b8
--- /dev/null
+++ b/assets/emoticons/flags/at_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/au_1x1.tga b/assets/emoticons/flags/au_1x1.tga
new file mode 100755
index 0000000..51f83b6
--- /dev/null
+++ b/assets/emoticons/flags/au_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/aw_1x1.tga b/assets/emoticons/flags/aw_1x1.tga
new file mode 100755
index 0000000..c5d55a7
--- /dev/null
+++ b/assets/emoticons/flags/aw_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ax_1x1.tga b/assets/emoticons/flags/ax_1x1.tga
new file mode 100755
index 0000000..8fa7dee
--- /dev/null
+++ b/assets/emoticons/flags/ax_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/az_1x1.tga b/assets/emoticons/flags/az_1x1.tga
new file mode 100755
index 0000000..73b76f5
--- /dev/null
+++ b/assets/emoticons/flags/az_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/b_1x1.tga b/assets/emoticons/flags/b_1x1.tga
new file mode 100755
index 0000000..d96fce5
--- /dev/null
+++ b/assets/emoticons/flags/b_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ba_1x1.tga b/assets/emoticons/flags/ba_1x1.tga
new file mode 100755
index 0000000..eaefa5a
--- /dev/null
+++ b/assets/emoticons/flags/ba_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/bb_1x1.tga b/assets/emoticons/flags/bb_1x1.tga
new file mode 100755
index 0000000..5ea117f
--- /dev/null
+++ b/assets/emoticons/flags/bb_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/bd_1x1.tga b/assets/emoticons/flags/bd_1x1.tga
new file mode 100755
index 0000000..5746d02
--- /dev/null
+++ b/assets/emoticons/flags/bd_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/be_1x1.tga b/assets/emoticons/flags/be_1x1.tga
new file mode 100755
index 0000000..94e02c3
--- /dev/null
+++ b/assets/emoticons/flags/be_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/bf_1x1.tga b/assets/emoticons/flags/bf_1x1.tga
new file mode 100755
index 0000000..481031d
--- /dev/null
+++ b/assets/emoticons/flags/bf_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/bh_1x1.tga b/assets/emoticons/flags/bh_1x1.tga
new file mode 100755
index 0000000..495d456
--- /dev/null
+++ b/assets/emoticons/flags/bh_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/bi_1x1.tga b/assets/emoticons/flags/bi_1x1.tga
new file mode 100755
index 0000000..d5d513d
--- /dev/null
+++ b/assets/emoticons/flags/bi_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/bj_1x1.tga b/assets/emoticons/flags/bj_1x1.tga
new file mode 100755
index 0000000..dc86bb0
--- /dev/null
+++ b/assets/emoticons/flags/bj_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/bm_1x1.tga b/assets/emoticons/flags/bm_1x1.tga
new file mode 100755
index 0000000..0f01f81
--- /dev/null
+++ b/assets/emoticons/flags/bm_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/bo_1x1.tga b/assets/emoticons/flags/bo_1x1.tga
new file mode 100755
index 0000000..15cd657
--- /dev/null
+++ b/assets/emoticons/flags/bo_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/br_1x1.tga b/assets/emoticons/flags/br_1x1.tga
new file mode 100755
index 0000000..15e40b1
--- /dev/null
+++ b/assets/emoticons/flags/br_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/bs_1x1.tga b/assets/emoticons/flags/bs_1x1.tga
new file mode 100755
index 0000000..28e1a8b
--- /dev/null
+++ b/assets/emoticons/flags/bs_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/bt_1x1.tga b/assets/emoticons/flags/bt_1x1.tga
new file mode 100755
index 0000000..edd75ba
--- /dev/null
+++ b/assets/emoticons/flags/bt_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/bv_1x1.tga b/assets/emoticons/flags/bv_1x1.tga
new file mode 100755
index 0000000..2378573
--- /dev/null
+++ b/assets/emoticons/flags/bv_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/bw_1x1.tga b/assets/emoticons/flags/bw_1x1.tga
new file mode 100755
index 0000000..444910d
--- /dev/null
+++ b/assets/emoticons/flags/bw_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/by_1x1.tga b/assets/emoticons/flags/by_1x1.tga
new file mode 100755
index 0000000..f5c6c9d
--- /dev/null
+++ b/assets/emoticons/flags/by_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/bz_1x1.tga b/assets/emoticons/flags/bz_1x1.tga
new file mode 100755
index 0000000..7b356d6
--- /dev/null
+++ b/assets/emoticons/flags/bz_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/c_1x1.tga b/assets/emoticons/flags/c_1x1.tga
new file mode 100755
index 0000000..a941a88
--- /dev/null
+++ b/assets/emoticons/flags/c_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ca_1x1.tga b/assets/emoticons/flags/ca_1x1.tga
new file mode 100755
index 0000000..9535a5f
--- /dev/null
+++ b/assets/emoticons/flags/ca_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/catalonia_1x1.tga b/assets/emoticons/flags/catalonia_1x1.tga
new file mode 100755
index 0000000..0fdcf31
--- /dev/null
+++ b/assets/emoticons/flags/catalonia_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/cc_1x1.tga b/assets/emoticons/flags/cc_1x1.tga
new file mode 100755
index 0000000..eaf5c31
--- /dev/null
+++ b/assets/emoticons/flags/cc_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/cd_1x1.tga b/assets/emoticons/flags/cd_1x1.tga
new file mode 100755
index 0000000..a529890
--- /dev/null
+++ b/assets/emoticons/flags/cd_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/cf_1x1.tga b/assets/emoticons/flags/cf_1x1.tga
new file mode 100755
index 0000000..6a92939
--- /dev/null
+++ b/assets/emoticons/flags/cf_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ch_1x1.tga b/assets/emoticons/flags/ch_1x1.tga
new file mode 100755
index 0000000..234b374
--- /dev/null
+++ b/assets/emoticons/flags/ch_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ci_1x1.tga b/assets/emoticons/flags/ci_1x1.tga
new file mode 100755
index 0000000..1c869cf
--- /dev/null
+++ b/assets/emoticons/flags/ci_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ck_1x1.tga b/assets/emoticons/flags/ck_1x1.tga
new file mode 100755
index 0000000..24bb636
--- /dev/null
+++ b/assets/emoticons/flags/ck_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/cl_1x1.tga b/assets/emoticons/flags/cl_1x1.tga
new file mode 100755
index 0000000..512d454
--- /dev/null
+++ b/assets/emoticons/flags/cl_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/cm_1x1.tga b/assets/emoticons/flags/cm_1x1.tga
new file mode 100755
index 0000000..f1b649b
--- /dev/null
+++ b/assets/emoticons/flags/cm_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/co_1x1.tga b/assets/emoticons/flags/co_1x1.tga
new file mode 100755
index 0000000..987833b
--- /dev/null
+++ b/assets/emoticons/flags/co_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/cr_1x1.tga b/assets/emoticons/flags/cr_1x1.tga
new file mode 100755
index 0000000..653cbff
--- /dev/null
+++ b/assets/emoticons/flags/cr_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/cs_1x1.tga b/assets/emoticons/flags/cs_1x1.tga
new file mode 100755
index 0000000..5da39e5
--- /dev/null
+++ b/assets/emoticons/flags/cs_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/cu_1x1.tga b/assets/emoticons/flags/cu_1x1.tga
new file mode 100755
index 0000000..64b949d
--- /dev/null
+++ b/assets/emoticons/flags/cu_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/cv_1x1.tga b/assets/emoticons/flags/cv_1x1.tga
new file mode 100755
index 0000000..f49b6ab
--- /dev/null
+++ b/assets/emoticons/flags/cv_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/cx_1x1.tga b/assets/emoticons/flags/cx_1x1.tga
new file mode 100755
index 0000000..535cb85
--- /dev/null
+++ b/assets/emoticons/flags/cx_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/cy_1x1.tga b/assets/emoticons/flags/cy_1x1.tga
new file mode 100755
index 0000000..8155df2
--- /dev/null
+++ b/assets/emoticons/flags/cy_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/cz_1x1.tga b/assets/emoticons/flags/cz_1x1.tga
new file mode 100755
index 0000000..05643d9
--- /dev/null
+++ b/assets/emoticons/flags/cz_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/de_1x1.tga b/assets/emoticons/flags/de_1x1.tga
new file mode 100755
index 0000000..474644f
--- /dev/null
+++ b/assets/emoticons/flags/de_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/dj_1x1.tga b/assets/emoticons/flags/dj_1x1.tga
new file mode 100755
index 0000000..1060e81
--- /dev/null
+++ b/assets/emoticons/flags/dj_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/dk_1x1.tga b/assets/emoticons/flags/dk_1x1.tga
new file mode 100755
index 0000000..26c320d
--- /dev/null
+++ b/assets/emoticons/flags/dk_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/dm_1x1.tga b/assets/emoticons/flags/dm_1x1.tga
new file mode 100755
index 0000000..ba01a99
--- /dev/null
+++ b/assets/emoticons/flags/dm_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/do_1x1.tga b/assets/emoticons/flags/do_1x1.tga
new file mode 100755
index 0000000..a3ec37b
--- /dev/null
+++ b/assets/emoticons/flags/do_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/dz_1x1.tga b/assets/emoticons/flags/dz_1x1.tga
new file mode 100755
index 0000000..a49b2ce
--- /dev/null
+++ b/assets/emoticons/flags/dz_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/e_1x1.tga b/assets/emoticons/flags/e_1x1.tga
new file mode 100755
index 0000000..0ba2d36
--- /dev/null
+++ b/assets/emoticons/flags/e_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ec_1x1.tga b/assets/emoticons/flags/ec_1x1.tga
new file mode 100755
index 0000000..8b23fe4
--- /dev/null
+++ b/assets/emoticons/flags/ec_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ee_1x1.tga b/assets/emoticons/flags/ee_1x1.tga
new file mode 100755
index 0000000..598d8b7
--- /dev/null
+++ b/assets/emoticons/flags/ee_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/eh_1x1.tga b/assets/emoticons/flags/eh_1x1.tga
new file mode 100755
index 0000000..e8f4ce3
--- /dev/null
+++ b/assets/emoticons/flags/eh_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/england_1x1.tga b/assets/emoticons/flags/england_1x1.tga
new file mode 100755
index 0000000..3bab753
--- /dev/null
+++ b/assets/emoticons/flags/england_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/er_1x1.tga b/assets/emoticons/flags/er_1x1.tga
new file mode 100755
index 0000000..96df9fb
--- /dev/null
+++ b/assets/emoticons/flags/er_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/es_1x1.tga b/assets/emoticons/flags/es_1x1.tga
new file mode 100755
index 0000000..0413f05
--- /dev/null
+++ b/assets/emoticons/flags/es_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/et_1x1.tga b/assets/emoticons/flags/et_1x1.tga
new file mode 100755
index 0000000..5b669e5
--- /dev/null
+++ b/assets/emoticons/flags/et_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/eu_1x1.tga b/assets/emoticons/flags/eu_1x1.tga
new file mode 100755
index 0000000..985f6fb
--- /dev/null
+++ b/assets/emoticons/flags/eu_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/fam_1x1.tga b/assets/emoticons/flags/fam_1x1.tga
new file mode 100755
index 0000000..17677c8
--- /dev/null
+++ b/assets/emoticons/flags/fam_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/fi_1x1.tga b/assets/emoticons/flags/fi_1x1.tga
new file mode 100755
index 0000000..f469875
--- /dev/null
+++ b/assets/emoticons/flags/fi_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/fj_1x1.tga b/assets/emoticons/flags/fj_1x1.tga
new file mode 100755
index 0000000..0e677e5
--- /dev/null
+++ b/assets/emoticons/flags/fj_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/fk_1x1.tga b/assets/emoticons/flags/fk_1x1.tga
new file mode 100755
index 0000000..f7ae829
--- /dev/null
+++ b/assets/emoticons/flags/fk_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/fm_1x1.tga b/assets/emoticons/flags/fm_1x1.tga
new file mode 100755
index 0000000..0baa37d
--- /dev/null
+++ b/assets/emoticons/flags/fm_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/fo_1x1.tga b/assets/emoticons/flags/fo_1x1.tga
new file mode 100755
index 0000000..5097c61
--- /dev/null
+++ b/assets/emoticons/flags/fo_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/fr_1x1.tga b/assets/emoticons/flags/fr_1x1.tga
new file mode 100755
index 0000000..ff0d3bc
--- /dev/null
+++ b/assets/emoticons/flags/fr_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ga_1x1.tga b/assets/emoticons/flags/ga_1x1.tga
new file mode 100755
index 0000000..28325ca
--- /dev/null
+++ b/assets/emoticons/flags/ga_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/gb_1x1.tga b/assets/emoticons/flags/gb_1x1.tga
new file mode 100755
index 0000000..9663a1e
--- /dev/null
+++ b/assets/emoticons/flags/gb_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/gd_1x1.tga b/assets/emoticons/flags/gd_1x1.tga
new file mode 100755
index 0000000..a993c9f
--- /dev/null
+++ b/assets/emoticons/flags/gd_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ge_1x1.tga b/assets/emoticons/flags/ge_1x1.tga
new file mode 100755
index 0000000..494957a
--- /dev/null
+++ b/assets/emoticons/flags/ge_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/gf_1x1.tga b/assets/emoticons/flags/gf_1x1.tga
new file mode 100755
index 0000000..ff0d3bc
--- /dev/null
+++ b/assets/emoticons/flags/gf_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/gh_1x1.tga b/assets/emoticons/flags/gh_1x1.tga
new file mode 100755
index 0000000..0cd7d00
--- /dev/null
+++ b/assets/emoticons/flags/gh_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/gi_1x1.tga b/assets/emoticons/flags/gi_1x1.tga
new file mode 100755
index 0000000..e39012b
--- /dev/null
+++ b/assets/emoticons/flags/gi_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/gl_1x1.tga b/assets/emoticons/flags/gl_1x1.tga
new file mode 100755
index 0000000..e4b9faa
--- /dev/null
+++ b/assets/emoticons/flags/gl_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/gm_1x1.tga b/assets/emoticons/flags/gm_1x1.tga
new file mode 100755
index 0000000..462a176
--- /dev/null
+++ b/assets/emoticons/flags/gm_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/gq_1x1.tga b/assets/emoticons/flags/gq_1x1.tga
new file mode 100755
index 0000000..e15492b
--- /dev/null
+++ b/assets/emoticons/flags/gq_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/gr_1x1.tga b/assets/emoticons/flags/gr_1x1.tga
new file mode 100755
index 0000000..2d66632
--- /dev/null
+++ b/assets/emoticons/flags/gr_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/gs_1x1.tga b/assets/emoticons/flags/gs_1x1.tga
new file mode 100755
index 0000000..b760639
--- /dev/null
+++ b/assets/emoticons/flags/gs_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/gt_1x1.tga b/assets/emoticons/flags/gt_1x1.tga
new file mode 100755
index 0000000..d10cf87
--- /dev/null
+++ b/assets/emoticons/flags/gt_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/gu_1x1.tga b/assets/emoticons/flags/gu_1x1.tga
new file mode 100755
index 0000000..e807564
--- /dev/null
+++ b/assets/emoticons/flags/gu_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/gw_1x1.tga b/assets/emoticons/flags/gw_1x1.tga
new file mode 100755
index 0000000..5496f98
--- /dev/null
+++ b/assets/emoticons/flags/gw_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/gy_1x1.tga b/assets/emoticons/flags/gy_1x1.tga
new file mode 100755
index 0000000..5b886c9
--- /dev/null
+++ b/assets/emoticons/flags/gy_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/h_1x1.tga b/assets/emoticons/flags/h_1x1.tga
new file mode 100755
index 0000000..b70af72
--- /dev/null
+++ b/assets/emoticons/flags/h_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/hk_1x1.tga b/assets/emoticons/flags/hk_1x1.tga
new file mode 100755
index 0000000..de786d9
--- /dev/null
+++ b/assets/emoticons/flags/hk_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/hm_1x1.tga b/assets/emoticons/flags/hm_1x1.tga
new file mode 100755
index 0000000..51f83b6
--- /dev/null
+++ b/assets/emoticons/flags/hm_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/hr_1x1.tga b/assets/emoticons/flags/hr_1x1.tga
new file mode 100755
index 0000000..23437a6
--- /dev/null
+++ b/assets/emoticons/flags/hr_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ht_1x1.tga b/assets/emoticons/flags/ht_1x1.tga
new file mode 100755
index 0000000..ab0fafc
--- /dev/null
+++ b/assets/emoticons/flags/ht_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/hu_1x1.tga b/assets/emoticons/flags/hu_1x1.tga
new file mode 100755
index 0000000..5831dcf
--- /dev/null
+++ b/assets/emoticons/flags/hu_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/i_1x1.tga b/assets/emoticons/flags/i_1x1.tga
new file mode 100755
index 0000000..5a1ab82
--- /dev/null
+++ b/assets/emoticons/flags/i_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/id_1x1.tga b/assets/emoticons/flags/id_1x1.tga
new file mode 100755
index 0000000..31364b7
--- /dev/null
+++ b/assets/emoticons/flags/id_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ie_1x1.tga b/assets/emoticons/flags/ie_1x1.tga
new file mode 100755
index 0000000..8ea1cbc
--- /dev/null
+++ b/assets/emoticons/flags/ie_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/il_1x1.tga b/assets/emoticons/flags/il_1x1.tga
new file mode 100755
index 0000000..e1a351c
--- /dev/null
+++ b/assets/emoticons/flags/il_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/io_1x1.tga b/assets/emoticons/flags/io_1x1.tga
new file mode 100755
index 0000000..757deb8
--- /dev/null
+++ b/assets/emoticons/flags/io_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/iq_1x1.tga b/assets/emoticons/flags/iq_1x1.tga
new file mode 100755
index 0000000..14c798b
--- /dev/null
+++ b/assets/emoticons/flags/iq_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ir_1x1.tga b/assets/emoticons/flags/ir_1x1.tga
new file mode 100755
index 0000000..49e13aa
--- /dev/null
+++ b/assets/emoticons/flags/ir_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/is_1x1.tga b/assets/emoticons/flags/is_1x1.tga
new file mode 100755
index 0000000..12bd1f4
--- /dev/null
+++ b/assets/emoticons/flags/is_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/it_1x1.tga b/assets/emoticons/flags/it_1x1.tga
new file mode 100755
index 0000000..0832a61
--- /dev/null
+++ b/assets/emoticons/flags/it_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/j_1x1.tga b/assets/emoticons/flags/j_1x1.tga
new file mode 100755
index 0000000..321e2f7
--- /dev/null
+++ b/assets/emoticons/flags/j_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/jm_1x1.tga b/assets/emoticons/flags/jm_1x1.tga
new file mode 100755
index 0000000..7cf9e61
--- /dev/null
+++ b/assets/emoticons/flags/jm_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/jo_1x1.tga b/assets/emoticons/flags/jo_1x1.tga
new file mode 100755
index 0000000..2a043bf
--- /dev/null
+++ b/assets/emoticons/flags/jo_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/k_1x1.tga b/assets/emoticons/flags/k_1x1.tga
new file mode 100755
index 0000000..f9baa24
--- /dev/null
+++ b/assets/emoticons/flags/k_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ke_1x1.tga b/assets/emoticons/flags/ke_1x1.tga
new file mode 100755
index 0000000..78aa2de
--- /dev/null
+++ b/assets/emoticons/flags/ke_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/kh_1x1.tga b/assets/emoticons/flags/kh_1x1.tga
new file mode 100755
index 0000000..850bdcf
--- /dev/null
+++ b/assets/emoticons/flags/kh_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ki_1x1.tga b/assets/emoticons/flags/ki_1x1.tga
new file mode 100755
index 0000000..7d5698b
--- /dev/null
+++ b/assets/emoticons/flags/ki_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/km_1x1.tga b/assets/emoticons/flags/km_1x1.tga
new file mode 100755
index 0000000..a0575e9
--- /dev/null
+++ b/assets/emoticons/flags/km_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/kr_1x1.tga b/assets/emoticons/flags/kr_1x1.tga
new file mode 100755
index 0000000..db2243e
--- /dev/null
+++ b/assets/emoticons/flags/kr_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/kw_1x1.tga b/assets/emoticons/flags/kw_1x1.tga
new file mode 100755
index 0000000..f868c70
--- /dev/null
+++ b/assets/emoticons/flags/kw_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ky_1x1.tga b/assets/emoticons/flags/ky_1x1.tga
new file mode 100755
index 0000000..dfdbf0d
--- /dev/null
+++ b/assets/emoticons/flags/ky_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/kz_1x1.tga b/assets/emoticons/flags/kz_1x1.tga
new file mode 100755
index 0000000..ef7af52
--- /dev/null
+++ b/assets/emoticons/flags/kz_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/la_1x1.tga b/assets/emoticons/flags/la_1x1.tga
new file mode 100755
index 0000000..9951bf0
--- /dev/null
+++ b/assets/emoticons/flags/la_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/lb_1x1.tga b/assets/emoticons/flags/lb_1x1.tga
new file mode 100755
index 0000000..2aa4d3d
--- /dev/null
+++ b/assets/emoticons/flags/lb_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/lc_1x1.tga b/assets/emoticons/flags/lc_1x1.tga
new file mode 100755
index 0000000..c0b6f22
--- /dev/null
+++ b/assets/emoticons/flags/lc_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/li_1x1.tga b/assets/emoticons/flags/li_1x1.tga
new file mode 100755
index 0000000..1407b5b
--- /dev/null
+++ b/assets/emoticons/flags/li_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/lk_1x1.tga b/assets/emoticons/flags/lk_1x1.tga
new file mode 100755
index 0000000..c10a58c
--- /dev/null
+++ b/assets/emoticons/flags/lk_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/lr_1x1.tga b/assets/emoticons/flags/lr_1x1.tga
new file mode 100755
index 0000000..4019ebd
--- /dev/null
+++ b/assets/emoticons/flags/lr_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ls_1x1.tga b/assets/emoticons/flags/ls_1x1.tga
new file mode 100755
index 0000000..d879f8a
--- /dev/null
+++ b/assets/emoticons/flags/ls_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/lt_1x1.tga b/assets/emoticons/flags/lt_1x1.tga
new file mode 100755
index 0000000..db67333
--- /dev/null
+++ b/assets/emoticons/flags/lt_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/lu_1x1.tga b/assets/emoticons/flags/lu_1x1.tga
new file mode 100755
index 0000000..adecf15
--- /dev/null
+++ b/assets/emoticons/flags/lu_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/lv_1x1.tga b/assets/emoticons/flags/lv_1x1.tga
new file mode 100755
index 0000000..7d9900a
--- /dev/null
+++ b/assets/emoticons/flags/lv_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ly_1x1.tga b/assets/emoticons/flags/ly_1x1.tga
new file mode 100755
index 0000000..521b926
--- /dev/null
+++ b/assets/emoticons/flags/ly_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/m_1x1.tga b/assets/emoticons/flags/m_1x1.tga
new file mode 100755
index 0000000..fe9e599
--- /dev/null
+++ b/assets/emoticons/flags/m_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ma_1x1.tga b/assets/emoticons/flags/ma_1x1.tga
new file mode 100755
index 0000000..8b48285
--- /dev/null
+++ b/assets/emoticons/flags/ma_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/mc_1x1.tga b/assets/emoticons/flags/mc_1x1.tga
new file mode 100755
index 0000000..36e2729
--- /dev/null
+++ b/assets/emoticons/flags/mc_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/md_1x1.tga b/assets/emoticons/flags/md_1x1.tga
new file mode 100755
index 0000000..9825a61
--- /dev/null
+++ b/assets/emoticons/flags/md_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/me_1x1.tga b/assets/emoticons/flags/me_1x1.tga
new file mode 100755
index 0000000..52f49fd
--- /dev/null
+++ b/assets/emoticons/flags/me_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/mh_1x1.tga b/assets/emoticons/flags/mh_1x1.tga
new file mode 100755
index 0000000..38e4a12
--- /dev/null
+++ b/assets/emoticons/flags/mh_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/mk_1x1.tga b/assets/emoticons/flags/mk_1x1.tga
new file mode 100755
index 0000000..a8c5f28
--- /dev/null
+++ b/assets/emoticons/flags/mk_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ml_1x1.tga b/assets/emoticons/flags/ml_1x1.tga
new file mode 100755
index 0000000..71505f6
--- /dev/null
+++ b/assets/emoticons/flags/ml_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/mm_1x1.tga b/assets/emoticons/flags/mm_1x1.tga
new file mode 100755
index 0000000..312d6c9
--- /dev/null
+++ b/assets/emoticons/flags/mm_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/mo_1x1.tga b/assets/emoticons/flags/mo_1x1.tga
new file mode 100755
index 0000000..1543c4a
--- /dev/null
+++ b/assets/emoticons/flags/mo_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/mq_1x1.tga b/assets/emoticons/flags/mq_1x1.tga
new file mode 100755
index 0000000..5045f9d
--- /dev/null
+++ b/assets/emoticons/flags/mq_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/mr_1x1.tga b/assets/emoticons/flags/mr_1x1.tga
new file mode 100755
index 0000000..6c45792
--- /dev/null
+++ b/assets/emoticons/flags/mr_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ms_1x1.tga b/assets/emoticons/flags/ms_1x1.tga
new file mode 100755
index 0000000..af1de99
--- /dev/null
+++ b/assets/emoticons/flags/ms_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/mt_1x1.tga b/assets/emoticons/flags/mt_1x1.tga
new file mode 100755
index 0000000..8b269e2
--- /dev/null
+++ b/assets/emoticons/flags/mt_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/mu_1x1.tga b/assets/emoticons/flags/mu_1x1.tga
new file mode 100755
index 0000000..893b763
--- /dev/null
+++ b/assets/emoticons/flags/mu_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/mv_1x1.tga b/assets/emoticons/flags/mv_1x1.tga
new file mode 100755
index 0000000..7d0ec43
--- /dev/null
+++ b/assets/emoticons/flags/mv_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/mw_1x1.tga b/assets/emoticons/flags/mw_1x1.tga
new file mode 100755
index 0000000..4401f93
--- /dev/null
+++ b/assets/emoticons/flags/mw_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/mx_1x1.tga b/assets/emoticons/flags/mx_1x1.tga
new file mode 100755
index 0000000..781825a
--- /dev/null
+++ b/assets/emoticons/flags/mx_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/my_1x1.tga b/assets/emoticons/flags/my_1x1.tga
new file mode 100755
index 0000000..3b4e42e
--- /dev/null
+++ b/assets/emoticons/flags/my_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/mz_1x1.tga b/assets/emoticons/flags/mz_1x1.tga
new file mode 100755
index 0000000..9b5e52e
--- /dev/null
+++ b/assets/emoticons/flags/mz_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/na_1x1.tga b/assets/emoticons/flags/na_1x1.tga
new file mode 100755
index 0000000..0b7410f
--- /dev/null
+++ b/assets/emoticons/flags/na_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/nc_1x1.tga b/assets/emoticons/flags/nc_1x1.tga
new file mode 100755
index 0000000..1f0f716
--- /dev/null
+++ b/assets/emoticons/flags/nc_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ne_1x1.tga b/assets/emoticons/flags/ne_1x1.tga
new file mode 100755
index 0000000..76bc2e7
--- /dev/null
+++ b/assets/emoticons/flags/ne_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/nf_1x1.tga b/assets/emoticons/flags/nf_1x1.tga
new file mode 100755
index 0000000..b21cee3
--- /dev/null
+++ b/assets/emoticons/flags/nf_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ni_1x1.tga b/assets/emoticons/flags/ni_1x1.tga
new file mode 100755
index 0000000..fc40b65
--- /dev/null
+++ b/assets/emoticons/flags/ni_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/nl_1x1.tga b/assets/emoticons/flags/nl_1x1.tga
new file mode 100755
index 0000000..36babd1
--- /dev/null
+++ b/assets/emoticons/flags/nl_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/no_1x1.tga b/assets/emoticons/flags/no_1x1.tga
new file mode 100755
index 0000000..2378573
--- /dev/null
+++ b/assets/emoticons/flags/no_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/nr_1x1.tga b/assets/emoticons/flags/nr_1x1.tga
new file mode 100755
index 0000000..0351687
--- /dev/null
+++ b/assets/emoticons/flags/nr_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/nu_1x1.tga b/assets/emoticons/flags/nu_1x1.tga
new file mode 100755
index 0000000..281bbf8
--- /dev/null
+++ b/assets/emoticons/flags/nu_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/nz_1x1.tga b/assets/emoticons/flags/nz_1x1.tga
new file mode 100755
index 0000000..3fa8137
--- /dev/null
+++ b/assets/emoticons/flags/nz_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/om_1x1.tga b/assets/emoticons/flags/om_1x1.tga
new file mode 100755
index 0000000..349050b
--- /dev/null
+++ b/assets/emoticons/flags/om_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/pa_1x1.tga b/assets/emoticons/flags/pa_1x1.tga
new file mode 100755
index 0000000..66c8ff3
--- /dev/null
+++ b/assets/emoticons/flags/pa_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/pe_1x1.tga b/assets/emoticons/flags/pe_1x1.tga
new file mode 100755
index 0000000..c22ed26
--- /dev/null
+++ b/assets/emoticons/flags/pe_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/pf_1x1.tga b/assets/emoticons/flags/pf_1x1.tga
new file mode 100755
index 0000000..407dac3
--- /dev/null
+++ b/assets/emoticons/flags/pf_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ph_1x1.tga b/assets/emoticons/flags/ph_1x1.tga
new file mode 100755
index 0000000..a461e19
--- /dev/null
+++ b/assets/emoticons/flags/ph_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/pk_1x1.tga b/assets/emoticons/flags/pk_1x1.tga
new file mode 100755
index 0000000..40907f7
--- /dev/null
+++ b/assets/emoticons/flags/pk_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/pl_1x1.tga b/assets/emoticons/flags/pl_1x1.tga
new file mode 100755
index 0000000..5527333
--- /dev/null
+++ b/assets/emoticons/flags/pl_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/pm_1x1.tga b/assets/emoticons/flags/pm_1x1.tga
new file mode 100755
index 0000000..18ab2ef
--- /dev/null
+++ b/assets/emoticons/flags/pm_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/pr_1x1.tga b/assets/emoticons/flags/pr_1x1.tga
new file mode 100755
index 0000000..7f705bd
--- /dev/null
+++ b/assets/emoticons/flags/pr_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ps_1x1.tga b/assets/emoticons/flags/ps_1x1.tga
new file mode 100755
index 0000000..61c4782
--- /dev/null
+++ b/assets/emoticons/flags/ps_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/pt_1x1.tga b/assets/emoticons/flags/pt_1x1.tga
new file mode 100755
index 0000000..4ad9f3b
--- /dev/null
+++ b/assets/emoticons/flags/pt_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/pw_1x1.tga b/assets/emoticons/flags/pw_1x1.tga
new file mode 100755
index 0000000..0662b76
--- /dev/null
+++ b/assets/emoticons/flags/pw_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/py_1x1.tga b/assets/emoticons/flags/py_1x1.tga
new file mode 100755
index 0000000..930a24a
--- /dev/null
+++ b/assets/emoticons/flags/py_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/qa_1x1.tga b/assets/emoticons/flags/qa_1x1.tga
new file mode 100755
index 0000000..8e2dbdc
--- /dev/null
+++ b/assets/emoticons/flags/qa_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/re_1x1.tga b/assets/emoticons/flags/re_1x1.tga
new file mode 100755
index 0000000..ff0d3bc
--- /dev/null
+++ b/assets/emoticons/flags/re_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ro_1x1.tga b/assets/emoticons/flags/ro_1x1.tga
new file mode 100755
index 0000000..c94bb9a
--- /dev/null
+++ b/assets/emoticons/flags/ro_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/rs_1x1.tga b/assets/emoticons/flags/rs_1x1.tga
new file mode 100755
index 0000000..a8c5300
--- /dev/null
+++ b/assets/emoticons/flags/rs_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ru_1x1.tga b/assets/emoticons/flags/ru_1x1.tga
new file mode 100755
index 0000000..cd3cf43
--- /dev/null
+++ b/assets/emoticons/flags/ru_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/rw_1x1.tga b/assets/emoticons/flags/rw_1x1.tga
new file mode 100755
index 0000000..ddbea5c
--- /dev/null
+++ b/assets/emoticons/flags/rw_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/s_1x1.tga b/assets/emoticons/flags/s_1x1.tga
new file mode 100755
index 0000000..2554b87
--- /dev/null
+++ b/assets/emoticons/flags/s_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/sa_1x1.tga b/assets/emoticons/flags/sa_1x1.tga
new file mode 100755
index 0000000..ad23c2a
--- /dev/null
+++ b/assets/emoticons/flags/sa_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/sb_1x1.tga b/assets/emoticons/flags/sb_1x1.tga
new file mode 100755
index 0000000..aa33d33
--- /dev/null
+++ b/assets/emoticons/flags/sb_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/sc_1x1.tga b/assets/emoticons/flags/sc_1x1.tga
new file mode 100755
index 0000000..febe870
--- /dev/null
+++ b/assets/emoticons/flags/sc_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/scld_1x1.tga b/assets/emoticons/flags/scld_1x1.tga
new file mode 100755
index 0000000..b83909d
--- /dev/null
+++ b/assets/emoticons/flags/scld_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/sd_1x1.tga b/assets/emoticons/flags/sd_1x1.tga
new file mode 100755
index 0000000..6368e24
--- /dev/null
+++ b/assets/emoticons/flags/sd_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/se_1x1.tga b/assets/emoticons/flags/se_1x1.tga
new file mode 100755
index 0000000..7861315
--- /dev/null
+++ b/assets/emoticons/flags/se_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/sh_1x1.tga b/assets/emoticons/flags/sh_1x1.tga
new file mode 100755
index 0000000..4ea2fe3
--- /dev/null
+++ b/assets/emoticons/flags/sh_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/si_1x1.tga b/assets/emoticons/flags/si_1x1.tga
new file mode 100755
index 0000000..5fe9ae6
--- /dev/null
+++ b/assets/emoticons/flags/si_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/sj_1x1.tga b/assets/emoticons/flags/sj_1x1.tga
new file mode 100755
index 0000000..2378573
--- /dev/null
+++ b/assets/emoticons/flags/sj_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/sk_1x1.tga b/assets/emoticons/flags/sk_1x1.tga
new file mode 100755
index 0000000..de12faa
--- /dev/null
+++ b/assets/emoticons/flags/sk_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/sl_1x1.tga b/assets/emoticons/flags/sl_1x1.tga
new file mode 100755
index 0000000..154d7c4
--- /dev/null
+++ b/assets/emoticons/flags/sl_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/sm_1x1.tga b/assets/emoticons/flags/sm_1x1.tga
new file mode 100755
index 0000000..8af13cc
--- /dev/null
+++ b/assets/emoticons/flags/sm_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/so_1x1.tga b/assets/emoticons/flags/so_1x1.tga
new file mode 100755
index 0000000..e4cd2f3
--- /dev/null
+++ b/assets/emoticons/flags/so_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/sr_1x1.tga b/assets/emoticons/flags/sr_1x1.tga
new file mode 100755
index 0000000..14da601
--- /dev/null
+++ b/assets/emoticons/flags/sr_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/st_1x1.tga b/assets/emoticons/flags/st_1x1.tga
new file mode 100755
index 0000000..8816cad
--- /dev/null
+++ b/assets/emoticons/flags/st_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/sv_1x1.tga b/assets/emoticons/flags/sv_1x1.tga
new file mode 100755
index 0000000..5697670
--- /dev/null
+++ b/assets/emoticons/flags/sv_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/sy_1x1.tga b/assets/emoticons/flags/sy_1x1.tga
new file mode 100755
index 0000000..35aa72a
--- /dev/null
+++ b/assets/emoticons/flags/sy_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/sz_1x1.tga b/assets/emoticons/flags/sz_1x1.tga
new file mode 100755
index 0000000..d53f15c
--- /dev/null
+++ b/assets/emoticons/flags/sz_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/t_1x1.tga b/assets/emoticons/flags/t_1x1.tga
new file mode 100755
index 0000000..5b316d7
--- /dev/null
+++ b/assets/emoticons/flags/t_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/tc_1x1.tga b/assets/emoticons/flags/tc_1x1.tga
new file mode 100755
index 0000000..cfbd09e
--- /dev/null
+++ b/assets/emoticons/flags/tc_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/td_1x1.tga b/assets/emoticons/flags/td_1x1.tga
new file mode 100755
index 0000000..3bef15a
--- /dev/null
+++ b/assets/emoticons/flags/td_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/tf_1x1.tga b/assets/emoticons/flags/tf_1x1.tga
new file mode 100755
index 0000000..a1ec51a
--- /dev/null
+++ b/assets/emoticons/flags/tf_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/th_1x1.tga b/assets/emoticons/flags/th_1x1.tga
new file mode 100755
index 0000000..78178fd
--- /dev/null
+++ b/assets/emoticons/flags/th_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/tj_1x1.tga b/assets/emoticons/flags/tj_1x1.tga
new file mode 100755
index 0000000..749f1e5
--- /dev/null
+++ b/assets/emoticons/flags/tj_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/tk_1x1.tga b/assets/emoticons/flags/tk_1x1.tga
new file mode 100755
index 0000000..9300598
--- /dev/null
+++ b/assets/emoticons/flags/tk_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/tl_1x1.tga b/assets/emoticons/flags/tl_1x1.tga
new file mode 100755
index 0000000..a4ec981
--- /dev/null
+++ b/assets/emoticons/flags/tl_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/tm_1x1.tga b/assets/emoticons/flags/tm_1x1.tga
new file mode 100755
index 0000000..661692c
--- /dev/null
+++ b/assets/emoticons/flags/tm_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/to_1x1.tga b/assets/emoticons/flags/to_1x1.tga
new file mode 100755
index 0000000..6b8db62
--- /dev/null
+++ b/assets/emoticons/flags/to_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/tr_1x1.tga b/assets/emoticons/flags/tr_1x1.tga
new file mode 100755
index 0000000..17d0198
--- /dev/null
+++ b/assets/emoticons/flags/tr_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/tt_1x1.tga b/assets/emoticons/flags/tt_1x1.tga
new file mode 100755
index 0000000..12536ae
--- /dev/null
+++ b/assets/emoticons/flags/tt_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/tv_1x1.tga b/assets/emoticons/flags/tv_1x1.tga
new file mode 100755
index 0000000..9873fc2
--- /dev/null
+++ b/assets/emoticons/flags/tv_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/tw_1x1.tga b/assets/emoticons/flags/tw_1x1.tga
new file mode 100755
index 0000000..f1a457f
--- /dev/null
+++ b/assets/emoticons/flags/tw_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/tz_1x1.tga b/assets/emoticons/flags/tz_1x1.tga
new file mode 100755
index 0000000..f1392d5
--- /dev/null
+++ b/assets/emoticons/flags/tz_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/u_1x1.tga b/assets/emoticons/flags/u_1x1.tga
new file mode 100755
index 0000000..9617e3a
--- /dev/null
+++ b/assets/emoticons/flags/u_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ua_1x1.tga b/assets/emoticons/flags/ua_1x1.tga
new file mode 100755
index 0000000..46f2c82
--- /dev/null
+++ b/assets/emoticons/flags/ua_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/um_1x1.tga b/assets/emoticons/flags/um_1x1.tga
new file mode 100755
index 0000000..0621922
--- /dev/null
+++ b/assets/emoticons/flags/um_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/us_1x1.tga b/assets/emoticons/flags/us_1x1.tga
new file mode 100755
index 0000000..a58a136
--- /dev/null
+++ b/assets/emoticons/flags/us_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/uy_1x1.tga b/assets/emoticons/flags/uy_1x1.tga
new file mode 100755
index 0000000..9ffa468
--- /dev/null
+++ b/assets/emoticons/flags/uy_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/uz_1x1.tga b/assets/emoticons/flags/uz_1x1.tga
new file mode 100755
index 0000000..03a14fe
--- /dev/null
+++ b/assets/emoticons/flags/uz_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/v_1x1.tga b/assets/emoticons/flags/v_1x1.tga
new file mode 100755
index 0000000..7fd1af1
--- /dev/null
+++ b/assets/emoticons/flags/v_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/va_1x1.tga b/assets/emoticons/flags/va_1x1.tga
new file mode 100755
index 0000000..fd4fcdc
--- /dev/null
+++ b/assets/emoticons/flags/va_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/vc_1x1.tga b/assets/emoticons/flags/vc_1x1.tga
new file mode 100755
index 0000000..cbffdfb
--- /dev/null
+++ b/assets/emoticons/flags/vc_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ve_1x1.tga b/assets/emoticons/flags/ve_1x1.tga
new file mode 100755
index 0000000..39016b8
--- /dev/null
+++ b/assets/emoticons/flags/ve_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/vi_1x1.tga b/assets/emoticons/flags/vi_1x1.tga
new file mode 100755
index 0000000..b8efa28
--- /dev/null
+++ b/assets/emoticons/flags/vi_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/vu_1x1.tga b/assets/emoticons/flags/vu_1x1.tga
new file mode 100755
index 0000000..e56646a
--- /dev/null
+++ b/assets/emoticons/flags/vu_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/wa_1x1.tga b/assets/emoticons/flags/wa_1x1.tga
new file mode 100755
index 0000000..a9cfb5b
--- /dev/null
+++ b/assets/emoticons/flags/wa_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/wf_1x1.tga b/assets/emoticons/flags/wf_1x1.tga
new file mode 100755
index 0000000..928b452
--- /dev/null
+++ b/assets/emoticons/flags/wf_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ws_1x1.tga b/assets/emoticons/flags/ws_1x1.tga
new file mode 100755
index 0000000..b850a78
--- /dev/null
+++ b/assets/emoticons/flags/ws_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/ye_1x1.tga b/assets/emoticons/flags/ye_1x1.tga
new file mode 100755
index 0000000..8220d34
--- /dev/null
+++ b/assets/emoticons/flags/ye_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/yt_1x1.tga b/assets/emoticons/flags/yt_1x1.tga
new file mode 100755
index 0000000..b876271
--- /dev/null
+++ b/assets/emoticons/flags/yt_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/za_1x1.tga b/assets/emoticons/flags/za_1x1.tga
new file mode 100755
index 0000000..a83c81e
--- /dev/null
+++ b/assets/emoticons/flags/za_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/zm_1x1.tga b/assets/emoticons/flags/zm_1x1.tga
new file mode 100755
index 0000000..ae941da
--- /dev/null
+++ b/assets/emoticons/flags/zm_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flags/zw_1x1.tga b/assets/emoticons/flags/zw_1x1.tga
new file mode 100755
index 0000000..510a4b1
--- /dev/null
+++ b/assets/emoticons/flags/zw_1x1.tga
Binary files differ
diff --git a/assets/emoticons/flamer_2x1.tga b/assets/emoticons/flamer_2x1.tga
new file mode 100755
index 0000000..767a3c0
--- /dev/null
+++ b/assets/emoticons/flamer_2x1.tga
Binary files differ
diff --git a/assets/emoticons/foot-in-mouth_1x1.tga b/assets/emoticons/foot-in-mouth_1x1.tga
new file mode 100755
index 0000000..cccac02
--- /dev/null
+++ b/assets/emoticons/foot-in-mouth_1x1.tga
Binary files differ
diff --git a/assets/emoticons/forcefield_1x1.tga b/assets/emoticons/forcefield_1x1.tga
new file mode 100755
index 0000000..4dc74ac
--- /dev/null
+++ b/assets/emoticons/forcefield_1x1.tga
Binary files differ
diff --git a/assets/emoticons/freaked-out_1x1.tga b/assets/emoticons/freaked-out_1x1.tga
new file mode 100755
index 0000000..553b172
--- /dev/null
+++ b/assets/emoticons/freaked-out_1x1.tga
Binary files differ
diff --git a/assets/emoticons/fry_1x1.tga b/assets/emoticons/fry_1x1.tga
new file mode 100644
index 0000000..cdc30de
--- /dev/null
+++ b/assets/emoticons/fry_1x1.tga
Binary files differ
diff --git a/assets/emoticons/ftrapper_1x1.tga b/assets/emoticons/ftrapper_1x1.tga
new file mode 100755
index 0000000..bb548f7
--- /dev/null
+++ b/assets/emoticons/ftrapper_1x1.tga
Binary files differ
diff --git a/assets/emoticons/ghost_1x1.tga b/assets/emoticons/ghost_1x1.tga
new file mode 100755
index 0000000..3f17a2c
--- /dev/null
+++ b/assets/emoticons/ghost_1x1.tga
Binary files differ
diff --git a/assets/emoticons/giggle_1x1.tga b/assets/emoticons/giggle_1x1.tga
new file mode 100755
index 0000000..f361dca
--- /dev/null
+++ b/assets/emoticons/giggle_1x1.tga
Binary files differ
diff --git a/assets/emoticons/girl_1x1.tga b/assets/emoticons/girl_1x1.tga
new file mode 100755
index 0000000..bdb3abd
--- /dev/null
+++ b/assets/emoticons/girl_1x1.tga
Binary files differ
diff --git a/assets/emoticons/glameow_1x1.tga b/assets/emoticons/glameow_1x1.tga
new file mode 100644
index 0000000..d059e68
--- /dev/null
+++ b/assets/emoticons/glameow_1x1.tga
Binary files differ
diff --git a/assets/emoticons/glasses-cool_1x1.tga b/assets/emoticons/glasses-cool_1x1.tga
new file mode 100755
index 0000000..89effdd
--- /dev/null
+++ b/assets/emoticons/glasses-cool_1x1.tga
Binary files differ
diff --git a/assets/emoticons/glasses-nerdy_1x1.tga b/assets/emoticons/glasses-nerdy_1x1.tga
new file mode 100755
index 0000000..ba2c318
--- /dev/null
+++ b/assets/emoticons/glasses-nerdy_1x1.tga
Binary files differ
diff --git a/assets/emoticons/gleaf_1x1.tga b/assets/emoticons/gleaf_1x1.tga
new file mode 100755
index 0000000..8141749
--- /dev/null
+++ b/assets/emoticons/gleaf_1x1.tga
Binary files differ
diff --git a/assets/emoticons/go-away_1x1.tga b/assets/emoticons/go-away_1x1.tga
new file mode 100755
index 0000000..02dc06a
--- /dev/null
+++ b/assets/emoticons/go-away_1x1.tga
Binary files differ
diff --git a/assets/emoticons/goat_1x1.tga b/assets/emoticons/goat_1x1.tga
new file mode 100755
index 0000000..78a486f
--- /dev/null
+++ b/assets/emoticons/goat_1x1.tga
Binary files differ
diff --git a/assets/emoticons/goldgunl_2x1.tga b/assets/emoticons/goldgunl_2x1.tga
new file mode 100644
index 0000000..2cd064c
--- /dev/null
+++ b/assets/emoticons/goldgunl_2x1.tga
Binary files differ
diff --git a/assets/emoticons/goldgunr_2x1.tga b/assets/emoticons/goldgunr_2x1.tga
new file mode 100644
index 0000000..044d4e6
--- /dev/null
+++ b/assets/emoticons/goldgunr_2x1.tga
Binary files differ
diff --git a/assets/emoticons/good_1x1.tga b/assets/emoticons/good_1x1.tga
new file mode 100755
index 0000000..0371451
--- /dev/null
+++ b/assets/emoticons/good_1x1.tga
Binary files differ
diff --git a/assets/emoticons/gotmilk_2x1.tga b/assets/emoticons/gotmilk_2x1.tga
new file mode 100644
index 0000000..1110c71
--- /dev/null
+++ b/assets/emoticons/gotmilk_2x1.tga
Binary files differ
diff --git a/assets/emoticons/granger_1x1.tga b/assets/emoticons/granger_1x1.tga
new file mode 100755
index 0000000..cab0f19
--- /dev/null
+++ b/assets/emoticons/granger_1x1.tga
Binary files differ
diff --git a/assets/emoticons/greenparty_1x1.tga b/assets/emoticons/greenparty_1x1.tga
new file mode 100644
index 0000000..3abba69
--- /dev/null
+++ b/assets/emoticons/greenparty_1x1.tga
Binary files differ
diff --git a/assets/emoticons/grenade_1x1.tga b/assets/emoticons/grenade_1x1.tga
new file mode 100755
index 0000000..5ee49b0
--- /dev/null
+++ b/assets/emoticons/grenade_1x1.tga
Binary files differ
diff --git a/assets/emoticons/gxchat_1x1.tga b/assets/emoticons/gxchat_1x1.tga
new file mode 100644
index 0000000..ba04c6e
--- /dev/null
+++ b/assets/emoticons/gxchat_1x1.tga
Binary files differ
diff --git a/assets/emoticons/hammer_1x1.tga b/assets/emoticons/hammer_1x1.tga
new file mode 100755
index 0000000..729e9f8
--- /dev/null
+++ b/assets/emoticons/hammer_1x1.tga
Binary files differ
diff --git a/assets/emoticons/handcuffs_1x1.tga b/assets/emoticons/handcuffs_1x1.tga
new file mode 100755
index 0000000..aa37e57
--- /dev/null
+++ b/assets/emoticons/handcuffs_1x1.tga
Binary files differ
diff --git a/assets/emoticons/handshake_1x1.tga b/assets/emoticons/handshake_1x1.tga
new file mode 100755
index 0000000..e73b5b8
--- /dev/null
+++ b/assets/emoticons/handshake_1x1.tga
Binary files differ
diff --git a/assets/emoticons/hankhill_1x1.tga b/assets/emoticons/hankhill_1x1.tga
new file mode 100644
index 0000000..1822c05
--- /dev/null
+++ b/assets/emoticons/hankhill_1x1.tga
Binary files differ
diff --git a/assets/emoticons/heart_1x1.tga b/assets/emoticons/heart_1x1.tga
new file mode 100755
index 0000000..b8750d2
--- /dev/null
+++ b/assets/emoticons/heart_1x1.tga
Binary files differ
diff --git a/assets/emoticons/highfive_1x1.tga b/assets/emoticons/highfive_1x1.tga
new file mode 100755
index 0000000..904e176
--- /dev/null
+++ b/assets/emoticons/highfive_1x1.tga
Binary files differ
diff --git a/assets/emoticons/hive_1x1.tga b/assets/emoticons/hive_1x1.tga
new file mode 100755
index 0000000..29d6a9a
--- /dev/null
+++ b/assets/emoticons/hive_1x1.tga
Binary files differ
diff --git a/assets/emoticons/hl2_1x1.tga b/assets/emoticons/hl2_1x1.tga
new file mode 100644
index 0000000..802e472
--- /dev/null
+++ b/assets/emoticons/hl2_1x1.tga
Binary files differ
diff --git a/assets/emoticons/hovel_1x1.tga b/assets/emoticons/hovel_1x1.tga
new file mode 100755
index 0000000..d45dd33
--- /dev/null
+++ b/assets/emoticons/hovel_1x1.tga
Binary files differ
diff --git a/assets/emoticons/hug-left_1x1.tga b/assets/emoticons/hug-left_1x1.tga
new file mode 100755
index 0000000..0c0d5d8
--- /dev/null
+++ b/assets/emoticons/hug-left_1x1.tga
Binary files differ
diff --git a/assets/emoticons/hug-right_1x1.tga b/assets/emoticons/hug-right_1x1.tga
new file mode 100755
index 0000000..65c7e1f
--- /dev/null
+++ b/assets/emoticons/hug-right_1x1.tga
Binary files differ
diff --git a/assets/emoticons/human_1x1.tga b/assets/emoticons/human_1x1.tga
new file mode 100755
index 0000000..7290366
--- /dev/null
+++ b/assets/emoticons/human_1x1.tga
Binary files differ
diff --git a/assets/emoticons/hypnotized_1x1.tga b/assets/emoticons/hypnotized_1x1.tga
new file mode 100755
index 0000000..fa63ef0
--- /dev/null
+++ b/assets/emoticons/hypnotized_1x1.tga
Binary files differ
diff --git a/assets/emoticons/ie_1x1.tga b/assets/emoticons/ie_1x1.tga
new file mode 100644
index 0000000..e1e224f
--- /dev/null
+++ b/assets/emoticons/ie_1x1.tga
Binary files differ
diff --git a/assets/emoticons/ikusari_1x1.tga b/assets/emoticons/ikusari_1x1.tga
new file mode 100755
index 0000000..3610a9b
--- /dev/null
+++ b/assets/emoticons/ikusari_1x1.tga
Binary files differ
diff --git a/assets/emoticons/in-love_1x1.tga b/assets/emoticons/in-love_1x1.tga
new file mode 100755
index 0000000..5f45d26
--- /dev/null
+++ b/assets/emoticons/in-love_1x1.tga
Binary files differ
diff --git a/assets/emoticons/irssi_1x1.tga b/assets/emoticons/irssi_1x1.tga
new file mode 100644
index 0000000..9026c55
--- /dev/null
+++ b/assets/emoticons/irssi_1x1.tga
Binary files differ
diff --git a/assets/emoticons/island_1x1.tga b/assets/emoticons/island_1x1.tga
new file mode 100755
index 0000000..66f3834
--- /dev/null
+++ b/assets/emoticons/island_1x1.tga
Binary files differ
diff --git a/assets/emoticons/jump_1x1.tga b/assets/emoticons/jump_1x1.tga
new file mode 100755
index 0000000..7cf80c1
--- /dev/null
+++ b/assets/emoticons/jump_1x1.tga
Binary files differ
diff --git a/assets/emoticons/jupiter_1x1.tga b/assets/emoticons/jupiter_1x1.tga
new file mode 100755
index 0000000..92290cf
--- /dev/null
+++ b/assets/emoticons/jupiter_1x1.tga
Binary files differ
diff --git a/assets/emoticons/kiss2_1x1.tga b/assets/emoticons/kiss2_1x1.tga
new file mode 100644
index 0000000..a422e3d
--- /dev/null
+++ b/assets/emoticons/kiss2_1x1.tga
Binary files differ
diff --git a/assets/emoticons/kiss_1x1.tga b/assets/emoticons/kiss_1x1.tga
new file mode 100755
index 0000000..a422e3d
--- /dev/null
+++ b/assets/emoticons/kiss_1x1.tga
Binary files differ
diff --git a/assets/emoticons/kissed_1x1.tga b/assets/emoticons/kissed_1x1.tga
new file mode 100755
index 0000000..beacfb2
--- /dev/null
+++ b/assets/emoticons/kissed_1x1.tga
Binary files differ
diff --git a/assets/emoticons/kissing_1x1.tga b/assets/emoticons/kissing_1x1.tga
new file mode 100755
index 0000000..59c3044
--- /dev/null
+++ b/assets/emoticons/kissing_1x1.tga
Binary files differ
diff --git a/assets/emoticons/knife_1x1.tga b/assets/emoticons/knife_1x1.tga
new file mode 100755
index 0000000..b8a132c
--- /dev/null
+++ b/assets/emoticons/knife_1x1.tga
Binary files differ
diff --git a/assets/emoticons/konversation_1x1.tga b/assets/emoticons/konversation_1x1.tga
new file mode 100644
index 0000000..e0998ea
--- /dev/null
+++ b/assets/emoticons/konversation_1x1.tga
Binary files differ
diff --git a/assets/emoticons/kor1_1x1.tga b/assets/emoticons/kor1_1x1.tga
new file mode 100755
index 0000000..a18790d
--- /dev/null
+++ b/assets/emoticons/kor1_1x1.tga
Binary files differ
diff --git a/assets/emoticons/kor2_1x1.tga b/assets/emoticons/kor2_1x1.tga
new file mode 100755
index 0000000..0cb6853
--- /dev/null
+++ b/assets/emoticons/kor2_1x1.tga
Binary files differ
diff --git a/assets/emoticons/kor3_1x1.tga b/assets/emoticons/kor3_1x1.tga
new file mode 100755
index 0000000..abc9438
--- /dev/null
+++ b/assets/emoticons/kor3_1x1.tga
Binary files differ
diff --git a/assets/emoticons/kor_1x1.tga b/assets/emoticons/kor_1x1.tga
new file mode 100755
index 0000000..d86808f
--- /dev/null
+++ b/assets/emoticons/kor_1x1.tga
Binary files differ
diff --git a/assets/emoticons/korban1_8x1.tga b/assets/emoticons/korban1_8x1.tga
new file mode 100644
index 0000000..81d2613
--- /dev/null
+++ b/assets/emoticons/korban1_8x1.tga
Binary files differ
diff --git a/assets/emoticons/korban2_8x1.tga b/assets/emoticons/korban2_8x1.tga
new file mode 100644
index 0000000..219a96b
--- /dev/null
+++ b/assets/emoticons/korban2_8x1.tga
Binary files differ
diff --git a/assets/emoticons/korn_2x1.tga b/assets/emoticons/korn_2x1.tga
new file mode 100755
index 0000000..79795be
--- /dev/null
+++ b/assets/emoticons/korn_2x1.tga
Binary files differ
diff --git a/assets/emoticons/korx1_1x1.tga b/assets/emoticons/korx1_1x1.tga
new file mode 100755
index 0000000..a6eeb2a
--- /dev/null
+++ b/assets/emoticons/korx1_1x1.tga
Binary files differ
diff --git a/assets/emoticons/korx2_1x1.tga b/assets/emoticons/korx2_1x1.tga
new file mode 100755
index 0000000..f9eb84f
--- /dev/null
+++ b/assets/emoticons/korx2_1x1.tga
Binary files differ
diff --git a/assets/emoticons/korx3_1x1.tga b/assets/emoticons/korx3_1x1.tga
new file mode 100755
index 0000000..46cebbe
--- /dev/null
+++ b/assets/emoticons/korx3_1x1.tga
Binary files differ
diff --git a/assets/emoticons/lambda_1x1.tga b/assets/emoticons/lambda_1x1.tga
new file mode 100644
index 0000000..4db4932
--- /dev/null
+++ b/assets/emoticons/lambda_1x1.tga
Binary files differ
diff --git a/assets/emoticons/lamp_1x1.tga b/assets/emoticons/lamp_1x1.tga
new file mode 100755
index 0000000..f702830
--- /dev/null
+++ b/assets/emoticons/lamp_1x1.tga
Binary files differ
diff --git a/assets/emoticons/lasgun_2x1.tga b/assets/emoticons/lasgun_2x1.tga
new file mode 100755
index 0000000..3171c7e
--- /dev/null
+++ b/assets/emoticons/lasgun_2x1.tga
Binary files differ
diff --git a/assets/emoticons/lasgunshot2_2x1.tga b/assets/emoticons/lasgunshot2_2x1.tga
new file mode 100644
index 0000000..0e6213d
--- /dev/null
+++ b/assets/emoticons/lasgunshot2_2x1.tga
Binary files differ
diff --git a/assets/emoticons/lashes_1x1.tga b/assets/emoticons/lashes_1x1.tga
new file mode 100755
index 0000000..423ec0e
--- /dev/null
+++ b/assets/emoticons/lashes_1x1.tga
Binary files differ
diff --git a/assets/emoticons/laugh_1x1.tga b/assets/emoticons/laugh_1x1.tga
new file mode 100755
index 0000000..114bf05
--- /dev/null
+++ b/assets/emoticons/laugh_1x1.tga
Binary files differ
diff --git a/assets/emoticons/lcannon_2x1.tga b/assets/emoticons/lcannon_2x1.tga
new file mode 100755
index 0000000..f97339c
--- /dev/null
+++ b/assets/emoticons/lcannon_2x1.tga
Binary files differ
diff --git a/assets/emoticons/lcannonshot1_2x1.tga b/assets/emoticons/lcannonshot1_2x1.tga
new file mode 100644
index 0000000..da5f6c3
--- /dev/null
+++ b/assets/emoticons/lcannonshot1_2x1.tga
Binary files differ
diff --git a/assets/emoticons/lcannonshot2_2x1.tga b/assets/emoticons/lcannonshot2_2x1.tga
new file mode 100644
index 0000000..e2472d2
--- /dev/null
+++ b/assets/emoticons/lcannonshot2_2x1.tga
Binary files differ
diff --git a/assets/emoticons/liquor_1x1.tga b/assets/emoticons/liquor_1x1.tga
new file mode 100755
index 0000000..37c1f3c
--- /dev/null
+++ b/assets/emoticons/liquor_1x1.tga
Binary files differ
diff --git a/assets/emoticons/loser_1x1.tga b/assets/emoticons/loser_1x1.tga
new file mode 100755
index 0000000..ed580de
--- /dev/null
+++ b/assets/emoticons/loser_1x1.tga
Binary files differ
diff --git a/assets/emoticons/love-over_1x1.tga b/assets/emoticons/love-over_1x1.tga
new file mode 100755
index 0000000..1869e99
--- /dev/null
+++ b/assets/emoticons/love-over_1x1.tga
Binary files differ
diff --git a/assets/emoticons/love_1x1.tga b/assets/emoticons/love_1x1.tga
new file mode 100755
index 0000000..87f2e9b
--- /dev/null
+++ b/assets/emoticons/love_1x1.tga
Binary files differ
diff --git a/assets/emoticons/lying_1x1.tga b/assets/emoticons/lying_1x1.tga
new file mode 100755
index 0000000..51905bd
--- /dev/null
+++ b/assets/emoticons/lying_1x1.tga
Binary files differ
diff --git a/assets/emoticons/mad-tongue_1x1.tga b/assets/emoticons/mad-tongue_1x1.tga
new file mode 100755
index 0000000..aa2a017
--- /dev/null
+++ b/assets/emoticons/mad-tongue_1x1.tga
Binary files differ
diff --git a/assets/emoticons/magnum_2x1.tga b/assets/emoticons/magnum_2x1.tga
new file mode 100644
index 0000000..500c3fc
--- /dev/null
+++ b/assets/emoticons/magnum_2x1.tga
Binary files differ
diff --git a/assets/emoticons/mail_1x1.tga b/assets/emoticons/mail_1x1.tga
new file mode 100755
index 0000000..6f95c0c
--- /dev/null
+++ b/assets/emoticons/mail_1x1.tga
Binary files differ
diff --git a/assets/emoticons/male-fighter1_1x1.tga b/assets/emoticons/male-fighter1_1x1.tga
new file mode 100755
index 0000000..73d34f1
--- /dev/null
+++ b/assets/emoticons/male-fighter1_1x1.tga
Binary files differ
diff --git a/assets/emoticons/male-fighter2_1x1.tga b/assets/emoticons/male-fighter2_1x1.tga
new file mode 100755
index 0000000..0fc559c
--- /dev/null
+++ b/assets/emoticons/male-fighter2_1x1.tga
Binary files differ
diff --git a/assets/emoticons/marauder_1x1.tga b/assets/emoticons/marauder_1x1.tga
new file mode 100755
index 0000000..a3c7cba
--- /dev/null
+++ b/assets/emoticons/marauder_1x1.tga
Binary files differ
diff --git a/assets/emoticons/mars_1x1.tga b/assets/emoticons/mars_1x1.tga
new file mode 100755
index 0000000..52085ab
--- /dev/null
+++ b/assets/emoticons/mars_1x1.tga
Binary files differ
diff --git a/assets/emoticons/mdriver_2x1.tga b/assets/emoticons/mdriver_2x1.tga
new file mode 100755
index 0000000..d129bd6
--- /dev/null
+++ b/assets/emoticons/mdriver_2x1.tga
Binary files differ
diff --git a/assets/emoticons/mdrivershot1_2x1.tga b/assets/emoticons/mdrivershot1_2x1.tga
new file mode 100644
index 0000000..76868d6
--- /dev/null
+++ b/assets/emoticons/mdrivershot1_2x1.tga
Binary files differ
diff --git a/assets/emoticons/mdrivershot2_2x1.tga b/assets/emoticons/mdrivershot2_2x1.tga
new file mode 100644
index 0000000..bfcc0c9
--- /dev/null
+++ b/assets/emoticons/mdrivershot2_2x1.tga
Binary files differ
diff --git a/assets/emoticons/mean_1x1.tga b/assets/emoticons/mean_1x1.tga
new file mode 100755
index 0000000..1cf6536
--- /dev/null
+++ b/assets/emoticons/mean_1x1.tga
Binary files differ
diff --git a/assets/emoticons/meatwad_1x1.tga b/assets/emoticons/meatwad_1x1.tga
new file mode 100644
index 0000000..4e0432a
--- /dev/null
+++ b/assets/emoticons/meatwad_1x1.tga
Binary files differ
diff --git a/assets/emoticons/medstat_1x1.tga b/assets/emoticons/medstat_1x1.tga
new file mode 100755
index 0000000..fc26b53
--- /dev/null
+++ b/assets/emoticons/medstat_1x1.tga
Binary files differ
diff --git a/assets/emoticons/meeting_1x1.tga b/assets/emoticons/meeting_1x1.tga
new file mode 100755
index 0000000..6c1f431
--- /dev/null
+++ b/assets/emoticons/meeting_1x1.tga
Binary files differ
diff --git a/assets/emoticons/mercury_1x1.tga b/assets/emoticons/mercury_1x1.tga
new file mode 100755
index 0000000..45face9
--- /dev/null
+++ b/assets/emoticons/mercury_1x1.tga
Binary files differ
diff --git a/assets/emoticons/messed_1x1.tga b/assets/emoticons/messed_1x1.tga
new file mode 100755
index 0000000..9140f02
--- /dev/null
+++ b/assets/emoticons/messed_1x1.tga
Binary files differ
diff --git a/assets/emoticons/mg_1x1.tga b/assets/emoticons/mg_1x1.tga
new file mode 100755
index 0000000..20828e1
--- /dev/null
+++ b/assets/emoticons/mg_1x1.tga
Binary files differ
diff --git a/assets/emoticons/midori_1x1.tga b/assets/emoticons/midori_1x1.tga
new file mode 100644
index 0000000..5fa8ee4
--- /dev/null
+++ b/assets/emoticons/midori_1x1.tga
Binary files differ
diff --git a/assets/emoticons/milk_1x1.tga b/assets/emoticons/milk_1x1.tga
new file mode 100755
index 0000000..21a5499
--- /dev/null
+++ b/assets/emoticons/milk_1x1.tga
Binary files differ
diff --git a/assets/emoticons/mirc_1x1.tga b/assets/emoticons/mirc_1x1.tga
new file mode 100644
index 0000000..5a0808d
--- /dev/null
+++ b/assets/emoticons/mirc_1x1.tga
Binary files differ
diff --git a/assets/emoticons/mobile_1x1.tga b/assets/emoticons/mobile_1x1.tga
new file mode 100755
index 0000000..0685f24
--- /dev/null
+++ b/assets/emoticons/mobile_1x1.tga
Binary files differ
diff --git a/assets/emoticons/mohawk_1x1.tga b/assets/emoticons/mohawk_1x1.tga
new file mode 100755
index 0000000..ebdef2e
--- /dev/null
+++ b/assets/emoticons/mohawk_1x1.tga
Binary files differ
diff --git a/assets/emoticons/moneymouth_1x1.tga b/assets/emoticons/moneymouth_1x1.tga
new file mode 100755
index 0000000..6d6c5d6
--- /dev/null
+++ b/assets/emoticons/moneymouth_1x1.tga
Binary files differ
diff --git a/assets/emoticons/monkey_1x1.tga b/assets/emoticons/monkey_1x1.tga
new file mode 100755
index 0000000..be658b6
--- /dev/null
+++ b/assets/emoticons/monkey_1x1.tga
Binary files differ
diff --git a/assets/emoticons/moon_1x1.tga b/assets/emoticons/moon_1x1.tga
new file mode 100755
index 0000000..8dbefc9
--- /dev/null
+++ b/assets/emoticons/moon_1x1.tga
Binary files differ
diff --git a/assets/emoticons/msn_1x1.tga b/assets/emoticons/msn_1x1.tga
new file mode 100755
index 0000000..06a3e77
--- /dev/null
+++ b/assets/emoticons/msn_1x1.tga
Binary files differ
diff --git a/assets/emoticons/music_1x1.tga b/assets/emoticons/music_1x1.tga
new file mode 100755
index 0000000..d96f878
--- /dev/null
+++ b/assets/emoticons/music_1x1.tga
Binary files differ
diff --git a/assets/emoticons/musical-note_1x1.tga b/assets/emoticons/musical-note_1x1.tga
new file mode 100755
index 0000000..1eba943
--- /dev/null
+++ b/assets/emoticons/musical-note_1x1.tga
Binary files differ
diff --git a/assets/emoticons/nailbiting_1x1.tga b/assets/emoticons/nailbiting_1x1.tga
new file mode 100755
index 0000000..26350f9
--- /dev/null
+++ b/assets/emoticons/nailbiting_1x1.tga
Binary files differ
diff --git a/assets/emoticons/narwahl_1x1.tga b/assets/emoticons/narwahl_1x1.tga
new file mode 100644
index 0000000..25763b3
--- /dev/null
+++ b/assets/emoticons/narwahl_1x1.tga
Binary files differ
diff --git a/assets/emoticons/neptune_1x1.tga b/assets/emoticons/neptune_1x1.tga
new file mode 100755
index 0000000..64ebc0b
--- /dev/null
+++ b/assets/emoticons/neptune_1x1.tga
Binary files differ
diff --git a/assets/emoticons/neutral_1x1.tga b/assets/emoticons/neutral_1x1.tga
new file mode 100755
index 0000000..ccf9a78
--- /dev/null
+++ b/assets/emoticons/neutral_1x1.tga
Binary files differ
diff --git a/assets/emoticons/nutella_1x1.tga b/assets/emoticons/nutella_1x1.tga
new file mode 100755
index 0000000..e4dbe7d
--- /dev/null
+++ b/assets/emoticons/nutella_1x1.tga
Binary files differ
diff --git a/assets/emoticons/on-the-phone_1x1.tga b/assets/emoticons/on-the-phone_1x1.tga
new file mode 100755
index 0000000..f903b76
--- /dev/null
+++ b/assets/emoticons/on-the-phone_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/apple_1x1.tga b/assets/emoticons/os/apple_1x1.tga
new file mode 100755
index 0000000..8245b82
--- /dev/null
+++ b/assets/emoticons/os/apple_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/arch2_1x1.tga b/assets/emoticons/os/arch2_1x1.tga
new file mode 100755
index 0000000..d8bb2b3
--- /dev/null
+++ b/assets/emoticons/os/arch2_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/arch3_1x1.tga b/assets/emoticons/os/arch3_1x1.tga
new file mode 100755
index 0000000..6cf2885
--- /dev/null
+++ b/assets/emoticons/os/arch3_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/arch_1x1.tga b/assets/emoticons/os/arch_1x1.tga
new file mode 100755
index 0000000..26829e7
--- /dev/null
+++ b/assets/emoticons/os/arch_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/centos_1x1.tga b/assets/emoticons/os/centos_1x1.tga
new file mode 100755
index 0000000..72698a1
--- /dev/null
+++ b/assets/emoticons/os/centos_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/debian_1x1.tga b/assets/emoticons/os/debian_1x1.tga
new file mode 100755
index 0000000..16a8c7d
--- /dev/null
+++ b/assets/emoticons/os/debian_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/dsl_1x1.tga b/assets/emoticons/os/dsl_1x1.tga
new file mode 100755
index 0000000..721df7a
--- /dev/null
+++ b/assets/emoticons/os/dsl_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/fedora_1x1.tga b/assets/emoticons/os/fedora_1x1.tga
new file mode 100755
index 0000000..d90bc72
--- /dev/null
+++ b/assets/emoticons/os/fedora_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/freebsd_1x1.tga b/assets/emoticons/os/freebsd_1x1.tga
new file mode 100755
index 0000000..deecf78
--- /dev/null
+++ b/assets/emoticons/os/freebsd_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/gentoo_1x1.tga b/assets/emoticons/os/gentoo_1x1.tga
new file mode 100755
index 0000000..a838b63
--- /dev/null
+++ b/assets/emoticons/os/gentoo_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/gnome_1x1.tga b/assets/emoticons/os/gnome_1x1.tga
new file mode 100755
index 0000000..1adbc1b
--- /dev/null
+++ b/assets/emoticons/os/gnome_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/kanotix_1x1.tga b/assets/emoticons/os/kanotix_1x1.tga
new file mode 100755
index 0000000..5f622a3
--- /dev/null
+++ b/assets/emoticons/os/kanotix_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/kde_1x1.tga b/assets/emoticons/os/kde_1x1.tga
new file mode 100755
index 0000000..2a6f7c0
--- /dev/null
+++ b/assets/emoticons/os/kde_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/knoppix_1x1.tga b/assets/emoticons/os/knoppix_1x1.tga
new file mode 100755
index 0000000..3f88b13
--- /dev/null
+++ b/assets/emoticons/os/knoppix_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/kubuntu_1x1.tga b/assets/emoticons/os/kubuntu_1x1.tga
new file mode 100755
index 0000000..618dc00
--- /dev/null
+++ b/assets/emoticons/os/kubuntu_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/linspire_1x1.tga b/assets/emoticons/os/linspire_1x1.tga
new file mode 100755
index 0000000..4fbc39a
--- /dev/null
+++ b/assets/emoticons/os/linspire_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/linux_1x1.tga b/assets/emoticons/os/linux_1x1.tga
new file mode 100755
index 0000000..7eeb55d
--- /dev/null
+++ b/assets/emoticons/os/linux_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/mac_1x1.tga b/assets/emoticons/os/mac_1x1.tga
new file mode 100755
index 0000000..84c58ec
--- /dev/null
+++ b/assets/emoticons/os/mac_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/mandriva_1x1.tga b/assets/emoticons/os/mandriva_1x1.tga
new file mode 100755
index 0000000..04bbb53
--- /dev/null
+++ b/assets/emoticons/os/mandriva_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/mint_1x1.tga b/assets/emoticons/os/mint_1x1.tga
new file mode 100755
index 0000000..144f78d
--- /dev/null
+++ b/assets/emoticons/os/mint_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/netbsd_1x1.tga b/assets/emoticons/os/netbsd_1x1.tga
new file mode 100755
index 0000000..9c8da87
--- /dev/null
+++ b/assets/emoticons/os/netbsd_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/openbsd_1x1.tga b/assets/emoticons/os/openbsd_1x1.tga
new file mode 100755
index 0000000..619ab83
--- /dev/null
+++ b/assets/emoticons/os/openbsd_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/pclinuxos_1x1.tga b/assets/emoticons/os/pclinuxos_1x1.tga
new file mode 100755
index 0000000..466107c
--- /dev/null
+++ b/assets/emoticons/os/pclinuxos_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/puppy_1x1.tga b/assets/emoticons/os/puppy_1x1.tga
new file mode 100755
index 0000000..f18cc34
--- /dev/null
+++ b/assets/emoticons/os/puppy_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/redhat_1x1.tga b/assets/emoticons/os/redhat_1x1.tga
new file mode 100755
index 0000000..0757157
--- /dev/null
+++ b/assets/emoticons/os/redhat_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/sabayon_1x1.tga b/assets/emoticons/os/sabayon_1x1.tga
new file mode 100755
index 0000000..6786ebf
--- /dev/null
+++ b/assets/emoticons/os/sabayon_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/slackware_1x1.tga b/assets/emoticons/os/slackware_1x1.tga
new file mode 100755
index 0000000..b655ae6
--- /dev/null
+++ b/assets/emoticons/os/slackware_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/slax_1x1.tga b/assets/emoticons/os/slax_1x1.tga
new file mode 100755
index 0000000..2adaa40
--- /dev/null
+++ b/assets/emoticons/os/slax_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/suse_1x1.tga b/assets/emoticons/os/suse_1x1.tga
new file mode 100755
index 0000000..9a99525
--- /dev/null
+++ b/assets/emoticons/os/suse_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/symphony_1x1.tga b/assets/emoticons/os/symphony_1x1.tga
new file mode 100755
index 0000000..db0ada3
--- /dev/null
+++ b/assets/emoticons/os/symphony_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/ubuntu_1x1.tga b/assets/emoticons/os/ubuntu_1x1.tga
new file mode 100755
index 0000000..9ccb9ee
--- /dev/null
+++ b/assets/emoticons/os/ubuntu_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/windows_1x1.tga b/assets/emoticons/os/windows_1x1.tga
new file mode 100755
index 0000000..9ded264
--- /dev/null
+++ b/assets/emoticons/os/windows_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/xfce_1x1.tga b/assets/emoticons/os/xfce_1x1.tga
new file mode 100755
index 0000000..2ca61e5
--- /dev/null
+++ b/assets/emoticons/os/xfce_1x1.tga
Binary files differ
diff --git a/assets/emoticons/os/xubuntu_1x1.tga b/assets/emoticons/os/xubuntu_1x1.tga
new file mode 100755
index 0000000..ec0fafd
--- /dev/null
+++ b/assets/emoticons/os/xubuntu_1x1.tga
Binary files differ
diff --git a/assets/emoticons/overmind_1x1.tga b/assets/emoticons/overmind_1x1.tga
new file mode 100755
index 0000000..0d2c413
--- /dev/null
+++ b/assets/emoticons/overmind_1x1.tga
Binary files differ
diff --git a/assets/emoticons/painsawShot1_2x1.tga b/assets/emoticons/painsawShot1_2x1.tga
new file mode 100644
index 0000000..a14ebc9
--- /dev/null
+++ b/assets/emoticons/painsawShot1_2x1.tga
Binary files differ
diff --git a/assets/emoticons/painsaw_2x1.tga b/assets/emoticons/painsaw_2x1.tga
new file mode 100755
index 0000000..b12f9c8
--- /dev/null
+++ b/assets/emoticons/painsaw_2x1.tga
Binary files differ
diff --git a/assets/emoticons/party_1x1.tga b/assets/emoticons/party_1x1.tga
new file mode 100755
index 0000000..93ae9f6
--- /dev/null
+++ b/assets/emoticons/party_1x1.tga
Binary files differ
diff --git a/assets/emoticons/peace_1x1.tga b/assets/emoticons/peace_1x1.tga
new file mode 100755
index 0000000..93296dd
--- /dev/null
+++ b/assets/emoticons/peace_1x1.tga
Binary files differ
diff --git a/assets/emoticons/phone_1x1.tga b/assets/emoticons/phone_1x1.tga
new file mode 100755
index 0000000..ad50ca4
--- /dev/null
+++ b/assets/emoticons/phone_1x1.tga
Binary files differ
diff --git a/assets/emoticons/pidgin_1x1.tga b/assets/emoticons/pidgin_1x1.tga
new file mode 100644
index 0000000..d99499d
--- /dev/null
+++ b/assets/emoticons/pidgin_1x1.tga
Binary files differ
diff --git a/assets/emoticons/pig_1x1.tga b/assets/emoticons/pig_1x1.tga
new file mode 100755
index 0000000..b0853af
--- /dev/null
+++ b/assets/emoticons/pig_1x1.tga
Binary files differ
diff --git a/assets/emoticons/pikachu_1x1.tga b/assets/emoticons/pikachu_1x1.tga
new file mode 100644
index 0000000..d153b43
--- /dev/null
+++ b/assets/emoticons/pikachu_1x1.tga
Binary files differ
diff --git a/assets/emoticons/pill_1x1.tga b/assets/emoticons/pill_1x1.tga
new file mode 100755
index 0000000..963b4b3
--- /dev/null
+++ b/assets/emoticons/pill_1x1.tga
Binary files differ
diff --git a/assets/emoticons/pirate_1x1.tga b/assets/emoticons/pirate_1x1.tga
new file mode 100755
index 0000000..1fbb004
--- /dev/null
+++ b/assets/emoticons/pirate_1x1.tga
Binary files differ
diff --git a/assets/emoticons/pirateparty_1x1.tga b/assets/emoticons/pirateparty_1x1.tga
new file mode 100644
index 0000000..aa17aba
--- /dev/null
+++ b/assets/emoticons/pirateparty_1x1.tga
Binary files differ
diff --git a/assets/emoticons/pissed-off_1x1.tga b/assets/emoticons/pissed-off_1x1.tga
new file mode 100755
index 0000000..53aee0f
--- /dev/null
+++ b/assets/emoticons/pissed-off_1x1.tga
Binary files differ
diff --git a/assets/emoticons/pizza_1x1.tga b/assets/emoticons/pizza_1x1.tga
new file mode 100755
index 0000000..afc397f
--- /dev/null
+++ b/assets/emoticons/pizza_1x1.tga
Binary files differ
diff --git a/assets/emoticons/plate_1x1.tga b/assets/emoticons/plate_1x1.tga
new file mode 100755
index 0000000..a38e9c1
--- /dev/null
+++ b/assets/emoticons/plate_1x1.tga
Binary files differ
diff --git a/assets/emoticons/poop_1x1.tga b/assets/emoticons/poop_1x1.tga
new file mode 100755
index 0000000..149131b
--- /dev/null
+++ b/assets/emoticons/poop_1x1.tga
Binary files differ
diff --git a/assets/emoticons/pray_1x1.tga b/assets/emoticons/pray_1x1.tga
new file mode 100755
index 0000000..2023406
--- /dev/null
+++ b/assets/emoticons/pray_1x1.tga
Binary files differ
diff --git a/assets/emoticons/present_1x1.tga b/assets/emoticons/present_1x1.tga
new file mode 100755
index 0000000..b4695fb
--- /dev/null
+++ b/assets/emoticons/present_1x1.tga
Binary files differ
diff --git a/assets/emoticons/prifle_2x1.tga b/assets/emoticons/prifle_2x1.tga
new file mode 100755
index 0000000..c36945f
--- /dev/null
+++ b/assets/emoticons/prifle_2x1.tga
Binary files differ
diff --git a/assets/emoticons/prifleshot1_2x1.tga b/assets/emoticons/prifleshot1_2x1.tga
new file mode 100644
index 0000000..9a1b848
--- /dev/null
+++ b/assets/emoticons/prifleshot1_2x1.tga
Binary files differ
diff --git a/assets/emoticons/pumpkin_1x1.tga b/assets/emoticons/pumpkin_1x1.tga
new file mode 100755
index 0000000..b546b1f
--- /dev/null
+++ b/assets/emoticons/pumpkin_1x1.tga
Binary files differ
diff --git a/assets/emoticons/qq_1x1.tga b/assets/emoticons/qq_1x1.tga
new file mode 100755
index 0000000..6a3b8b3
--- /dev/null
+++ b/assets/emoticons/qq_1x1.tga
Binary files differ
diff --git a/assets/emoticons/question_1x1.tga b/assets/emoticons/question_1x1.tga
new file mode 100755
index 0000000..302582c
--- /dev/null
+++ b/assets/emoticons/question_1x1.tga
Binary files differ
diff --git a/assets/emoticons/quiet_1x1.tga b/assets/emoticons/quiet_1x1.tga
new file mode 100755
index 0000000..be0cbc2
--- /dev/null
+++ b/assets/emoticons/quiet_1x1.tga
Binary files differ
diff --git a/assets/emoticons/rain_1x1.tga b/assets/emoticons/rain_1x1.tga
new file mode 100755
index 0000000..a2a906a
--- /dev/null
+++ b/assets/emoticons/rain_1x1.tga
Binary files differ
diff --git a/assets/emoticons/rainbow_1x1.tga b/assets/emoticons/rainbow_1x1.tga
new file mode 100755
index 0000000..e6d16b0
--- /dev/null
+++ b/assets/emoticons/rainbow_1x1.tga
Binary files differ
diff --git a/assets/emoticons/reactor_1x1.tga b/assets/emoticons/reactor_1x1.tga
new file mode 100755
index 0000000..cbbc21e
--- /dev/null
+++ b/assets/emoticons/reactor_1x1.tga
Binary files differ
diff --git a/assets/emoticons/repeater_1x1.tga b/assets/emoticons/repeater_1x1.tga
new file mode 100755
index 0000000..c2c3712
--- /dev/null
+++ b/assets/emoticons/repeater_1x1.tga
Binary files differ
diff --git a/assets/emoticons/republican_1x1.tga b/assets/emoticons/republican_1x1.tga
new file mode 100644
index 0000000..ded2fea
--- /dev/null
+++ b/assets/emoticons/republican_1x1.tga
Binary files differ
diff --git a/assets/emoticons/retard_1x1.tga b/assets/emoticons/retard_1x1.tga
new file mode 100755
index 0000000..3c90abc
--- /dev/null
+++ b/assets/emoticons/retard_1x1.tga
Binary files differ
diff --git a/assets/emoticons/rifle_2x1.tga b/assets/emoticons/rifle_2x1.tga
new file mode 100755
index 0000000..b59ca2a
--- /dev/null
+++ b/assets/emoticons/rifle_2x1.tga
Binary files differ
diff --git a/assets/emoticons/rifleshot1_2x1.tga b/assets/emoticons/rifleshot1_2x1.tga
new file mode 100644
index 0000000..aa58554
--- /dev/null
+++ b/assets/emoticons/rifleshot1_2x1.tga
Binary files differ
diff --git a/assets/emoticons/rifleshot2_2x1.tga b/assets/emoticons/rifleshot2_2x1.tga
new file mode 100644
index 0000000..ed25513
--- /dev/null
+++ b/assets/emoticons/rifleshot2_2x1.tga
Binary files differ
diff --git a/assets/emoticons/rk_1x1.tga b/assets/emoticons/rk_1x1.tga
new file mode 100755
index 0000000..139cb4c
--- /dev/null
+++ b/assets/emoticons/rk_1x1.tga
Binary files differ
diff --git a/assets/emoticons/rose-dead_1x1.tga b/assets/emoticons/rose-dead_1x1.tga
new file mode 100755
index 0000000..697856c
--- /dev/null
+++ b/assets/emoticons/rose-dead_1x1.tga
Binary files differ
diff --git a/assets/emoticons/rose_1x1.tga b/assets/emoticons/rose_1x1.tga
new file mode 100755
index 0000000..f40fab4
--- /dev/null
+++ b/assets/emoticons/rose_1x1.tga
Binary files differ
diff --git a/assets/emoticons/rotfl_1x1.tga b/assets/emoticons/rotfl_1x1.tga
new file mode 100755
index 0000000..6c03c81
--- /dev/null
+++ b/assets/emoticons/rotfl_1x1.tga
Binary files differ
diff --git a/assets/emoticons/sad_1x1.tga b/assets/emoticons/sad_1x1.tga
new file mode 100755
index 0000000..c7fcc3d
--- /dev/null
+++ b/assets/emoticons/sad_1x1.tga
Binary files differ
diff --git a/assets/emoticons/safari_1x1.tga b/assets/emoticons/safari_1x1.tga
new file mode 100644
index 0000000..df08d39
--- /dev/null
+++ b/assets/emoticons/safari_1x1.tga
Binary files differ
diff --git a/assets/emoticons/sarcastic_1x1.tga b/assets/emoticons/sarcastic_1x1.tga
new file mode 100755
index 0000000..0b5a105
--- /dev/null
+++ b/assets/emoticons/sarcastic_1x1.tga
Binary files differ
diff --git a/assets/emoticons/saturn_1x1.tga b/assets/emoticons/saturn_1x1.tga
new file mode 100755
index 0000000..925498b
--- /dev/null
+++ b/assets/emoticons/saturn_1x1.tga
Binary files differ
diff --git a/assets/emoticons/search_1x1.tga b/assets/emoticons/search_1x1.tga
new file mode 100755
index 0000000..094f205
--- /dev/null
+++ b/assets/emoticons/search_1x1.tga
Binary files differ
diff --git a/assets/emoticons/secret_1x1.tga b/assets/emoticons/secret_1x1.tga
new file mode 100755
index 0000000..e030c0c
--- /dev/null
+++ b/assets/emoticons/secret_1x1.tga
Binary files differ
diff --git a/assets/emoticons/shame_1x1.tga b/assets/emoticons/shame_1x1.tga
new file mode 100755
index 0000000..1de35d1
--- /dev/null
+++ b/assets/emoticons/shame_1x1.tga
Binary files differ
diff --git a/assets/emoticons/sheep_1x1.tga b/assets/emoticons/sheep_1x1.tga
new file mode 100755
index 0000000..14726af
--- /dev/null
+++ b/assets/emoticons/sheep_1x1.tga
Binary files differ
diff --git a/assets/emoticons/shock_1x1.tga b/assets/emoticons/shock_1x1.tga
new file mode 100755
index 0000000..b3942b4
--- /dev/null
+++ b/assets/emoticons/shock_1x1.tga
Binary files differ
diff --git a/assets/emoticons/shotgun_2x1.tga b/assets/emoticons/shotgun_2x1.tga
new file mode 100755
index 0000000..32e1de1
--- /dev/null
+++ b/assets/emoticons/shotgun_2x1.tga
Binary files differ
diff --git a/assets/emoticons/shotgunshot1_2x1.tga b/assets/emoticons/shotgunshot1_2x1.tga
new file mode 100644
index 0000000..08ab053
--- /dev/null
+++ b/assets/emoticons/shotgunshot1_2x1.tga
Binary files differ
diff --git a/assets/emoticons/shout_1x1.tga b/assets/emoticons/shout_1x1.tga
new file mode 100755
index 0000000..d9b3e29
--- /dev/null
+++ b/assets/emoticons/shout_1x1.tga
Binary files differ
diff --git a/assets/emoticons/shut-mouth_1x1.tga b/assets/emoticons/shut-mouth_1x1.tga
new file mode 100755
index 0000000..0bf4403
--- /dev/null
+++ b/assets/emoticons/shut-mouth_1x1.tga
Binary files differ
diff --git a/assets/emoticons/sick_1x1.tga b/assets/emoticons/sick_1x1.tga
new file mode 100755
index 0000000..0064a23
--- /dev/null
+++ b/assets/emoticons/sick_1x1.tga
Binary files differ
diff --git a/assets/emoticons/sidefrown_1x1.tga b/assets/emoticons/sidefrown_1x1.tga
new file mode 100755
index 0000000..b262d9e
--- /dev/null
+++ b/assets/emoticons/sidefrown_1x1.tga
Binary files differ
diff --git a/assets/emoticons/silly_1x1.tga b/assets/emoticons/silly_1x1.tga
new file mode 100755
index 0000000..780a506
--- /dev/null
+++ b/assets/emoticons/silly_1x1.tga
Binary files differ
diff --git a/assets/emoticons/sinister_1x1.tga b/assets/emoticons/sinister_1x1.tga
new file mode 100755
index 0000000..7e68c36
--- /dev/null
+++ b/assets/emoticons/sinister_1x1.tga
Binary files differ
diff --git a/assets/emoticons/skeleton_1x1.tga b/assets/emoticons/skeleton_1x1.tga
new file mode 100755
index 0000000..355da3e
--- /dev/null
+++ b/assets/emoticons/skeleton_1x1.tga
Binary files differ
diff --git a/assets/emoticons/skeletor_2x1.tga b/assets/emoticons/skeletor_2x1.tga
new file mode 100644
index 0000000..2e54527
--- /dev/null
+++ b/assets/emoticons/skeletor_2x1.tga
Binary files differ
diff --git a/assets/emoticons/skywalker_1x1.tga b/assets/emoticons/skywalker_1x1.tga
new file mode 100755
index 0000000..07c298b
--- /dev/null
+++ b/assets/emoticons/skywalker_1x1.tga
Binary files differ
diff --git a/assets/emoticons/sleepy_1x1.tga b/assets/emoticons/sleepy_1x1.tga
new file mode 100755
index 0000000..6c050b8
--- /dev/null
+++ b/assets/emoticons/sleepy_1x1.tga
Binary files differ
diff --git a/assets/emoticons/smile-big_1x1.tga b/assets/emoticons/smile-big_1x1.tga
new file mode 100755
index 0000000..00b0749
--- /dev/null
+++ b/assets/emoticons/smile-big_1x1.tga
Binary files differ
diff --git a/assets/emoticons/smile_1x1.tga b/assets/emoticons/smile_1x1.tga
new file mode 100755
index 0000000..9d87c47
--- /dev/null
+++ b/assets/emoticons/smile_1x1.tga
Binary files differ
diff --git a/assets/emoticons/smirk_1x1.tga b/assets/emoticons/smirk_1x1.tga
new file mode 100755
index 0000000..1522ef1
--- /dev/null
+++ b/assets/emoticons/smirk_1x1.tga
Binary files differ
diff --git a/assets/emoticons/snail_1x1.tga b/assets/emoticons/snail_1x1.tga
new file mode 100755
index 0000000..efd8c33
--- /dev/null
+++ b/assets/emoticons/snail_1x1.tga
Binary files differ
diff --git a/assets/emoticons/snicker_1x1.tga b/assets/emoticons/snicker_1x1.tga
new file mode 100755
index 0000000..a7e3f1d
--- /dev/null
+++ b/assets/emoticons/snicker_1x1.tga
Binary files differ
diff --git a/assets/emoticons/snowman_1x1.tga b/assets/emoticons/snowman_1x1.tga
new file mode 100755
index 0000000..7a23a71
--- /dev/null
+++ b/assets/emoticons/snowman_1x1.tga
Binary files differ
diff --git a/assets/emoticons/soccerball_1x1.tga b/assets/emoticons/soccerball_1x1.tga
new file mode 100755
index 0000000..41a9186
--- /dev/null
+++ b/assets/emoticons/soccerball_1x1.tga
Binary files differ
diff --git a/assets/emoticons/soda_1x1.tga b/assets/emoticons/soda_1x1.tga
new file mode 100755
index 0000000..232a83d
--- /dev/null
+++ b/assets/emoticons/soda_1x1.tga
Binary files differ
diff --git a/assets/emoticons/soh2_1x1.tga b/assets/emoticons/soh2_1x1.tga
new file mode 100644
index 0000000..f0adbf8
--- /dev/null
+++ b/assets/emoticons/soh2_1x1.tga
Binary files differ
diff --git a/assets/emoticons/soh_1x1.tga b/assets/emoticons/soh_1x1.tga
new file mode 100755
index 0000000..3bcfe06
--- /dev/null
+++ b/assets/emoticons/soh_1x1.tga
Binary files differ
diff --git a/assets/emoticons/soldier_1x1.tga b/assets/emoticons/soldier_1x1.tga
new file mode 100755
index 0000000..e310b69
--- /dev/null
+++ b/assets/emoticons/soldier_1x1.tga
Binary files differ
diff --git a/assets/emoticons/spam_1x1.tga b/assets/emoticons/spam_1x1.tga
new file mode 100755
index 0000000..85bcda4
--- /dev/null
+++ b/assets/emoticons/spam_1x1.tga
Binary files differ
diff --git a/assets/emoticons/squirrel_2x1.tga b/assets/emoticons/squirrel_2x1.tga
new file mode 100644
index 0000000..d332e11
--- /dev/null
+++ b/assets/emoticons/squirrel_2x1.tga
Binary files differ
diff --git a/assets/emoticons/star_1x1.tga b/assets/emoticons/star_1x1.tga
new file mode 100755
index 0000000..030e210
--- /dev/null
+++ b/assets/emoticons/star_1x1.tga
Binary files differ
diff --git a/assets/emoticons/starving_1x1.tga b/assets/emoticons/starving_1x1.tga
new file mode 100755
index 0000000..2e34ec8
--- /dev/null
+++ b/assets/emoticons/starving_1x1.tga
Binary files differ
diff --git a/assets/emoticons/stop_1x1.tga b/assets/emoticons/stop_1x1.tga
new file mode 100755
index 0000000..7bc5735
--- /dev/null
+++ b/assets/emoticons/stop_1x1.tga
Binary files differ
diff --git a/assets/emoticons/struggle_1x1.tga b/assets/emoticons/struggle_1x1.tga
new file mode 100755
index 0000000..5e43894
--- /dev/null
+++ b/assets/emoticons/struggle_1x1.tga
Binary files differ
diff --git a/assets/emoticons/sun_1x1.tga b/assets/emoticons/sun_1x1.tga
new file mode 100755
index 0000000..bde282a
--- /dev/null
+++ b/assets/emoticons/sun_1x1.tga
Binary files differ
diff --git a/assets/emoticons/swatter_1x1.tga b/assets/emoticons/swatter_1x1.tga
new file mode 100755
index 0000000..869cfbf
--- /dev/null
+++ b/assets/emoticons/swatter_1x1.tga
Binary files differ
diff --git a/assets/emoticons/sweat_1x1.tga b/assets/emoticons/sweat_1x1.tga
new file mode 100755
index 0000000..7603cfd
--- /dev/null
+++ b/assets/emoticons/sweat_1x1.tga
Binary files differ
diff --git a/assets/emoticons/talktohand_1x1.tga b/assets/emoticons/talktohand_1x1.tga
new file mode 100755
index 0000000..04439d2
--- /dev/null
+++ b/assets/emoticons/talktohand_1x1.tga
Binary files differ
diff --git a/assets/emoticons/teamspeak_1x1.tga b/assets/emoticons/teamspeak_1x1.tga
new file mode 100644
index 0000000..e4029df
--- /dev/null
+++ b/assets/emoticons/teamspeak_1x1.tga
Binary files differ
diff --git a/assets/emoticons/teeth_1x1.tga b/assets/emoticons/teeth_1x1.tga
new file mode 100755
index 0000000..d2070c6
--- /dev/null
+++ b/assets/emoticons/teeth_1x1.tga
Binary files differ
diff --git a/assets/emoticons/telenode_1x1.tga b/assets/emoticons/telenode_1x1.tga
new file mode 100755
index 0000000..fce534b
--- /dev/null
+++ b/assets/emoticons/telenode_1x1.tga
Binary files differ
diff --git a/assets/emoticons/terror_1x1.tga b/assets/emoticons/terror_1x1.tga
new file mode 100755
index 0000000..57f81e9
--- /dev/null
+++ b/assets/emoticons/terror_1x1.tga
Binary files differ
diff --git a/assets/emoticons/tesla_1x1.tga b/assets/emoticons/tesla_1x1.tga
new file mode 100755
index 0000000..de8a816
--- /dev/null
+++ b/assets/emoticons/tesla_1x1.tga
Binary files differ
diff --git a/assets/emoticons/thinking_1x1.tga b/assets/emoticons/thinking_1x1.tga
new file mode 100755
index 0000000..999c1be
--- /dev/null
+++ b/assets/emoticons/thinking_1x1.tga
Binary files differ
diff --git a/assets/emoticons/thorn1_1x1.tga b/assets/emoticons/thorn1_1x1.tga
new file mode 100644
index 0000000..8215e6f
--- /dev/null
+++ b/assets/emoticons/thorn1_1x1.tga
Binary files differ
diff --git a/assets/emoticons/thorn2_1x1.tga b/assets/emoticons/thorn2_1x1.tga
new file mode 100644
index 0000000..2ed2305
--- /dev/null
+++ b/assets/emoticons/thorn2_1x1.tga
Binary files differ
diff --git a/assets/emoticons/thunder_1x1.tga b/assets/emoticons/thunder_1x1.tga
new file mode 100755
index 0000000..d0fddde
--- /dev/null
+++ b/assets/emoticons/thunder_1x1.tga
Binary files differ
diff --git a/assets/emoticons/time-out_1x1.tga b/assets/emoticons/time-out_1x1.tga
new file mode 100755
index 0000000..b32d36b
--- /dev/null
+++ b/assets/emoticons/time-out_1x1.tga
Binary files differ
diff --git a/assets/emoticons/tongue_1x1.tga b/assets/emoticons/tongue_1x1.tga
new file mode 100755
index 0000000..f4dcbb8
--- /dev/null
+++ b/assets/emoticons/tongue_1x1.tga
Binary files differ
diff --git a/assets/emoticons/trapper_1x1.tga b/assets/emoticons/trapper_1x1.tga
new file mode 100755
index 0000000..b6dc1c1
--- /dev/null
+++ b/assets/emoticons/trapper_1x1.tga
Binary files differ
diff --git a/assets/emoticons/tremble_1x1.tga b/assets/emoticons/tremble_1x1.tga
new file mode 100755
index 0000000..bb9ddf4
--- /dev/null
+++ b/assets/emoticons/tremble_1x1.tga
Binary files differ
diff --git a/assets/emoticons/turret_1x1.tga b/assets/emoticons/turret_1x1.tga
new file mode 100755
index 0000000..f606ac2
--- /dev/null
+++ b/assets/emoticons/turret_1x1.tga
Binary files differ
diff --git a/assets/emoticons/turtle_1x1.tga b/assets/emoticons/turtle_1x1.tga
new file mode 100755
index 0000000..9f90849
--- /dev/null
+++ b/assets/emoticons/turtle_1x1.tga
Binary files differ
diff --git a/assets/emoticons/tv_1x1.tga b/assets/emoticons/tv_1x1.tga
new file mode 100755
index 0000000..2326254
--- /dev/null
+++ b/assets/emoticons/tv_1x1.tga
Binary files differ
diff --git a/assets/emoticons/tyrant_1x1.tga b/assets/emoticons/tyrant_1x1.tga
new file mode 100755
index 0000000..29e37b0
--- /dev/null
+++ b/assets/emoticons/tyrant_1x1.tga
Binary files differ
diff --git a/assets/emoticons/umbrella_1x1.tga b/assets/emoticons/umbrella_1x1.tga
new file mode 100755
index 0000000..49a7033
--- /dev/null
+++ b/assets/emoticons/umbrella_1x1.tga
Binary files differ
diff --git a/assets/emoticons/uranus_1x1.tga b/assets/emoticons/uranus_1x1.tga
new file mode 100755
index 0000000..6524c56
--- /dev/null
+++ b/assets/emoticons/uranus_1x1.tga
Binary files differ
diff --git a/assets/emoticons/vampire_1x1.tga b/assets/emoticons/vampire_1x1.tga
new file mode 100755
index 0000000..009c607
--- /dev/null
+++ b/assets/emoticons/vampire_1x1.tga
Binary files differ
diff --git a/assets/emoticons/venus_1x1.tga b/assets/emoticons/venus_1x1.tga
new file mode 100755
index 0000000..82d1420
--- /dev/null
+++ b/assets/emoticons/venus_1x1.tga
Binary files differ
diff --git a/assets/emoticons/victory_1x1.tga b/assets/emoticons/victory_1x1.tga
new file mode 100755
index 0000000..5ab6ed0
--- /dev/null
+++ b/assets/emoticons/victory_1x1.tga
Binary files differ
diff --git a/assets/emoticons/waiting_1x1.tga b/assets/emoticons/waiting_1x1.tga
new file mode 100755
index 0000000..f9ebe5b
--- /dev/null
+++ b/assets/emoticons/waiting_1x1.tga
Binary files differ
diff --git a/assets/emoticons/watermelon_1x1.tga b/assets/emoticons/watermelon_1x1.tga
new file mode 100755
index 0000000..9c3c15e
--- /dev/null
+++ b/assets/emoticons/watermelon_1x1.tga
Binary files differ
diff --git a/assets/emoticons/waving_1x1.tga b/assets/emoticons/waving_1x1.tga
new file mode 100755
index 0000000..989235f
--- /dev/null
+++ b/assets/emoticons/waving_1x1.tga
Binary files differ
diff --git a/assets/emoticons/weep_1x1.tga b/assets/emoticons/weep_1x1.tga
new file mode 100755
index 0000000..8e3f83a
--- /dev/null
+++ b/assets/emoticons/weep_1x1.tga
Binary files differ
diff --git a/assets/emoticons/wilt_1x1.tga b/assets/emoticons/wilt_1x1.tga
new file mode 100755
index 0000000..5766d9c
--- /dev/null
+++ b/assets/emoticons/wilt_1x1.tga
Binary files differ
diff --git a/assets/emoticons/wink_1x1.tga b/assets/emoticons/wink_1x1.tga
new file mode 100755
index 0000000..f9546ca
--- /dev/null
+++ b/assets/emoticons/wink_1x1.tga
Binary files differ
diff --git a/assets/emoticons/worship_1x1.tga b/assets/emoticons/worship_1x1.tga
new file mode 100755
index 0000000..b2b462c
--- /dev/null
+++ b/assets/emoticons/worship_1x1.tga
Binary files differ
diff --git a/assets/emoticons/xael_2x1.tga b/assets/emoticons/xael_2x1.tga
new file mode 100755
index 0000000..9aff3e7
--- /dev/null
+++ b/assets/emoticons/xael_2x1.tga
Binary files differ
diff --git a/assets/emoticons/xchat_1x1.tga b/assets/emoticons/xchat_1x1.tga
new file mode 100644
index 0000000..1768227
--- /dev/null
+++ b/assets/emoticons/xchat_1x1.tga
Binary files differ
diff --git a/assets/emoticons/yahoo_1x1.tga b/assets/emoticons/yahoo_1x1.tga
new file mode 100644
index 0000000..24c4c46
--- /dev/null
+++ b/assets/emoticons/yahoo_1x1.tga
Binary files differ
diff --git a/assets/emoticons/yawn_1x1.tga b/assets/emoticons/yawn_1x1.tga
new file mode 100755
index 0000000..b40c543
--- /dev/null
+++ b/assets/emoticons/yawn_1x1.tga
Binary files differ
diff --git a/assets/emoticons/yin-yang_1x1.tga b/assets/emoticons/yin-yang_1x1.tga
new file mode 100755
index 0000000..0eafa5e
--- /dev/null
+++ b/assets/emoticons/yin-yang_1x1.tga
Binary files differ
diff --git a/assets/gfx/2d/blip.tga b/assets/gfx/2d/blip.tga
new file mode 100644
index 0000000..60be315
--- /dev/null
+++ b/assets/gfx/2d/blip.tga
Binary files differ
diff --git a/assets/gfx/2d/ch_acircle.tga b/assets/gfx/2d/ch_acircle.tga
new file mode 100644
index 0000000..36f4294
--- /dev/null
+++ b/assets/gfx/2d/ch_acircle.tga
Binary files differ
diff --git a/assets/gfx/2d/ch_adot.tga b/assets/gfx/2d/ch_adot.tga
new file mode 100644
index 0000000..0411d4e
--- /dev/null
+++ b/assets/gfx/2d/ch_adot.tga
Binary files differ
diff --git a/assets/gfx/2d/ch_afriendly.tga b/assets/gfx/2d/ch_afriendly.tga
new file mode 100644
index 0000000..068bd99
--- /dev/null
+++ b/assets/gfx/2d/ch_afriendly.tga
Binary files differ
diff --git a/assets/gfx/2d/ch_aheadshot.tga b/assets/gfx/2d/ch_aheadshot.tga
new file mode 100644
index 0000000..a9dfdcb
--- /dev/null
+++ b/assets/gfx/2d/ch_aheadshot.tga
Binary files differ
diff --git a/assets/gfx/2d/ch_circle.tga b/assets/gfx/2d/ch_circle.tga
new file mode 100644
index 0000000..19729a2
--- /dev/null
+++ b/assets/gfx/2d/ch_circle.tga
Binary files differ
diff --git a/assets/gfx/2d/ch_circlehit.tga b/assets/gfx/2d/ch_circlehit.tga
new file mode 100644
index 0000000..2a94df6
--- /dev/null
+++ b/assets/gfx/2d/ch_circlehit.tga
Binary files differ
diff --git a/assets/gfx/2d/ch_dot.tga b/assets/gfx/2d/ch_dot.tga
new file mode 100644
index 0000000..b9c490b
--- /dev/null
+++ b/assets/gfx/2d/ch_dot.tga
Binary files differ
diff --git a/assets/gfx/2d/ch_dothit.tga b/assets/gfx/2d/ch_dothit.tga
new file mode 100644
index 0000000..0701301
--- /dev/null
+++ b/assets/gfx/2d/ch_dothit.tga
Binary files differ
diff --git a/assets/gfx/2d/ch_friendly.tga b/assets/gfx/2d/ch_friendly.tga
new file mode 100644
index 0000000..655bf27
--- /dev/null
+++ b/assets/gfx/2d/ch_friendly.tga
Binary files differ
diff --git a/assets/gfx/2d/digital/0.tga b/assets/gfx/2d/digital/0.tga
new file mode 100644
index 0000000..750a333
--- /dev/null
+++ b/assets/gfx/2d/digital/0.tga
Binary files differ
diff --git a/assets/gfx/2d/digital/1.tga b/assets/gfx/2d/digital/1.tga
new file mode 100644
index 0000000..4e07905
--- /dev/null
+++ b/assets/gfx/2d/digital/1.tga
Binary files differ
diff --git a/assets/gfx/2d/digital/2.tga b/assets/gfx/2d/digital/2.tga
new file mode 100644
index 0000000..cf909c4
--- /dev/null
+++ b/assets/gfx/2d/digital/2.tga
Binary files differ
diff --git a/assets/gfx/2d/digital/3.tga b/assets/gfx/2d/digital/3.tga
new file mode 100644
index 0000000..1cad2b4
--- /dev/null
+++ b/assets/gfx/2d/digital/3.tga
Binary files differ
diff --git a/assets/gfx/2d/digital/4.tga b/assets/gfx/2d/digital/4.tga
new file mode 100644
index 0000000..9ca9d37
--- /dev/null
+++ b/assets/gfx/2d/digital/4.tga
Binary files differ
diff --git a/assets/gfx/2d/digital/5.tga b/assets/gfx/2d/digital/5.tga
new file mode 100644
index 0000000..0cb7f4d
--- /dev/null
+++ b/assets/gfx/2d/digital/5.tga
Binary files differ
diff --git a/assets/gfx/2d/digital/6.tga b/assets/gfx/2d/digital/6.tga
new file mode 100644
index 0000000..021528e
--- /dev/null
+++ b/assets/gfx/2d/digital/6.tga
Binary files differ
diff --git a/assets/gfx/2d/digital/7.tga b/assets/gfx/2d/digital/7.tga
new file mode 100644
index 0000000..bd38da7
--- /dev/null
+++ b/assets/gfx/2d/digital/7.tga
Binary files differ
diff --git a/assets/gfx/2d/digital/8.tga b/assets/gfx/2d/digital/8.tga
new file mode 100644
index 0000000..ead132a
--- /dev/null
+++ b/assets/gfx/2d/digital/8.tga
Binary files differ
diff --git a/assets/gfx/2d/digital/9.tga b/assets/gfx/2d/digital/9.tga
new file mode 100644
index 0000000..9096bb3
--- /dev/null
+++ b/assets/gfx/2d/digital/9.tga
Binary files differ
diff --git a/assets/gfx/2d/digital/comma.tga b/assets/gfx/2d/digital/comma.tga
new file mode 100644
index 0000000..6cafe71
--- /dev/null
+++ b/assets/gfx/2d/digital/comma.tga
Binary files differ
diff --git a/assets/gfx/2d/digital/minus.tga b/assets/gfx/2d/digital/minus.tga
new file mode 100644
index 0000000..d7f5540
--- /dev/null
+++ b/assets/gfx/2d/digital/minus.tga
Binary files differ
diff --git a/assets/gfx/ckit/background.jpg b/assets/gfx/ckit/background.jpg
new file mode 100644
index 0000000..3f7b67c
--- /dev/null
+++ b/assets/gfx/ckit/background.jpg
Binary files differ
diff --git a/assets/gfx/ckit/icon_bp.tga b/assets/gfx/ckit/icon_bp.tga
new file mode 100644
index 0000000..ab2d5e4
--- /dev/null
+++ b/assets/gfx/ckit/icon_bp.tga
Binary files differ
diff --git a/assets/gfx/ckit/icon_current.tga b/assets/gfx/ckit/icon_current.tga
new file mode 100644
index 0000000..aff0b8c
--- /dev/null
+++ b/assets/gfx/ckit/icon_current.tga
Binary files differ
diff --git a/assets/gfx/ckit/icon_depth.tga b/assets/gfx/ckit/icon_depth.tga
new file mode 100644
index 0000000..b53d068
--- /dev/null
+++ b/assets/gfx/ckit/icon_depth.tga
Binary files differ
diff --git a/assets/gfx/ckit/icon_health.tga b/assets/gfx/ckit/icon_health.tga
new file mode 100644
index 0000000..04cc7fd
--- /dev/null
+++ b/assets/gfx/ckit/icon_health.tga
Binary files differ
diff --git a/assets/gfx/ckit/icon_height.tga b/assets/gfx/ckit/icon_height.tga
new file mode 100644
index 0000000..49e397d
--- /dev/null
+++ b/assets/gfx/ckit/icon_height.tga
Binary files differ
diff --git a/assets/gfx/ckit/icon_network.tga b/assets/gfx/ckit/icon_network.tga
new file mode 100644
index 0000000..dbfc42f
--- /dev/null
+++ b/assets/gfx/ckit/icon_network.tga
Binary files differ
diff --git a/assets/gfx/ckit/icon_nopower.tga b/assets/gfx/ckit/icon_nopower.tga
new file mode 100644
index 0000000..9a65acf
--- /dev/null
+++ b/assets/gfx/ckit/icon_nopower.tga
Binary files differ
diff --git a/assets/gfx/ckit/icon_nosurge.tga b/assets/gfx/ckit/icon_nosurge.tga
new file mode 100644
index 0000000..e55a715
--- /dev/null
+++ b/assets/gfx/ckit/icon_nosurge.tga
Binary files differ
diff --git a/assets/gfx/ckit/icon_off.tga b/assets/gfx/ckit/icon_off.tga
new file mode 100644
index 0000000..e3f75b7
--- /dev/null
+++ b/assets/gfx/ckit/icon_off.tga
Binary files differ
diff --git a/assets/gfx/ckit/icon_power.tga b/assets/gfx/ckit/icon_power.tga
new file mode 100644
index 0000000..581f171
--- /dev/null
+++ b/assets/gfx/ckit/icon_power.tga
Binary files differ
diff --git a/assets/gfx/ckit/icon_storedbp.tga b/assets/gfx/ckit/icon_storedbp.tga
new file mode 100644
index 0000000..a466b60
--- /dev/null
+++ b/assets/gfx/ckit/icon_storedbp.tga
Binary files differ
diff --git a/assets/gfx/ckit/icon_surge.tga b/assets/gfx/ckit/icon_surge.tga
new file mode 100644
index 0000000..f1a398c
--- /dev/null
+++ b/assets/gfx/ckit/icon_surge.tga
Binary files differ
diff --git a/assets/gfx/ckit/icon_time.tga b/assets/gfx/ckit/icon_time.tga
new file mode 100644
index 0000000..421c8e2
--- /dev/null
+++ b/assets/gfx/ckit/icon_time.tga
Binary files differ
diff --git a/assets/gfx/ckit/icon_voltage.tga b/assets/gfx/ckit/icon_voltage.tga
new file mode 100644
index 0000000..7385ee2
--- /dev/null
+++ b/assets/gfx/ckit/icon_voltage.tga
Binary files differ
diff --git a/assets/gfx/ckit/icon_width.tga b/assets/gfx/ckit/icon_width.tga
new file mode 100644
index 0000000..13c1622
--- /dev/null
+++ b/assets/gfx/ckit/icon_width.tga
Binary files differ
diff --git a/assets/gfx/ckit/noise.jpg b/assets/gfx/ckit/noise.jpg
new file mode 100644
index 0000000..d6d0a5f
--- /dev/null
+++ b/assets/gfx/ckit/noise.jpg
Binary files differ
diff --git a/assets/gfx/lightning/lightning01.jpg b/assets/gfx/lightning/lightning01.jpg
new file mode 100644
index 0000000..b827cd2
--- /dev/null
+++ b/assets/gfx/lightning/lightning01.jpg
Binary files differ
diff --git a/assets/models/buildables/capbank/animation.cfg b/assets/models/buildables/capbank/animation.cfg
new file mode 100644
index 0000000..b7b3ba5
--- /dev/null
+++ b/assets/models/buildables/capbank/animation.cfg
@@ -0,0 +1,14 @@
+0 0 0 0 // CONSTRUCT1
+0 0 0 0 // CONSTRUCT1
+0 0 0 0 // IDLE1
+0 0 0 0 // IDLE2
+0 0 0 0 // IDLE3
+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
+0 0 0 0 // DEATH
+0 0 0 0 // DEATH
+0 0 0 0 // DEATH
diff --git a/assets/models/buildables/capbank/capbank.jpg b/assets/models/buildables/capbank/capbank.jpg
new file mode 100644
index 0000000..e8aa20e
--- /dev/null
+++ b/assets/models/buildables/capbank/capbank.jpg
Binary files differ
diff --git a/assets/models/buildables/capbank/capbank.md3 b/assets/models/buildables/capbank/capbank.md3
new file mode 100644
index 0000000..8dd509f
--- /dev/null
+++ b/assets/models/buildables/capbank/capbank.md3
Binary files differ
diff --git a/assets/models/buildables/capbank/capbank_lights.jpg b/assets/models/buildables/capbank/capbank_lights.jpg
new file mode 100644
index 0000000..f744a2b
--- /dev/null
+++ b/assets/models/buildables/capbank/capbank_lights.jpg
Binary files differ
diff --git a/assets/models/buildables/medistat/animation.cfg b/assets/models/buildables/medistat/animation.cfg
new file mode 100644
index 0000000..31a8c68
--- /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 18 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/refinery/animation.cfg b/assets/models/buildables/refinery/animation.cfg
new file mode 100644
index 0000000..117ed54
--- /dev/null
+++ b/assets/models/buildables/refinery/animation.cfg
@@ -0,0 +1,15 @@
+//refinery
+0 10 0 10 // CONSTRUCT1
+0 10 0 10 // CONSTRUCT2
+10 16 16 10 // IDLE1
+10 16 16 10 // IDLE2
+10 16 0 10 // IDLE3-NOPOWER
+0 0 0 0 // ATTACK1
+0 0 0 0 // ATTACK2
+0 10 0 10 // SPAWN1
+0 10 0 10 // SPAWN2
+0 0 0 0 // PAIN1
+0 0 0 0 // PAIN2
+10 21 0 10 // DESTROY
+10 21 0 10 // DESTROY2
+31 1 0 1 // DEAD
diff --git a/assets/models/buildables/refinery/refinery.jpg b/assets/models/buildables/refinery/refinery.jpg
new file mode 100644
index 0000000..99ac3c9
--- /dev/null
+++ b/assets/models/buildables/refinery/refinery.jpg
Binary files differ
diff --git a/assets/models/buildables/refinery/refinery.md3 b/assets/models/buildables/refinery/refinery.md3
new file mode 100644
index 0000000..2c9a19a
--- /dev/null
+++ b/assets/models/buildables/refinery/refinery.md3
Binary files differ
diff --git a/assets/models/buildables/rtg/animation.cfg b/assets/models/buildables/rtg/animation.cfg
new file mode 100644
index 0000000..b7b3ba5
--- /dev/null
+++ b/assets/models/buildables/rtg/animation.cfg
@@ -0,0 +1,14 @@
+0 0 0 0 // CONSTRUCT1
+0 0 0 0 // CONSTRUCT1
+0 0 0 0 // IDLE1
+0 0 0 0 // IDLE2
+0 0 0 0 // IDLE3
+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
+0 0 0 0 // DEATH
+0 0 0 0 // DEATH
+0 0 0 0 // DEATH
diff --git a/assets/models/buildables/rtg/rtg.jpg b/assets/models/buildables/rtg/rtg.jpg
new file mode 100644
index 0000000..075d61d
--- /dev/null
+++ b/assets/models/buildables/rtg/rtg.jpg
Binary files differ
diff --git a/assets/models/buildables/rtg/rtg.md3 b/assets/models/buildables/rtg/rtg.md3
new file mode 100644
index 0000000..40d1878
--- /dev/null
+++ b/assets/models/buildables/rtg/rtg.md3
Binary files differ
diff --git a/assets/models/cuboid/concrete/concrete.jpg b/assets/models/cuboid/concrete/concrete.jpg
index 2d1fac2..647f4f8 100644
--- a/assets/models/cuboid/concrete/concrete.jpg
+++ b/assets/models/cuboid/concrete/concrete.jpg
Binary files differ
diff --git a/assets/models/cuboid/cracks.tga b/assets/models/cuboid/cracks.tga
new file mode 100644
index 0000000..da5654c
--- /dev/null
+++ b/assets/models/cuboid/cracks.tga
Binary files differ
diff --git a/assets/models/cuboid/cracks_0.jpg b/assets/models/cuboid/cracks_0.jpg
deleted file mode 100644
index 86b8e7b..0000000
--- a/assets/models/cuboid/cracks_0.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/models/cuboid/cracks_1.jpg b/assets/models/cuboid/cracks_1.jpg
deleted file mode 100644
index 11d6cc9..0000000
--- a/assets/models/cuboid/cracks_1.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/models/cuboid/cracks_2.jpg b/assets/models/cuboid/cracks_2.jpg
deleted file mode 100644
index 5f4665e..0000000
--- a/assets/models/cuboid/cracks_2.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/models/cuboid/glass/glass.jpg b/assets/models/cuboid/glass/glass.jpg
index 75275e7..0d59554 100644
--- a/assets/models/cuboid/glass/glass.jpg
+++ b/assets/models/cuboid/glass/glass.jpg
Binary files differ
diff --git a/assets/models/cuboid/ladder/test.tga b/assets/models/cuboid/ladder/test.tga
new file mode 100644
index 0000000..78173ee
--- /dev/null
+++ b/assets/models/cuboid/ladder/test.tga
Binary files differ
diff --git a/assets/models/cuboid/organic/fragment.tga b/assets/models/cuboid/organic/fragment.tga
index 28f12c0..45694fa 100644
--- a/assets/models/cuboid/organic/fragment.tga
+++ b/assets/models/cuboid/organic/fragment.tga
Binary files differ
diff --git a/assets/models/cuboid/organic/organic.jpg b/assets/models/cuboid/organic/organic.jpg
index 3aad4c0..3da1b63 100644
--- a/assets/models/cuboid/organic/organic.jpg
+++ b/assets/models/cuboid/organic/organic.jpg
Binary files differ
diff --git a/assets/models/cuboid/organic/organic_fx.jpg b/assets/models/cuboid/organic/organic_fx.jpg
index b2ca34e..55798a8 100644
--- a/assets/models/cuboid/organic/organic_fx.jpg
+++ b/assets/models/cuboid/organic/organic_fx.jpg
Binary files differ
diff --git a/assets/models/cuboid/slime/fragment.tga b/assets/models/cuboid/slime/fragment.tga
index f16641c..0ce4ea9 100644
--- a/assets/models/cuboid/slime/fragment.tga
+++ b/assets/models/cuboid/slime/fragment.tga
Binary files differ
diff --git a/assets/models/cuboid/slime/slime.jpg b/assets/models/cuboid/slime/slime.jpg
index 090fcaa..78c9a9b 100644
--- a/assets/models/cuboid/slime/slime.jpg
+++ b/assets/models/cuboid/slime/slime.jpg
Binary files differ
diff --git a/assets/models/players/builder/animation.cfg b/assets/models/players/builder/animation.cfg
new file mode 100644
index 0000000..52e3dad
--- /dev/null
+++ b/assets/models/players/builder/animation.cfg
@@ -0,0 +1,47 @@
+// animation config file
+// Tremulous: builder alien
+
+sex n
+
+// first frame, num frames, looping frames, frames per second
+
+footsteps flesh
+
+nonsegmented
+
+0 41 41 30 //NSPA_STAND
+
+0 1 0 15 //NSPA_GESTURE
+
+41 40 40 90 //NSPA_WALK
+41 40 40 120 //NSPA_RUN
+41 40 40 120 //NSPA_RUNBACK
+41 40 40 90 //NSPA_CHARGE
+
+41 40 40 120 //NSPA_RUNLEFT
+41 40 40 90 //NSPA_WALKLEFT
+41 40 40 120 //NSPA_RUNRIGHT
+41 40 40 90 //NSPA_WALKRIGHT
+
+41 40 40 17 //NSPA_SWIM
+
+81 10 0 30 //NSPA_JUMP
+91 10 0 30 //NSPA_LAND
+81 10 0 30 //NSPA_JUMPBACK
+91 10 0 30 //NSPA_LANDBACK
+
+41 40 40 30 //NSPA_TURN
+
+101 19 0 60 //NSPA_ATTACK1
+101 19 0 60 //NSPA_ATTACK2
+101 19 0 60 //NSPA_ATTACK3
+
+120 5 0 10 //NSPA_PAIN1
+125 5 0 10 //NSPA_PAIN2
+
+130 31 0 15 //NSPA_DEATH1
+160 1 0 15 //NSPA_DEAD1
+130 31 0 15 //NSPA_DEATH2
+160 1 0 15 //NSPA_DEAD2
+130 31 0 15 //NSPA_DEATH3
+160 1 0 15 //NSPA_DEAD3
diff --git a/assets/models/players/level0/animation.cfg b/assets/models/players/level0/animation.cfg
new file mode 100644
index 0000000..a9ba60f
--- /dev/null
+++ b/assets/models/players/level0/animation.cfg
@@ -0,0 +1,47 @@
+// animation config file
+// Tremulous: level0 alien
+
+sex n
+
+// first frame, num frames, looping frames, frames per second
+
+footsteps none
+
+nonsegmented
+
+0 31 30 30 //NSPA_STAND
+
+31 46 0 30 //NSPA_GESTURE
+
+78 13 13 30 //NSPA_WALK
+78 13 13 60 //NSPA_RUN
+78 -13 13 60 //NSPA_RUNBACK
+78 13 13 30 //NSPA_CHARGE
+
+78 13 13 60 //NSPA_RUNLEFT
+78 13 13 30 //NSPA_WALKLEFT
+78 13 13 60 //NSPA_RUNRIGHT
+78 13 13 30 //NSPA_WALKRIGHT
+
+78 13 13 30 //NSPA_SWIM
+
+92 8 0 45 //NSPA_JUMP
+92 -8 0 45 //NSPA_LAND
+92 8 0 45 //NSPA_JUMPBACK
+92 -8 0 45 //NSPA_LANDBACK
+
+78 13 13 30 //NSPA_TURN
+
+101 15 0 30 //NSPA_ATTACK1
+101 15 0 30 //NSPA_ATTACK2
+101 15 0 30 //NSPA_ATTACK3
+
+117 8 0 30 //NSPA_PAIN1
+117 8 0 30 //NSPA_PAIN2
+
+126 18 0 20 //NSPA_DEATH1
+143 1 0 15 //NSPA_DEAD1
+126 18 0 20 //NSPA_DEATH2
+143 1 0 15 //NSPA_DEAD2
+126 18 0 20 //NSPA_DEATH3
+143 1 0 15 //NSPA_DEAD3
diff --git a/assets/models/players/level1/animation.cfg b/assets/models/players/level1/animation.cfg
new file mode 100644
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/players/level2/animation.cfg b/assets/models/players/level2/animation.cfg
new file mode 100644
index 0000000..ffcb3bf
--- /dev/null
+++ b/assets/models/players/level2/animation.cfg
@@ -0,0 +1,48 @@
+// animation config file
+// Tremulous: level2 alien
+
+sex n
+
+// first frame, num frames, looping frames, frames per second
+
+footsteps flesh
+
+nonsegmented
+
+0 41 41 30 //NSPA_STAND
+
+41 76 0 30 //NSPA_GESTURE
+
+117 31 31 30 //NSPA_WALK
+117 31 31 45 //NSPA_RUN
+117 31 31 45 //NSPA_RUNBACK
+
+0 0 0 30 //NSPA_CHARGE
+
+117 31 31 45 //NSPA_RUNLEFT
+117 31 31 30 //NSPA_WALKLEFT
+117 31 31 45 //NSPA_RUNRIGHT
+117 31 31 30 //NSPA_WALKRIGHT
+
+117 31 31 45 //NSPA_SWIM
+
+148 18 0 30 //NSPA_JUMP
+165 21 0 30 //NSPA_LAND
+148 18 0 30 //NSPA_JUMPBACK
+165 21 0 30 //NSPA_LANDBACK
+
+117 31 31 30 //NSPA_TURN
+
+188 28 0 30 //NSPA_ATTACK1
+188 28 0 30 //NSPA_ATTACK2
+188 28 0 30 //NSPA_ATTACK3
+
+213 17 0 30 //NSPA_PAIN1
+229 15 0 30 //NSPA_PAIN2
+
+245 43 0 30 //NSPA_DEATH1
+287 1 0 10 //NSPA_DEAD1
+245 43 0 30 //NSPA_DEATH2
+287 1 0 10 //NSPA_DEAD2
+245 43 0 30 //NSPA_DEATH3
+287 1 0 10 //NSPA_DEAD3
diff --git a/assets/models/players/level3/animation.cfg b/assets/models/players/level3/animation.cfg
new file mode 100644
index 0000000..a1eabda
--- /dev/null
+++ b/assets/models/players/level3/animation.cfg
@@ -0,0 +1,48 @@
+// animation config file
+// Tremulous: level3 alien
+
+sex n
+
+// first frame, num frames, looping frames, frames per second
+
+footsteps flesh
+
+nonsegmented
+
+0 31 31 30 //NSPA_STAND
+
+31 126 0 30 //NSPA_GESTURE
+
+293 31 31 40 //NSPA_WALK
+293 31 31 60 //NSPA_RUN
+293 31 31 60 //NSPA_RUNBACK
+
+0 0 0 30 //NSPA_CHARGE
+
+293 31 31 60 //NSPA_RUNLEFT
+293 31 31 40 //NSPA_WALKLEFT
+293 31 31 60 //NSPA_RUNRIGHT
+293 31 31 40 //NSPA_WALKRIGHT
+
+293 31 31 45 //NSPA_SWIM
+
+178 16 0 30 //NSPA_JUMP
+194 26 0 30 //NSPA_LAND
+157 11 0 30 //NSPA_JUMPBACK
+167 11 0 30 //NSPA_LANDBACK
+
+117 31 31 30 //NSPA_TURN
+
+219 11 0 40 //NSPA_ATTACK1
+230 11 0 40 //NSPA_ATTACK2
+219 11 0 40 //NSPA_ATTACK3
+
+241 6 0 30 //NSPA_PAIN1
+247 6 0 30 //NSPA_PAIN2
+
+253 40 0 30 //NSPA_DEATH1
+292 1 0 10 //NSPA_DEAD1
+253 40 0 30 //NSPA_DEATH2
+292 1 0 10 //NSPA_DEAD2
+253 40 0 30 //NSPA_DEATH3
+292 1 0 10 //NSPA_DEAD3
diff --git a/assets/models/players/level4/animation.cfg b/assets/models/players/level4/animation.cfg
new file mode 100644
index 0000000..52283d4
--- /dev/null
+++ b/assets/models/players/level4/animation.cfg
@@ -0,0 +1,48 @@
+// animation config file
+// Tremulous: level4 alien
+
+sex n
+
+// first frame, num frames, looping frames, frames per second
+
+footsteps flesh
+
+nonsegmented
+
+41 20 20 30 //NSPA_STAND
+
+61 80 0 30 //NSPA_GESTURE
+
+0 40 40 40 //NSPA_WALK
+0 40 40 80 //NSPA_RUN
+0 -40 40 80 //NSPA_RUNBACK
+
+171 45 31 120 //NSPA_CHARGE
+
+0 40 40 80 //NSPA_RUNLEFT
+0 40 40 40 //NSPA_WALKLEFT
+0 40 40 80 //NSPA_RUNRIGHT
+0 40 40 40 //NSPA_WALKRIGHT
+
+0 40 40 30 //NSPA_SWIM
+
+62 9 0 30 //NSPA_JUMP
+62 -9 0 30 //NSPA_LAND
+62 9 0 30 //NSPA_JUMPBACK
+62 -9 0 30 //NSPA_LANDBACK
+
+0 40 40 30 //NSPA_TURN
+
+140 15 0 30 //NSPA_ATTACK1
+155 15 0 30 //NSPA_ATTACK2
+140 15 0 30 //NSPA_ATTACK3
+
+221 10 0 30 //NSPA_PAIN1
+231 10 0 30 //NSPA_PAIN2
+
+240 26 0 30 //NSPA_DEATH1
+265 1 0 30 //NSPA_DEAD1
+240 26 0 30 //NSPA_DEATH2
+265 1 0 30 //NSPA_DEAD2
+240 26 0 30 //NSPA_DEATH3
+265 1 0 30 //NSPA_DEAD3
diff --git a/assets/models/weapons/abuild/weapon.cfg b/assets/models/weapons/abuild/weapon.cfg
new file mode 100644
index 0000000..d808e39
--- /dev/null
+++ b/assets/models/weapons/abuild/weapon.cfg
@@ -0,0 +1,11 @@
+disableIn3rdPerson
+crosshair 36 alien
+
+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
index 17d346b..dd9ec3d 100644
--- a/assets/models/weapons/abuildupg/weapon.cfg
+++ b/assets/models/weapons/abuildupg/weapon.cfg
@@ -1,5 +1,5 @@
disableIn3rdPerson
-crosshair 15 gfx/2d/crosshair-alien_s
+crosshair 36 alien
icon icons/icona_builder
diff --git a/assets/models/weapons/blaster/weapon.cfg b/assets/models/weapons/blaster/weapon.cfg
index 76a2f79..f6eeadc 100644
--- a/assets/models/weapons/blaster/weapon.cfg
+++ b/assets/models/weapons/blaster/weapon.cfg
@@ -1,7 +1,7 @@
weaponModel models/weapons/blaster/blaster.md3
icon icons/iconw_blaster
-crosshair 24 gfx/2d/crosshair-prifle_s
+crosshair 36 dot
primary
{
diff --git a/assets/models/weapons/chaingun/weapon.cfg b/assets/models/weapons/chaingun/weapon.cfg
new file mode 100644
index 0000000..d744973
--- /dev/null
+++ b/assets/models/weapons/chaingun/weapon.cfg
@@ -0,0 +1,20 @@
+weaponModel models/weapons/chaingun/chaingun.md3
+
+icon icons/iconw_chaingun
+crosshair 36 circle
+
+primary
+{
+ flashDlightColor 1.0 1.0 0.0
+ flashSound 0 models/weapons/chaingun/flash0.wav
+ flashSound 1 models/weapons/chaingun/flash1.wav
+ flashSound 2 models/weapons/chaingun/flash2.wav
+ flashSound 3 models/weapons/chaingun/flash3.wav
+
+ impactMark 8 gfx/marks/bullet_mrk
+
+ impactSound 0 models/weapons/chaingun/impact0.wav
+
+ impactParticleSystem models/weapons/rifle/impactPS
+ muzzleParticleSystem models/weapons/chaingun/muzzlePS
+}
diff --git a/assets/models/weapons/ckit/ckit_background.md3 b/assets/models/weapons/ckit/ckit_background.md3
new file mode 100644
index 0000000..6011cf7
--- /dev/null
+++ b/assets/models/weapons/ckit/ckit_background.md3
Binary files differ
diff --git a/assets/models/weapons/ckit/ckit_bigicona.md3 b/assets/models/weapons/ckit/ckit_bigicona.md3
new file mode 100644
index 0000000..23b0dbd
--- /dev/null
+++ b/assets/models/weapons/ckit/ckit_bigicona.md3
Binary files differ
diff --git a/assets/models/weapons/ckit/ckit_bigiconb.md3 b/assets/models/weapons/ckit/ckit_bigiconb.md3
new file mode 100644
index 0000000..41272ff
--- /dev/null
+++ b/assets/models/weapons/ckit/ckit_bigiconb.md3
Binary files differ
diff --git a/assets/models/weapons/ckit/ckit_digit.md3 b/assets/models/weapons/ckit/ckit_digit.md3
new file mode 100644
index 0000000..6d580e5
--- /dev/null
+++ b/assets/models/weapons/ckit/ckit_digit.md3
Binary files differ
diff --git a/assets/models/weapons/ckit/ckit_icon.md3 b/assets/models/weapons/ckit/ckit_icon.md3
new file mode 100644
index 0000000..5c3479b
--- /dev/null
+++ b/assets/models/weapons/ckit/ckit_icon.md3
Binary files differ
diff --git a/assets/models/weapons/ckit/ckit_overlay.md3 b/assets/models/weapons/ckit/ckit_overlay.md3
new file mode 100644
index 0000000..3cfc388
--- /dev/null
+++ b/assets/models/weapons/ckit/ckit_overlay.md3
Binary files differ
diff --git a/assets/models/weapons/ckit/weapon.cfg b/assets/models/weapons/ckit/weapon.cfg
new file mode 100644
index 0000000..fd8a5fd
--- /dev/null
+++ b/assets/models/weapons/ckit/weapon.cfg
@@ -0,0 +1,4 @@
+weaponModel models/weapons/ckit/ckit.md3
+
+icon icons/iconw_construct
+crosshair 36 dot \ No newline at end of file
diff --git a/assets/models/weapons/flamer/weapon.cfg b/assets/models/weapons/flamer/weapon.cfg
index 8b2704c..f9654e7 100644
--- a/assets/models/weapons/flamer/weapon.cfg
+++ b/assets/models/weapons/flamer/weapon.cfg
@@ -1,6 +1,6 @@
weaponModel models/weapons/flamer/flamer.md3
icon icons/iconw_flamer
-crosshair 64 gfx/2d/crosshair-flamer_s
+crosshair 36 circle
primary
{
diff --git a/assets/models/weapons/lcannon/weapon.cfg b/assets/models/weapons/lcannon/weapon.cfg
new file mode 100644
index 0000000..23cf51e
--- /dev/null
+++ b/assets/models/weapons/lcannon/weapon.cfg
@@ -0,0 +1,36 @@
+weaponModel models/weapons/lcannon/lcannon.md3
+icon icons/iconw_lucifer
+crosshair 36 circle
+
+idleSound models/weapons/lcannon/idle.wav
+
+primary
+{
+ missileSprite 56 gfx/lcannon/primary
+ 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
+
+ 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 100644
index 0000000..aaec29a
--- /dev/null
+++ b/assets/models/weapons/level0/weapon.cfg
@@ -0,0 +1,9 @@
+disableIn3rdPerson
+crosshair 36 alien
+
+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 100644
index 0000000..9344335
--- /dev/null
+++ b/assets/models/weapons/level1/weapon.cfg
@@ -0,0 +1,11 @@
+disableIn3rdPerson
+crosshair 36 alien
+
+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 100644
index 0000000..d757854
--- /dev/null
+++ b/assets/models/weapons/level1upg/weapon.cfg
@@ -0,0 +1,17 @@
+disableIn3rdPerson
+crosshair 36 alien
+
+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 100644
index 0000000..3d0b1e5
--- /dev/null
+++ b/assets/models/weapons/level2/weapon.cfg
@@ -0,0 +1,11 @@
+disableIn3rdPerson
+crosshair 36 alien
+
+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 100644
index 0000000..f4d4437
--- /dev/null
+++ b/assets/models/weapons/level2upg/weapon.cfg
@@ -0,0 +1,18 @@
+disableIn3rdPerson
+
+icon icons/icona_lev2
+crosshair 36 alien
+
+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 100644
index 0000000..6782464
--- /dev/null
+++ b/assets/models/weapons/level3/weapon.cfg
@@ -0,0 +1,16 @@
+disableIn3rdPerson
+crosshair 36 alien
+
+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 100644
index 0000000..369f41d
--- /dev/null
+++ b/assets/models/weapons/level3upg/weapon.cfg
@@ -0,0 +1,28 @@
+disableIn3rdPerson
+
+icon icons/icona_lev3
+crosshair 36 alien
+
+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
index 1a44de0..339b3c7 100644
--- a/assets/models/weapons/level4/weapon.cfg
+++ b/assets/models/weapons/level4/weapon.cfg
@@ -1,5 +1,5 @@
disableIn3rdPerson
-crosshair 15 gfx/2d/crosshair-alien_s
+crosshair 36 alien
icon icons/icona_lev4
diff --git a/assets/models/weapons/lgun/weapon.cfg b/assets/models/weapons/lgun/weapon.cfg
new file mode 100644
index 0000000..9a440f7
--- /dev/null
+++ b/assets/models/weapons/lgun/weapon.cfg
@@ -0,0 +1,13 @@
+weaponModel models/weapons/lgun/lgun.md3
+icon icons/iconw_lasgun
+crosshair 36 dot
+
+primary
+{
+ flashDlightColor 1.0 0.0 0.0
+ flashSound 0 models/weapons/lgun/flash0.wav
+
+ impactMark 8 gfx/marks/bullet_mrk
+
+ impactParticleSystem models/weapons/lasgun/impactPS
+}
diff --git a/assets/models/weapons/mdriver/weapon.cfg b/assets/models/weapons/mdriver/weapon.cfg
new file mode 100644
index 0000000..932a40b
--- /dev/null
+++ b/assets/models/weapons/mdriver/weapon.cfg
@@ -0,0 +1,12 @@
+weaponModel models/weapons/mdriver/mdriver.md3
+icon icons/iconw_driver
+crosshair 36 dot
+
+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 100644
index 0000000..78b13be
--- /dev/null
+++ b/assets/models/weapons/prifle/weapon.cfg
@@ -0,0 +1,17 @@
+weaponModel models/weapons/prifle/prifle.md3
+icon icons/iconw_pulse
+crosshair 36 circleddot
+
+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 100644
index 0000000..1701fd4
--- /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 36 dot
+
+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/models/weapons/rifle/weapon.cfg b/assets/models/weapons/rifle/weapon.cfg
new file mode 100644
index 0000000..f61578e
--- /dev/null
+++ b/assets/models/weapons/rifle/weapon.cfg
@@ -0,0 +1,20 @@
+weaponModel models/weapons/rifle/rifle.md3
+
+icon icons/iconw_rifle
+crosshair 36 circleddot
+
+primary
+{
+ flashDlightColor 1.0 1.0 0.0
+ flashSound 0 models/weapons/rifle/flash0.wav
+
+ impactMark 8 gfx/marks/bullet_mrk
+
+ impactSound 0 models/weapons/rifle/ricochet0.wav
+ impactSound 1 models/weapons/rifle/ricochet1.wav
+ impactSound 2 models/weapons/rifle/ricochet2.wav
+ impactSound 3 models/weapons/rifle/ricochet3.wav
+
+ impactParticleSystem models/weapons/rifle/impactPS
+ muzzleParticleSystem models/weapons/rifle/muzzlePS
+}
diff --git a/assets/models/weapons/shotgun/weapon.cfg b/assets/models/weapons/shotgun/weapon.cfg
new file mode 100644
index 0000000..ec759a8
--- /dev/null
+++ b/assets/models/weapons/shotgun/weapon.cfg
@@ -0,0 +1,14 @@
+weaponModel models/weapons/shotgun/shotgun.md3
+icon icons/iconw_sgun
+crosshair 36 circle
+
+primary
+{
+ flashDlightColor 1.0 1.0 0.0
+ flashSound 0 models/weapons/shotgun/flash0.wav
+
+ impactMark 4 gfx/marks/bullet_mrk
+
+ impactParticleSystem models/weapons/rifle/impactPS
+ muzzleParticleSystem models/weapons/shotgun/muzzlePS
+}
diff --git a/assets/scripts/conkit.shader b/assets/scripts/conkit.shader
new file mode 100644
index 0000000..6bcf33f
--- /dev/null
+++ b/assets/scripts/conkit.shader
@@ -0,0 +1,300 @@
+models/weapons/ckit/screen
+{
+ {
+ videoMap video/ckit.roq
+ }
+}
+
+gfx/ckit/background
+{
+ sort 16
+ {
+ map gfx/ckit/background.jpg
+ blendFunc add
+ rgbGen wave sin 0.15 0.02 0 129
+ }
+}
+
+gfx/ckit/overlay
+{
+ sort 16
+ {
+ map gfx/ckit/noise.jpg
+ blendFunc filter
+ tcMod scroll 123.456 789.012
+ }
+}
+
+// need to manually define all these shaders
+// otherwise the shading and the sorting are screwed up
+
+gfx/2d/digital/0
+{
+ nopicmip
+ nomipmaps
+ {
+ map gfx/2d/digital/0.tga
+ blendFunc blend
+ }
+}
+
+gfx/2d/digital/1
+{
+ nopicmip
+ nomipmaps
+ {
+ map gfx/2d/digital/1.tga
+ blendFunc blend
+ }
+}
+
+gfx/2d/digital/2
+{
+ nopicmip
+ nomipmaps
+ {
+ map gfx/2d/digital/2.tga
+ blendFunc blend
+ }
+}
+
+gfx/2d/digital/3
+{
+ nopicmip
+ nomipmaps
+ {
+ map gfx/2d/digital/3.tga
+ blendFunc blend
+ }
+}
+
+gfx/2d/digital/4
+{
+ nopicmip
+ nomipmaps
+ {
+ map gfx/2d/digital/4.tga
+ blendFunc blend
+ }
+}
+
+gfx/2d/digital/5
+{
+ nopicmip
+ nomipmaps
+ {
+ map gfx/2d/digital/5.tga
+ blendFunc blend
+ }
+}
+
+gfx/2d/digital/6
+{
+ nopicmip
+ nomipmaps
+ {
+ map gfx/2d/digital/6.tga
+ blendFunc blend
+ }
+}
+
+gfx/2d/digital/7
+{
+ nopicmip
+ nomipmaps
+ {
+ map gfx/2d/digital/7.tga
+ blendFunc blend
+ }
+}
+
+gfx/2d/digital/8
+{
+ nopicmip
+ nomipmaps
+ {
+ map gfx/2d/digital/8.tga
+ blendFunc blend
+ }
+}
+
+gfx/2d/digital/9
+{
+ nopicmip
+ nomipmaps
+ {
+ map gfx/2d/digital/9.tga
+ blendFunc blend
+ }
+}
+
+gfx/2d/digital/comma
+{
+ nopicmip
+ nomipmaps
+ {
+ map gfx/2d/digital/comma.tga
+ blendFunc blend
+ }
+}
+
+gfx/2d/digital/minus
+{
+ nopicmip
+ nomipmaps
+ {
+ map gfx/2d/digital/minus.tga
+ blendFunc blend
+ }
+}
+
+gfx/ckit/icon_bp
+{
+ nopicmip
+ nomipmaps
+ {
+ map gfx/ckit/icon_bp.tga
+ blendFunc blend
+ }
+}
+
+gfx/ckit/icon_current
+{
+ nopicmip
+ nomipmaps
+ {
+ map gfx/ckit/icon_current.tga
+ blendFunc blend
+ }
+}
+
+gfx/ckit/icon_depth
+{
+ nopicmip
+ nomipmaps
+ {
+ map gfx/ckit/icon_depth.tga
+ blendFunc blend
+ }
+}
+
+gfx/ckit/icon_health
+{
+ nopicmip
+ nomipmaps
+ {
+ map gfx/ckit/icon_health.tga
+ blendFunc blend
+ }
+}
+
+gfx/ckit/icon_height
+{
+ nopicmip
+ nomipmaps
+ {
+ map gfx/ckit/icon_height.tga
+ blendFunc blend
+ }
+}
+
+gfx/ckit/icon_network
+{
+ nopicmip
+ nomipmaps
+ {
+ map gfx/ckit/icon_network.tga
+ blendFunc blend
+ }
+}
+
+gfx/ckit/icon_nopower
+{
+ nopicmip
+ nomipmaps
+ {
+ map gfx/ckit/icon_nopower.tga
+ blendFunc blend
+ }
+}
+
+gfx/ckit/icon_nosurge
+{
+ nopicmip
+ nomipmaps
+ {
+ map gfx/ckit/icon_nosurge.tga
+ blendFunc blend
+ }
+}
+
+gfx/ckit/icon_off
+{
+ nopicmip
+ nomipmaps
+ {
+ map gfx/ckit/icon_off.tga
+ blendFunc blend
+ }
+}
+
+
+gfx/ckit/icon_power
+{
+ nopicmip
+ nomipmaps
+ {
+ map gfx/ckit/icon_power.tga
+ blendFunc blend
+ }
+}
+
+gfx/ckit/icon_storedbp
+{
+ nopicmip
+ nomipmaps
+ {
+ map gfx/ckit/icon_storedbp.tga
+ blendFunc blend
+ }
+}
+
+gfx/ckit/icon_surge
+{
+ nopicmip
+ nomipmaps
+ {
+ map gfx/ckit/icon_surge.tga
+ blendFunc blend
+ }
+}
+
+gfx/ckit/icon_time
+{
+ nopicmip
+ nomipmaps
+ {
+ map gfx/ckit/icon_time.tga
+ blendFunc blend
+ }
+}
+
+gfx/ckit/icon_voltage
+{
+ nopicmip
+ nomipmaps
+ {
+ map gfx/ckit/icon_voltage.tga
+ blendFunc blend
+ }
+}
+
+gfx/ckit/icon_width
+{
+ nopicmip
+ nomipmaps
+ {
+ map gfx/ckit/icon_width.tga
+ blendFunc blend
+ }
+}
diff --git a/assets/scripts/cuboid.particle b/assets/scripts/cuboid.particle
index c601bdf..343fecc 100644
--- a/assets/scripts/cuboid.particle
+++ b/assets/scripts/cuboid.particle
@@ -64,3 +64,30 @@ alienHatchPS
period 10 - ~0%
}
}
+
+humanPowerZapPS
+{
+ ejector // RC overloading
+ {
+ particle
+ {
+ shader sync lightning01
+
+ displacement 0 0 0 80
+
+ velocityType static
+ accelerationType static
+
+ radius 0 80~30 80~30
+ alpha 0 1 1
+ rotation 0 ~360 -
+ bounce 0
+
+ lifeTime 75
+ }
+
+ count 3
+ delay 0
+ period 10 - 0
+ }
+} \ No newline at end of file
diff --git a/assets/scripts/cuboid.shader b/assets/scripts/cuboid.shader
index fc5a764..66b9c5b 100644
--- a/assets/scripts/cuboid.shader
+++ b/assets/scripts/cuboid.shader
@@ -119,75 +119,69 @@ gfx/cuboid/build_axis
}
}
-/* GENERIC DESTRUCTION ANIMATION SHADERS
- * These shaders are applied on model if the
- * cuboid is damaged.
+/* CRACKS
+ * This is an animated shader, starting at 0s and ending at 1s.
+ * Cgame uses a shaderTime hack to select the proper frame.
*/
-models/cuboid/cracks_0
-{
- {
- map models/cuboid/cracks_0.jpg
- blendFunc filter
- }
-}
-models/cuboid/cracks_1
+models/cuboid/cracks
{
+ sort 3
{
- map models/cuboid/cracks_1.jpg
- blendFunc filter
+ map models/cuboid/cracks.tga
+ alphaFunc GT0
+ alphaGen wave sin 0.5 0.5 0.0 0.2
}
}
-
-models/cuboid/cracks_2
-{
- {
- map models/cuboid/cracks_2.jpg
- blendFunc filter
- }
-}
-
+
/* CUBOID-SPECIFIC TEXTURES
* These shaders are applied to cuboid's model.
*/
models/cuboid/glass/glass
{
+ cull none
+ sort 4
{
map models/cuboid/glass/glass
blendFunc filter
- rgbGen lightingDiffuse
+ rgbGen identity
}
}
+
models/cuboid/concrete/concrete
{
+ sort 3
{
map models/cuboid/concrete/concrete.jpg
- rgbGen lightingDiffuse
+ rgbGen vertex
}
}
models/cuboid/ladder/ladder
{
+ sort 3
{
map models/cuboid/ladder/ladder.jpg
- rgbGen lightingDiffuse
+ rgbGen vertex
}
}
models/cuboid/organic/organic
{
+ sort 3
{
map models/cuboid/organic/organic.jpg
- rgbGen lightingDiffuse
+ rgbGen vertex
}
}
models/cuboid/organic/organic_1
{
+ sort 3
{
map models/cuboid/organic/organic.jpg
- rgbGen lightingDiffuse
+ rgbGen vertex
}
{
map models/cuboid/organic/organic_fx.jpg
@@ -198,9 +192,10 @@ models/cuboid/organic/organic_1
models/cuboid/organic/organic_2
{
+ sort 3
{
map models/cuboid/organic/organic.jpg
- rgbGen lightingDiffuse
+ rgbGen vertex
}
{
map models/cuboid/organic/organic_fx.jpg
@@ -211,9 +206,10 @@ models/cuboid/organic/organic_2
models/cuboid/organic/organic_3
{
+ sort 3
{
map models/cuboid/organic/organic.jpg
- rgbGen lightingDiffuse
+ rgbGen vertex
}
{
map models/cuboid/organic/organic_fx.jpg
@@ -224,11 +220,32 @@ models/cuboid/organic/organic_3
models/cuboid/slime/slime
{
+ sort 3
{
map models/cuboid/slime/slime.jpg
- rgbGen lightingDiffuse
+ rgbGen vertex
tcMod turb 0.75 0.25 0 0.07
- tcGen environment
+ }
+ {
+ map models/cuboid/slime/slime.jpg
+ blendFunc add
+ rgbGen vertex
+ tcMod turb 0.63 0.19 0.5 0.11
+ }
+}
+
+/* CAPACITOR BANK
+ */
+models/buildables/capbank/capbank
+{
+ {
+ map models/buildables/capbank/capbank.jpg
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/buildables/capbank/capbank_lights.jpg
+ blendFunc add
+ rgbGen wave sin 0.9 0.1 0 1.5
}
}
@@ -284,3 +301,24 @@ gfx/2d/basivisionFlare
blendFunc add
}
}
+
+gfx/misc/unpowered_prebuild
+{
+ cull disable
+ {
+ map models/buildables/telenode/rep_cyl.jpg
+ blendfunc add
+ rgbGen wave sin 0.1 0.05 0 123.45
+ tcMod scroll 0.2 0
+ }
+}
+
+lightning01
+{
+ nopicmip
+ {
+ map gfx/lightning/lightning01.jpg
+ blendFunc add
+ }
+}
+
diff --git a/assets/sound/buildables/capbank/sound.cfg b/assets/sound/buildables/capbank/sound.cfg
new file mode 100644
index 0000000..9fe5c80
--- /dev/null
+++ b/assets/sound/buildables/capbank/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
+0 0 //attack1.wav
+0 0 //attack2.wav
+0 0 //spawn1.wav
+0 0 //spawn2.wav
+0 0 //pain1.wav
+0 0 //pain2.wav
+0 0 //destroy1.wav
+0 0 //destroy2.wav
+0 0 //destroyed.wav \ No newline at end of file
diff --git a/assets/sound/buildables/human/powerzap1.wav b/assets/sound/buildables/human/powerzap1.wav
new file mode 100644
index 0000000..4b63dab
--- /dev/null
+++ b/assets/sound/buildables/human/powerzap1.wav
Binary files differ
diff --git a/assets/sound/buildables/human/powerzap2.wav b/assets/sound/buildables/human/powerzap2.wav
new file mode 100644
index 0000000..9e5dfe1
--- /dev/null
+++ b/assets/sound/buildables/human/powerzap2.wav
Binary files differ
diff --git a/assets/sound/buildables/human/powerzap3.wav b/assets/sound/buildables/human/powerzap3.wav
new file mode 100644
index 0000000..c1b28f3
--- /dev/null
+++ b/assets/sound/buildables/human/powerzap3.wav
Binary files differ
diff --git a/assets/sound/buildables/human/powerzap4.wav b/assets/sound/buildables/human/powerzap4.wav
new file mode 100644
index 0000000..9be82bf
--- /dev/null
+++ b/assets/sound/buildables/human/powerzap4.wav
Binary files differ
diff --git a/assets/sound/buildables/human/switch.wav b/assets/sound/buildables/human/switch.wav
new file mode 100644
index 0000000..49db34d
--- /dev/null
+++ b/assets/sound/buildables/human/switch.wav
Binary files differ
diff --git a/assets/sound/buildables/human/unpowered_surge-old1.wav b/assets/sound/buildables/human/unpowered_surge-old1.wav
new file mode 100644
index 0000000..873de09
--- /dev/null
+++ b/assets/sound/buildables/human/unpowered_surge-old1.wav
Binary files differ
diff --git a/assets/sound/buildables/human/unpowered_surge.wav b/assets/sound/buildables/human/unpowered_surge.wav
new file mode 100644
index 0000000..b8b3447
--- /dev/null
+++ b/assets/sound/buildables/human/unpowered_surge.wav
Binary files differ
diff --git a/assets/sound/buildables/refinery/idle1.wav b/assets/sound/buildables/refinery/idle1.wav
new file mode 100644
index 0000000..c002946
--- /dev/null
+++ b/assets/sound/buildables/refinery/idle1.wav
Binary files differ
diff --git a/assets/sound/buildables/refinery/sound.cfg b/assets/sound/buildables/refinery/sound.cfg
new file mode 100644
index 0000000..3c5dee7
--- /dev/null
+++ b/assets/sound/buildables/refinery/sound.cfg
@@ -0,0 +1,14 @@
+0 0 //construct1.wav
+0 0 //construct2.wav
+1 1 //idle1.wav
+0 0 //idle2.wav
+0 0 //idle3.wav
+0 0 //attack1.wav
+0 0 //attack2.wav
+0 0 //spawn1.wav
+0 0 //spawn2.wav
+1 0 //pain1.wav
+0 0 //pain2.wav
+0 0 //destroy1.wav
+0 0 //destroy2.wav
+0 0 //destroyed.wav
diff --git a/assets/sound/buildables/rtg/idle1.wav b/assets/sound/buildables/rtg/idle1.wav
new file mode 100644
index 0000000..e26d3be
--- /dev/null
+++ b/assets/sound/buildables/rtg/idle1.wav
Binary files differ
diff --git a/assets/sound/buildables/rtg/sound.cfg b/assets/sound/buildables/rtg/sound.cfg
new file mode 100644
index 0000000..454b199
--- /dev/null
+++ b/assets/sound/buildables/rtg/sound.cfg
@@ -0,0 +1,14 @@
+1 0 //construct1.wav
+0 0 //construct2.wav
+1 1 //idle1.wav
+0 0 //idle2.wav
+0 0 //idle3.wav
+0 0 //attack1.wav
+0 0 //attack2.wav
+0 0 //spawn1.wav
+0 0 //spawn2.wav
+0 0 //pain1.wav
+0 0 //pain2.wav
+0 0 //destroy1.wav
+0 0 //destroy2.wav
+0 0 //destroyed.wav \ No newline at end of file
diff --git a/assets/sound/feedback/hit.wav b/assets/sound/feedback/hit.wav
new file mode 100644
index 0000000..4effaf4
--- /dev/null
+++ b/assets/sound/feedback/hit.wav
Binary files differ
diff --git a/assets/ui/assets/human/scanner.tga b/assets/ui/assets/human/scanner.tga
new file mode 100644
index 0000000..b0aeccc
--- /dev/null
+++ b/assets/ui/assets/human/scanner.tga
Binary files differ
diff --git a/assets/video/ckit.roq b/assets/video/ckit.roq
new file mode 100644
index 0000000..815e0a7
--- /dev/null
+++ b/assets/video/ckit.roq
Binary files differ
diff --git a/src/cgame/cg_buildable.c b/src/cgame/cg_buildable.c
index 0c851b0..5646f90 100644
--- a/src/cgame/cg_buildable.c
+++ b/src/cgame/cg_buildable.c
@@ -45,6 +45,77 @@ char *cg_buildableSoundNames[ MAX_BUILDABLE_ANIMATIONS ] =
static sfxHandle_t defaultAlienSounds[ MAX_BUILDABLE_ANIMATIONS ];
static sfxHandle_t defaultHumanSounds[ MAX_BUILDABLE_ANIMATIONS ];
+/*
+======================
+CG_RenderCuboid
+
+Render a cuboid with proper lighting and UV maps
+======================
+*/
+static void CG_RenderCuboid_Face( vec3_t a, vec3_t b, vec3_t c, vec3_t d,
+ int da, int db,
+ vec4_t color,
+ float texscale, qhandle_t shader )
+{
+ polyVert_t verts[ 4 ];
+
+ VectorCopy( d, verts[ 0 ].xyz );
+ verts[ 0 ].st[ 0 ] = d[ da ] * texscale;
+ verts[ 0 ].st[ 1 ] = d[ db ] * texscale;
+ Vector4Copy( color, verts[ 0 ].modulate );
+ VectorCopy( c, verts[ 1 ].xyz );
+ verts[ 1 ].st[ 0 ] = c[ da ] * texscale;
+ verts[ 1 ].st[ 1 ] = c[ db ] * texscale;
+ Vector4Copy( color, verts[ 1 ].modulate );
+ VectorCopy( b, verts[ 2 ].xyz );
+ verts[ 2 ].st[ 0 ] = b[ da ] * texscale;
+ verts[ 2 ].st[ 1 ] = b[ db ] * texscale;
+ Vector4Copy( color, verts[ 2 ].modulate );
+ VectorCopy( a, verts[ 3 ].xyz );
+ verts[ 3 ].st[ 0 ] = a[ da ] * texscale;
+ verts[ 3 ].st[ 1 ] = a[ db ] * texscale;
+ Vector4Copy( color, verts[ 3 ].modulate );
+
+ trap_R_AddPolyToScene( shader, 4, verts );
+}
+
+static void CG_RenderCuboid( vec3_t mins, vec3_t maxs, float texscale, qhandle_t shader )
+{
+ int i;
+ vec3_t midpoint, ambient, directed, idc;
+ vec4_t color = { 255.0f, 255.0f, 255.0f, 255.0f };
+ vec3_t ppp, ppn, pnp, pnn, npp, npn, nnp, nnn;
+
+ //lighting
+ VectorAdd( mins, maxs, midpoint );
+ VectorScale( midpoint, 0.5f, midpoint );
+ trap_R_LightForPoint( midpoint, ambient, directed, idc );
+ VectorAdd( ambient, directed, color );
+ for( i = 0; i < 3; i++ )
+ if( color[ i ] > 255.0f )
+ color[ i ] = 255.0f;
+
+ //vertices
+ VectorSet( ppp, maxs[ 0 ], maxs[ 1 ], maxs[ 2 ] );
+ VectorSet( ppn, maxs[ 0 ], maxs[ 1 ], mins[ 2 ] );
+ VectorSet( pnp, maxs[ 0 ], mins[ 1 ], maxs[ 2 ] );
+ VectorSet( pnn, maxs[ 0 ], mins[ 1 ], mins[ 2 ] );
+ VectorSet( npp, mins[ 0 ], maxs[ 1 ], maxs[ 2 ] );
+ VectorSet( npn, mins[ 0 ], maxs[ 1 ], mins[ 2 ] );
+ VectorSet( nnp, mins[ 0 ], mins[ 1 ], maxs[ 2 ] );
+ VectorSet( nnn, mins[ 0 ], mins[ 1 ], mins[ 2 ] );
+
+ //faces
+ //+-x
+ CG_RenderCuboid_Face( ppn, ppp, pnp, pnn, 1, 2, color, texscale, shader );
+ CG_RenderCuboid_Face( nnn, nnp, npp, npn, 1, 2, color, texscale, shader );
+ //+-y
+ CG_RenderCuboid_Face( ppp, ppn, npn, npp, 0, 2, color, texscale, shader );
+ CG_RenderCuboid_Face( nnp, nnn, pnn, pnp, 0, 2, color, texscale, shader );
+ //+-z
+ CG_RenderCuboid_Face( npp, nnp, pnp, ppp, 0, 1, color, texscale, shader );
+ CG_RenderCuboid_Face( ppn, pnn, nnn, npn, 0, 1, color, texscale, shader );
+}
/*
======================
@@ -1283,7 +1354,6 @@ static void CG_BuildableStatusDisplay( centity_t *cent, qboolean cuboid, vec3_t
int health;
float x, y;
vec4_t color;
- qboolean powered, marked;
trace_t tr;
float d;
buildStat_t *bs;
@@ -1378,8 +1448,8 @@ static void CG_BuildableStatusDisplay( centity_t *cent, qboolean cuboid, vec3_t
}
}
- if(cuboid)
- visible=qtrue;
+ if( cuboid )
+ visible = qtrue;
// hack to make the kit obscure view
if( cg_drawGun.integer && visible &&
@@ -1429,13 +1499,13 @@ static void CG_BuildableStatusDisplay( centity_t *cent, qboolean cuboid, vec3_t
else if( healthScale > 1.0f )
healthScale = 1.0f;
- if(cuboid)
+ if( cuboid )
{
- x=320;
- y=240;
- d=Distance(cg.refdef.vieworg,trac);
- if(d<64.0f)
- d=64.0f;
+ x = 320;
+ y = 240;
+ d = Distance( cg.refdef.vieworg, trac );
+ if( d < 64.0f )
+ d = 64.0f ;
}
else
if( !CG_WorldToScreen( origin, &x, &y ) )
@@ -1454,9 +1524,6 @@ static void CG_BuildableStatusDisplay( centity_t *cent, qboolean cuboid, vec3_t
// this is fudged to get the width/height in the cfg to be more realistic
scale = ( picH / d ) * 3;
- powered = es->eFlags & EF_B_POWERED;
- marked = es->eFlags & EF_B_MARKED;
-
picH *= scale;
picW *= scale;
picX -= ( picW * 0.5f );
@@ -1527,20 +1594,21 @@ static void CG_BuildableStatusDisplay( centity_t *cent, qboolean cuboid, vec3_t
}
trap_R_SetColor( color );
- if( !powered )
+
{
float pX;
-
+
pX = picX + ( subH * bs->horizontalMargin );
- CG_DrawPic( pX, subY, subH, subH, bs->noPowerShader );
- }
-
- if( marked )
- {
- float mX;
-
- mX = picX + picW - ( subH * bs->horizontalMargin ) - subH;
- CG_DrawPic( mX, subY, subH, subH, bs->markedShader );
+
+ if( BG_Buildable( es->modelindex, NULL )->team == TEAM_HUMANS )
+ {
+ float offs = 2000.0f / d;
+ CG_DrawPic( pX - offs, subY - offs,
+ subH + 2.0f * offs, subH + 2.0f * offs,
+ CG_BuildablePowerStatusIcon( es ) );
+ }
+ else if( !( es->eFlags & EF_B_POWERED ) )
+ CG_DrawPic( pX, subY, subH, subH, bs->noPowerShader );
}
//NOTE: dont use CG_DrawField, too few digits
@@ -1555,19 +1623,22 @@ static void CG_BuildableStatusDisplay( centity_t *cent, qboolean cuboid, vec3_t
if( health > 0 && healthPoints < 1 )
healthPoints = 1;
- Com_sprintf(buf,sizeof(buf),"%i",healthPoints);
- bufl=strlen(buf);
- cW=subH*cgDC.aspectScale;
- cH=subH;
- nX=picX+picW*0.5f-cW*bufl*0.5f;
+ Com_sprintf( buf, sizeof( buf ), "%i", healthPoints );
+ bufl = strlen(buf);
+ cW = subH*cgDC.aspectScale;
+ cH = subH;
+ nX = picX + picW * 0.5f - cW * bufl * 0.5f;
- for(i=0;i<bufl;i++)
+ for( i = 0; i < bufl; i++ )
{
- if(buf[i]=='-')
- frame=STAT_MINUS;
- else
- frame=buf[i]-'0';
- CG_DrawPic(nX+i*cW,y+bs->verticalMargin-subH*0.5f,cW,cH,cgs.media.numberShaders[frame]);
+ if( buf[ i ] == '-' )
+ frame = STAT_MINUS;
+ else
+ frame = buf[ i ] - '0';
+ CG_DrawPic( nX + i * cW,
+ y + bs->verticalMargin - subH * 0.5f,
+ cW, cH,
+ cgs.media.numberShaders[ frame ] );
}
}
@@ -1620,28 +1691,6 @@ static qboolean CG_PlayerIsBuilder( buildable_t buildable )
/*
==================
-CG_BuildableRemovalPending
-==================
-*/
-static qboolean CG_BuildableRemovalPending( int entityNum )
-{
- int i;
- playerState_t *ps = &cg.snap->ps;
-
- if( !( ps->stats[ STAT_BUILDABLE ] & SB_VALID_TOGGLEBIT ) )
- return qfalse;
-
- for( i = 0; i < MAX_MISC; i++ )
- {
- if( ps->misc[ i ] == entityNum )
- return qtrue;
- }
-
- return qfalse;
-}
-
-/*
-==================
CG_DrawBuildableStatus
==================
*/
@@ -1656,7 +1705,7 @@ void CG_DrawBuildableStatus( void )
trace_t tr;
qboolean cuboid;
- if((cg.predictedPlayerState.stats[STAT_BUILDABLE]&~SB_VALID_TOGGLEBIT)>BA_NONE)
+ if( ( cg.predictedPlayerState.stats[STAT_BUILDABLE] & ~SB_VALID_TOGGLEBIT) > BA_NONE )
return; //hide buildstats if we're placing a buildable
for( i = 0; i < cg.snap->numEntities; i++ )
@@ -1674,8 +1723,8 @@ void CG_DrawBuildableStatus( void )
qsort( buildableList, buildables, sizeof( int ), CG_SortDistance );
for( i = 0; i < buildables; i++ )
{
- cuboid = BG_Buildable(cg_entities[buildableList[i]].currentState.modelindex,NULL)->cuboid;
- if(cuboid && tr.entityNum!=buildableList[i] )
+ cuboid = BG_IsCuboid( cg_entities[ buildableList[ i ] ].currentState.modelindex );
+ if(cuboid && tr.entityNum != buildableList[ i ] )
continue;
CG_BuildableStatusDisplay( &cg_entities[ buildableList[ i ] ], cuboid, tr.endpos );
}
@@ -1713,11 +1762,11 @@ void CG_Buildable( centity_t *cent )
return;
}
- // cuboids use a bit different rendering code !@#CUBOID
+ // cuboids use a bit different rendering code
if( BG_IsCuboid( es->modelindex ) )
{
- qhandle_t texture=0,cracks=0;
- vec3_t dims;
+ qhandle_t texture = 0,cracks = 0;
+ vec3_t dims, mins, maxs;
const cuboidAttributes_t *cuboidAttr;
const cuboidInfo_t *cuboidInfo;
int i, health, sound;
@@ -1733,12 +1782,30 @@ void CG_Buildable( centity_t *cent )
else if ( healthPct < 0.0f )
healthPct = 0.0f;
- if( cuboidInfo->useCracks )
+ if( ( es->eFlags & EF_B_SPAWNED ) && cuboidInfo->useCracks && healthPct < 0.95f )
{
+ float progress;
+ const float o = 1.02f; //md3 rendering is not exact, so render it bigger to compensate
+
if( cuboidInfo->textureCount )
texture = cuboidInfo->textures[ 0 ];
- if( healthPct < 0.75f )
- cracks = cgs.media.cuboidCracks[ (int)( CUBOID_CRACK_TEXTURES - 1 - floor( CUBOID_CRACK_TEXTURES * healthPct ) ) - 1 ];
+
+ memset( &ent, 0, sizeof( ent ) );
+ ent.reType = RT_MODEL;
+ VectorCopy( cent->lerpOrigin, ent.origin );
+
+ ent.axis[0][0]=-dims[0]/2.0f*o;ent.axis[0][1]=0.0f; ent.axis[0][2]=0.0f;
+ ent.axis[1][0]=0.0f; ent.axis[1][1]=-dims[1]/2.0f*o;ent.axis[1][2]=0.0f;
+ ent.axis[2][0]=0.0f; ent.axis[2][1]=0.0f; ent.axis[2][2]=dims[2]/2.0f*o;
+ ent.nonNormalizedAxes = qtrue;
+
+ progress = healthPct;
+
+ ent.customShader = cgs.media.cuboidCracks;
+ ent.shaderTime = 0.001f * cg.time + progress;
+
+ ent.hModel = cgs.media.cuboidModel;
+ trap_R_AddRefEntityToScene( &ent );
}
else
for( i = 0; i < cuboidInfo->textureCount; i++ )
@@ -1750,13 +1817,22 @@ void CG_Buildable( centity_t *cent )
if( !( es->eFlags & EF_B_SPAWNED ) )
{
- sfxHandle_t prebuildSound=cgs.media.humanBuildablePrebuild;
+ sfxHandle_t prebuildSound;
+
if( team == TEAM_HUMANS )
{
- texture = cgs.media.humanSpawningShader;
- prebuildSound = cgs.media.humanBuildablePrebuild;
+ if( es->eFlags & EF_B_POWERED )
+ {
+ texture = cgs.media.humanSpawningShader;
+ prebuildSound = cgs.media.humanBuildablePrebuild;
+ }
+ else
+ {
+ texture = cgs.media.humanUnpoweredSpawningShader;
+ prebuildSound = cgs.media.unpoweredSurgeLoop;
+ }
}
- else if(team==TEAM_ALIENS)
+ else if( team == TEAM_ALIENS )
{
texture = cgs.media.cuboidAlienPrebuild;
prebuildSound = cgs.media.alienBuildablePrebuild;
@@ -1764,24 +1840,11 @@ void CG_Buildable( centity_t *cent )
cracks = 0;
trap_S_AddLoopingSound( es->number, cent->lerpOrigin, vec3_origin, prebuildSound );
}
-
- memset( &ent, 0, sizeof( ent ) );
- ent.reType = RT_MODEL;
- VectorCopy( cent->lerpOrigin, ent.origin );
- VectorCopy( cent->lerpOrigin, ent.oldorigin );
- VectorCopy( cent->lerpOrigin, ent.lightingOrigin );
-
- //NOTE: don't use CG_PositionAndOrientateBuildable, it screws up everything
- ent.axis[0][0]=-dims[0]/2.0f;ent.axis[0][1]=0.0f; ent.axis[0][2]=0.0f;
- ent.axis[1][0]=0.0f; ent.axis[1][1]=-dims[1]/2.0f;ent.axis[1][2]=0.0f;
- ent.axis[2][0]=0.0f; ent.axis[2][1]=0.0f; ent.axis[2][2]=dims[2]/2.0f;
- ent.nonNormalizedAxes = qtrue;
-
- ent.customShader = texture;
- ent.hModel = cgs.media.cuboidModel;
- trap_R_AddRefEntityToScene( &ent );
- if( cracks )
- CG_DrawCuboid( ent.origin, dims, cracks, 1 );
+
+ BG_CuboidBBox( dims, mins, maxs );
+ VectorAdd( mins, cent->lerpOrigin, mins );
+ VectorAdd( maxs, cent->lerpOrigin, maxs );
+ CG_RenderCuboid( mins, maxs, 0.01f, texture );
if( health < cent->lastBuildableHealth && ( es->eFlags & EF_B_SPAWNED ) )
{
@@ -1795,247 +1858,253 @@ void CG_Buildable( centity_t *cent )
}
}
else
- {
-
- memset ( &ent, 0, sizeof( ent ) );
+ {
+ memset ( &ent, 0, sizeof( ent ) );
- VectorCopy( cent->lerpOrigin, ent.origin );
- VectorCopy( cent->lerpOrigin, ent.oldorigin );
- VectorCopy( cent->lerpOrigin, ent.lightingOrigin );
+ VectorCopy( cent->lerpOrigin, ent.origin );
+ VectorCopy( cent->lerpOrigin, ent.oldorigin );
+ VectorCopy( cent->lerpOrigin, ent.lightingOrigin );
- VectorCopy( es->origin2, surfNormal );
+ VectorCopy( es->origin2, surfNormal );
- VectorCopy( es->angles, angles );
- BG_BuildableBoundingBox( es->modelindex, mins, maxs );
+ VectorCopy( es->angles, angles );
+ BG_BuildableBoundingBox( es->modelindex, mins, maxs );
- if( es->pos.trType == TR_STATIONARY )
- {
- // Positioning a buildable involves potentially up to two traces, and
- // seeing as buildables rarely move, we cache the results and recalculate
- // only if the buildable moves or changes orientation
- if( VectorCompare( cent->buildableCache.cachedOrigin, cent->lerpOrigin ) &&
- VectorCompare( cent->buildableCache.cachedNormal, surfNormal ) )
- {
- VectorCopy( cent->buildableCache.axis[ 0 ], ent.axis[ 0 ] );
- VectorCopy( cent->buildableCache.axis[ 1 ], ent.axis[ 1 ] );
- VectorCopy( cent->buildableCache.axis[ 2 ], ent.axis[ 2 ] );
- VectorCopy( cent->buildableCache.origin, ent.origin );
- }
- else
+ if( es->pos.trType == TR_STATIONARY )
{
- CG_PositionAndOrientateBuildable( angles, ent.origin, surfNormal,
- es->number, mins, maxs, ent.axis,
- ent.origin, qfalse );
- VectorCopy( ent.axis[ 0 ], cent->buildableCache.axis[ 0 ] );
- VectorCopy( ent.axis[ 1 ], cent->buildableCache.axis[ 1 ] );
- VectorCopy( ent.axis[ 2 ], cent->buildableCache.axis[ 2 ] );
- VectorCopy( ent.origin, cent->buildableCache.origin );
- VectorCopy( cent->lerpOrigin, cent->buildableCache.cachedOrigin );
- VectorCopy( surfNormal, cent->buildableCache.cachedNormal );
+ // Positioning a buildable involves potentially up to two traces, and
+ // seeing as buildables rarely move, we cache the results and recalculate
+ // only if the buildable moves or changes orientation
+ if( VectorCompare( cent->buildableCache.cachedOrigin, cent->lerpOrigin ) &&
+ VectorCompare( cent->buildableCache.cachedNormal, surfNormal ) )
+ {
+ VectorCopy( cent->buildableCache.axis[ 0 ], ent.axis[ 0 ] );
+ VectorCopy( cent->buildableCache.axis[ 1 ], ent.axis[ 1 ] );
+ VectorCopy( cent->buildableCache.axis[ 2 ], ent.axis[ 2 ] );
+ VectorCopy( cent->buildableCache.origin, ent.origin );
+ }
+ else
+ {
+ CG_PositionAndOrientateBuildable( angles, ent.origin, surfNormal,
+ es->number, mins, maxs, ent.axis,
+ ent.origin, qfalse );
+ VectorCopy( ent.axis[ 0 ], cent->buildableCache.axis[ 0 ] );
+ VectorCopy( ent.axis[ 1 ], cent->buildableCache.axis[ 1 ] );
+ VectorCopy( ent.axis[ 2 ], cent->buildableCache.axis[ 2 ] );
+ VectorCopy( ent.origin, cent->buildableCache.origin );
+ VectorCopy( cent->lerpOrigin, cent->buildableCache.cachedOrigin );
+ VectorCopy( surfNormal, cent->buildableCache.cachedNormal );
+ }
}
- }
-
- VectorMA( ent.origin, BG_BuildableConfig( es->modelindex )->zOffset, surfNormal, ent.origin );
-
- VectorCopy( ent.origin, ent.oldorigin ); // don't positionally lerp at all
- VectorCopy( ent.origin, ent.lightingOrigin );
+ VectorMA( ent.origin, BG_BuildableConfig( es->modelindex )->zOffset, surfNormal, ent.origin );
+
- ent.hModel = cg_buildables[ es->modelindex ].models[ 0 ];
+ VectorCopy( ent.origin, ent.oldorigin ); // don't positionally lerp at all
+ VectorCopy( ent.origin, ent.lightingOrigin );
- if( !( es->eFlags & EF_B_SPAWNED ) )
- {
- sfxHandle_t prebuildSound = cgs.media.humanBuildablePrebuild;
+ ent.hModel = cg_buildables[ es->modelindex ].models[ 0 ];
- if( team == TEAM_HUMANS )
+ if( !( es->eFlags & EF_B_SPAWNED ) )
{
- ent.customShader = cgs.media.humanSpawningShader;
- prebuildSound = cgs.media.humanBuildablePrebuild;
- }
- else if( team == TEAM_ALIENS )
- prebuildSound = cgs.media.alienBuildablePrebuild;
+ sfxHandle_t prebuildSound = cgs.media.humanBuildablePrebuild;
- trap_S_AddLoopingSound( es->number, cent->lerpOrigin, vec3_origin, prebuildSound );
- }
+ if( team == TEAM_HUMANS )
+ {
+ if( es->eFlags & EF_B_POWERED )
+ {
+ ent.customShader = cgs.media.humanSpawningShader;
+ prebuildSound = cgs.media.humanBuildablePrebuild;
+ }
+ else
+ {
+ ent.customShader = cgs.media.humanUnpoweredSpawningShader;
+ prebuildSound = cgs.media.unpoweredSurgeLoop;
+ }
+ }
+ else if( team == TEAM_ALIENS )
+ prebuildSound = cgs.media.alienBuildablePrebuild;
+
+ trap_S_AddLoopingSound( es->number, cent->lerpOrigin, vec3_origin, prebuildSound );
+ }
- CG_BuildableAnimation( cent, &ent.oldframe, &ent.frame, &ent.backlerp );
+ CG_BuildableAnimation( cent, &ent.oldframe, &ent.frame, &ent.backlerp );
- //rescale the model
- scale = BG_BuildableConfig( es->modelindex )->modelScale;
+ //rescale the model
+ scale = BG_BuildableConfig( es->modelindex )->modelScale;
- if( scale != 1.0f )
- {
- VectorScale( ent.axis[ 0 ], scale, ent.axis[ 0 ] );
- VectorScale( ent.axis[ 1 ], scale, ent.axis[ 1 ] );
- VectorScale( ent.axis[ 2 ], scale, ent.axis[ 2 ] );
+ if( scale != 1.0f )
+ {
+ VectorScale( ent.axis[ 0 ], scale, ent.axis[ 0 ] );
+ VectorScale( ent.axis[ 1 ], scale, ent.axis[ 1 ] );
+ VectorScale( ent.axis[ 2 ], scale, ent.axis[ 2 ] );
- ent.nonNormalizedAxes = qtrue;
- }
- else
- ent.nonNormalizedAxes = qfalse;
-
+ ent.nonNormalizedAxes = qtrue;
+ }
+ else
+ ent.nonNormalizedAxes = qfalse;
- if( CG_PlayerIsBuilder( es->modelindex ) && CG_BuildableRemovalPending( es->number ) )
- ent.customShader = cgs.media.redBuildShader;
+ //add to refresh list
+ trap_R_AddRefEntityToScene( &ent );
- //add to refresh list
- trap_R_AddRefEntityToScene( &ent );
+ CrossProduct( surfNormal, refNormal, xNormal );
+ VectorNormalize( xNormal );
+ rotAngle = RAD2DEG( acos( DotProduct( surfNormal, refNormal ) ) );
- CrossProduct( surfNormal, refNormal, xNormal );
- VectorNormalize( xNormal );
- rotAngle = RAD2DEG( acos( DotProduct( surfNormal, refNormal ) ) );
+ //turret barrel bit
+ if( cg_buildables[ es->modelindex ].models[ 1 ] )
+ {
+ refEntity_t turretBarrel;
+ vec3_t flatAxis[ 3 ];
- //turret barrel bit
- if( cg_buildables[ es->modelindex ].models[ 1 ] )
- {
- refEntity_t turretBarrel;
- vec3_t flatAxis[ 3 ];
+ memset( &turretBarrel, 0, sizeof( turretBarrel ) );
- memset( &turretBarrel, 0, sizeof( turretBarrel ) );
+ turretBarrel.hModel = cg_buildables[ es->modelindex ].models[ 1 ];
- turretBarrel.hModel = cg_buildables[ es->modelindex ].models[ 1 ];
+ CG_PositionEntityOnTag( &turretBarrel, &ent, ent.hModel, "tag_turret" );
+ VectorCopy( cent->lerpOrigin, turretBarrel.lightingOrigin );
- CG_PositionEntityOnTag( &turretBarrel, &ent, ent.hModel, "tag_turret" );
- VectorCopy( cent->lerpOrigin, turretBarrel.lightingOrigin );
+ {
+ vec3_t interpolated;
+ int i;
- {
- vec3_t interpolated;
- int i;
+ for( i = 0; i < 3 ; i++ )
+ interpolated[ i ] = LerpAngle( es->angles2[ i ], cent->nextState.angles2[ i ], cg.frameInterpolation );
- for( i = 0; i < 3 ; i++ )
- interpolated[ i ] = LerpAngle( es->angles2[ i ], cent->nextState.angles2[ i ], cg.frameInterpolation );
+ AnglesToAxis( interpolated, flatAxis );
+ }
- AnglesToAxis( interpolated, flatAxis );
- }
+ RotatePointAroundVector( turretBarrel.axis[ 0 ], xNormal, flatAxis[ 0 ], -rotAngle );
+ RotatePointAroundVector( turretBarrel.axis[ 1 ], xNormal, flatAxis[ 1 ], -rotAngle );
+ RotatePointAroundVector( turretBarrel.axis[ 2 ], xNormal, flatAxis[ 2 ], -rotAngle );
- RotatePointAroundVector( turretBarrel.axis[ 0 ], xNormal, flatAxis[ 0 ], -rotAngle );
- RotatePointAroundVector( turretBarrel.axis[ 1 ], xNormal, flatAxis[ 1 ], -rotAngle );
- RotatePointAroundVector( turretBarrel.axis[ 2 ], xNormal, flatAxis[ 2 ], -rotAngle );
+ turretBarrel.oldframe = ent.oldframe;
+ turretBarrel.frame = ent.frame;
+ turretBarrel.backlerp = ent.backlerp;
- turretBarrel.oldframe = ent.oldframe;
- turretBarrel.frame = ent.frame;
- turretBarrel.backlerp = ent.backlerp;
+ turretBarrel.customShader = ent.customShader;
- turretBarrel.customShader = ent.customShader;
+ if( scale != 1.0f )
+ {
+ VectorScale( turretBarrel.axis[ 0 ], scale, turretBarrel.axis[ 0 ] );
+ VectorScale( turretBarrel.axis[ 1 ], scale, turretBarrel.axis[ 1 ] );
+ VectorScale( turretBarrel.axis[ 2 ], scale, turretBarrel.axis[ 2 ] );
- if( scale != 1.0f )
- {
- VectorScale( turretBarrel.axis[ 0 ], scale, turretBarrel.axis[ 0 ] );
- VectorScale( turretBarrel.axis[ 1 ], scale, turretBarrel.axis[ 1 ] );
- VectorScale( turretBarrel.axis[ 2 ], scale, turretBarrel.axis[ 2 ] );
+ turretBarrel.nonNormalizedAxes = qtrue;
+ }
+ else
+ turretBarrel.nonNormalizedAxes = qfalse;
- turretBarrel.nonNormalizedAxes = qtrue;
+ trap_R_AddRefEntityToScene( &turretBarrel );
}
- else
- turretBarrel.nonNormalizedAxes = qfalse;
-
- if( CG_PlayerIsBuilder( es->modelindex ) && CG_BuildableRemovalPending( es->number ) )
- turretBarrel.customShader = cgs.media.redBuildShader;
- trap_R_AddRefEntityToScene( &turretBarrel );
- }
+ //turret barrel bit
+ if( cg_buildables[ es->modelindex ].models[ 2 ] )
+ {
+ refEntity_t turretTop;
+ vec3_t flatAxis[ 3 ];
+ vec3_t swivelAngles;
- //turret barrel bit
- if( cg_buildables[ es->modelindex ].models[ 2 ] )
- {
- refEntity_t turretTop;
- vec3_t flatAxis[ 3 ];
- vec3_t swivelAngles;
+ memset( &turretTop, 0, sizeof( turretTop ) );
- memset( &turretTop, 0, sizeof( turretTop ) );
+ VectorCopy( es->angles2, swivelAngles );
+ swivelAngles[ PITCH ] = 0.0f;
- VectorCopy( es->angles2, swivelAngles );
- swivelAngles[ PITCH ] = 0.0f;
+ turretTop.hModel = cg_buildables[ es->modelindex ].models[ 2 ];
- turretTop.hModel = cg_buildables[ es->modelindex ].models[ 2 ];
+ CG_PositionRotatedEntityOnTag( &turretTop, &ent, ent.hModel, "tag_turret" );
+ VectorCopy( cent->lerpOrigin, turretTop.lightingOrigin );
+ AnglesToAxis( swivelAngles, flatAxis );
- CG_PositionRotatedEntityOnTag( &turretTop, &ent, ent.hModel, "tag_turret" );
- VectorCopy( cent->lerpOrigin, turretTop.lightingOrigin );
- AnglesToAxis( swivelAngles, flatAxis );
+ RotatePointAroundVector( turretTop.axis[ 0 ], xNormal, flatAxis[ 0 ], -rotAngle );
+ RotatePointAroundVector( turretTop.axis[ 1 ], xNormal, flatAxis[ 1 ], -rotAngle );
+ RotatePointAroundVector( turretTop.axis[ 2 ], xNormal, flatAxis[ 2 ], -rotAngle );
- RotatePointAroundVector( turretTop.axis[ 0 ], xNormal, flatAxis[ 0 ], -rotAngle );
- RotatePointAroundVector( turretTop.axis[ 1 ], xNormal, flatAxis[ 1 ], -rotAngle );
- RotatePointAroundVector( turretTop.axis[ 2 ], xNormal, flatAxis[ 2 ], -rotAngle );
+ turretTop.oldframe = ent.oldframe;
+ turretTop.frame = ent.frame;
+ turretTop.backlerp = ent.backlerp;
- turretTop.oldframe = ent.oldframe;
- turretTop.frame = ent.frame;
- turretTop.backlerp = ent.backlerp;
+ turretTop.customShader = ent.customShader;
- turretTop.customShader = ent.customShader;
+ if( scale != 1.0f )
+ {
+ VectorScale( turretTop.axis[ 0 ], scale, turretTop.axis[ 0 ] );
+ VectorScale( turretTop.axis[ 1 ], scale, turretTop.axis[ 1 ] );
+ VectorScale( turretTop.axis[ 2 ], scale, turretTop.axis[ 2 ] );
- if( scale != 1.0f )
- {
- VectorScale( turretTop.axis[ 0 ], scale, turretTop.axis[ 0 ] );
- VectorScale( turretTop.axis[ 1 ], scale, turretTop.axis[ 1 ] );
- VectorScale( turretTop.axis[ 2 ], scale, turretTop.axis[ 2 ] );
+ turretTop.nonNormalizedAxes = qtrue;
+ }
+ else
+ turretTop.nonNormalizedAxes = qfalse;
- turretTop.nonNormalizedAxes = qtrue;
+ trap_R_AddRefEntityToScene( &turretTop );
}
- else
- turretTop.nonNormalizedAxes = qfalse;
-
- if( CG_PlayerIsBuilder( es->modelindex ) && CG_BuildableRemovalPending( es->number ) )
- turretTop.customShader = cgs.media.redBuildShader;
- trap_R_AddRefEntityToScene( &turretTop );
- }
-
- //weapon effects for turrets
- if( es->eFlags & EF_FIRING )
- {
- weaponInfo_t *weapon = &cg_weapons[ es->weapon ];
-
- if( cg.time - cent->muzzleFlashTime > MUZZLE_FLASH_TIME ||
- BG_Buildable( es->modelindex, NULL )->turretProjType == WP_TESLAGEN )
+ //weapon effects for turrets
+ if( es->eFlags & EF_FIRING )
{
- if( weapon->wim[ WPM_PRIMARY ].flashDlightColor[ 0 ] ||
- weapon->wim[ WPM_PRIMARY ].flashDlightColor[ 1 ] ||
- weapon->wim[ WPM_PRIMARY ].flashDlightColor[ 2 ] )
+ weaponInfo_t *weapon = &cg_weapons[ es->weapon ];
+
+ if( cg.time - cent->muzzleFlashTime > MUZZLE_FLASH_TIME ||
+ BG_Buildable( es->modelindex, NULL )->turretProjType == WP_TESLAGEN )
{
- trap_R_AddLightToScene( cent->lerpOrigin, 300 + ( rand( ) & 31 ),
- weapon->wim[ WPM_PRIMARY ].flashDlightColor[ 0 ],
- weapon->wim[ WPM_PRIMARY ].flashDlightColor[ 1 ],
- weapon->wim[ WPM_PRIMARY ].flashDlightColor[ 2 ] );
+ if( weapon->wim[ WPM_PRIMARY ].flashDlightColor[ 0 ] ||
+ weapon->wim[ WPM_PRIMARY ].flashDlightColor[ 1 ] ||
+ weapon->wim[ WPM_PRIMARY ].flashDlightColor[ 2 ] )
+ {
+ trap_R_AddLightToScene( cent->lerpOrigin, 300 + ( rand( ) & 31 ),
+ weapon->wim[ WPM_PRIMARY ].flashDlightColor[ 0 ],
+ weapon->wim[ WPM_PRIMARY ].flashDlightColor[ 1 ],
+ weapon->wim[ WPM_PRIMARY ].flashDlightColor[ 2 ] );
+ }
}
- }
- if( weapon->wim[ WPM_PRIMARY ].firingSound )
- {
- trap_S_AddLoopingSound( es->number, cent->lerpOrigin, vec3_origin,
- weapon->wim[ WPM_PRIMARY ].firingSound );
+ if( weapon->wim[ WPM_PRIMARY ].firingSound )
+ {
+ trap_S_AddLoopingSound( es->number, cent->lerpOrigin, vec3_origin,
+ weapon->wim[ WPM_PRIMARY ].firingSound );
+ }
+ else if( weapon->readySound )
+ trap_S_AddLoopingSound( es->number, cent->lerpOrigin, vec3_origin, weapon->readySound );
}
- else if( weapon->readySound )
- trap_S_AddLoopingSound( es->number, cent->lerpOrigin, vec3_origin, weapon->readySound );
- }
-
- //smoke etc for damaged buildables
- CG_BuildableParticleEffects( cent );
-
-
+
+ //smoke etc for damaged buildables
+ CG_BuildableParticleEffects( cent );
+
+
-
- health = es->generic1;
+
+ health = es->generic1;
- if( health < cent->lastBuildableHealth &&
- ( es->eFlags & EF_B_SPAWNED ) )
- {
- if( cent->lastBuildableDamageSoundTime + BUILDABLE_SOUND_PERIOD < cg.time )
+ if( health < cent->lastBuildableHealth &&
+ ( es->eFlags & EF_B_SPAWNED ) )
{
- if( team == TEAM_HUMANS )
+ if( cent->lastBuildableDamageSoundTime + BUILDABLE_SOUND_PERIOD < cg.time )
{
- int i = rand( ) % 4;
- trap_S_StartSound( NULL, es->number, CHAN_BODY, cgs.media.humanBuildableDamage[ i ] );
- }
- else if( team == TEAM_ALIENS )
- trap_S_StartSound( NULL, es->number, CHAN_BODY, cgs.media.alienBuildableDamage );
+ if( team == TEAM_HUMANS )
+ {
+ int i = rand( ) % 4;
+ trap_S_StartSound( NULL, es->number, CHAN_BODY, cgs.media.humanBuildableDamage[ i ] );
+ }
+ else if( team == TEAM_ALIENS )
+ trap_S_StartSound( NULL, es->number, CHAN_BODY, cgs.media.alienBuildableDamage );
- cent->lastBuildableDamageSoundTime = cg.time;
+ cent->lastBuildableDamageSoundTime = cg.time;
+ }
}
- }
-
- cent->lastBuildableHealth = health;
+ cent->lastBuildableHealth = health;
} //if (is a cuboid)
+
+
+ // play a loop if there's not enough power for it to build / activate
+ if( ( !( es->eFlags & EF_B_SPAWNED ) &&
+ !( es->eFlags & EF_B_POWERED ) ) ||
+ ( ( BG_Buildable( es->modelindex, NULL )->requiresPower ||
+ es->modelindex != BA_H_REPEATER ) &&
+ !( es->eFlags & EF_B_POWERED ) &&
+ ( es->eFlags & EF_B_SURGE ) ) )
+ trap_S_AddLoopingSound( es->number, cent->lerpOrigin, vec3_origin, cgs.media.unpoweredSurgeLoop );
}
char cuboidInfo[128];
@@ -2049,17 +2118,21 @@ Draw the cuboid info string generated by CG_Cuboid_Info.
*/
void CG_Cuboid_DrawInfo(void)
{
- float x,y,w,h,s=0.5f;
+ float x,y,w,h,s=0.5f;
+
+ // disabled by default (replaced by ckit's display)
+ if( !cg_drawCuboidInfo.integer )
+ return;
- if(!BG_Buildable(cg.predictedPlayerState.stats[STAT_BUILDABLE]&~SB_VALID_TOGGLEBIT,NULL)->cuboid)
- return;
+ if( !BG_Buildable( cg.predictedPlayerState.stats[ STAT_BUILDABLE ] & ~SB_VALID_TOGGLEBIT, NULL )->cuboid )
+ return;
- w=UI_Text_Width(cuboidInfo,s);
- h=UI_Text_Height(cuboidInfo,s);
- x=320.0f-w/2.0f+cg_cuboidInfoX.value;
- y=240.0f-h/2.0f+cg_cuboidInfoY.value;
+ w= UI_Text_Width( cuboidInfo, s );
+ h= UI_Text_Height( cuboidInfo, s );
+ x= 320.0f - w / 2.0f + cg_cuboidInfoX.value;
+ y= 240.0f - h / 2.0f + cg_cuboidInfoY.value;
- UI_Text_Paint(x,y,s,colorWhite,cuboidInfo,0,0,ITEM_TEXTSTYLE_SHADOWEDMORE);
+ UI_Text_Paint( x, y, s, colorWhite, cuboidInfo, 0, 0, ITEM_TEXTSTYLE_SHADOWEDMORE );
}
/*
@@ -2076,6 +2149,9 @@ void CG_Cuboid_Info(void)
const buildableAttributes_t *attr;
int axis=cg_cuboidResizeAxis.integer;
+ if( !cg_drawCuboidInfo.integer )
+ return;
+
attr=BG_Buildable(cg.predictedPlayerState.stats[STAT_BUILDABLE]&~SB_VALID_TOGGLEBIT,cg.cuboidSelection);
Com_sprintf(cuboidInfo,sizeof(cuboidInfo),
"^7[^3%c^7] | ^%c%.1f^7x^%c%.1f^7x^%c%.1f ^7| ^3%i^7HP | ^3%i^7ms | ^3%i^7BP",
@@ -2342,3 +2418,53 @@ void CG_CuboidAttack_f(void)
trap_SendClientCommand( va( "%s", CG_Argv(0) ) );
}
+/*
+======================
+CG_BuildablePowerStatusIcon
+
+Figures out the power status icon for a buildable
+======================
+*/
+qhandle_t CG_BuildablePowerStatusIcon( entityState_t *es )
+{
+ qboolean powered = ( es->eFlags & EF_B_POWERED );
+
+ if( !( es->eFlags & EF_B_SPAWNED ) )
+ {
+ if( powered )
+ return cgs.media.ckit_icon_surge;
+ else
+ return cgs.media.ckit_icon_nosurge;
+ }
+
+ if( BG_Buildable( es->modelindex, NULL )->isPowerSource ||
+ es->modelindex == BA_H_REPEATER )
+ {
+ qboolean active = ( es->eFlags & EF_B_SURGE );
+
+ if( !active )
+ return cgs.media.ckit_icon_off;
+ else if( powered )
+ return cgs.media.ckit_icon_power;
+ else
+ return cgs.media.ckit_icon_nopower;
+ }
+ else
+ {
+ if( !( es->eFlags & EF_B_SURGE ) )
+ {
+ if( powered )
+ return cgs.media.ckit_icon_power;
+ else
+ return cgs.media.ckit_icon_nopower;
+ }
+ else
+ {
+ if( powered )
+ return cgs.media.ckit_icon_surge;
+ else
+ return cgs.media.ckit_icon_nosurge;
+ }
+ }
+ return 0;
+}
diff --git a/src/cgame/cg_draw.c b/src/cgame/cg_draw.c
index aa6df3d..e9cccf4 100644
--- a/src/cgame/cg_draw.c
+++ b/src/cgame/cg_draw.c
@@ -636,7 +636,6 @@ static void CG_DrawPlayerWallclimbing( rectDef_t *rect, vec4_t backColor, vec4_t
static void CG_DrawPlayerAmmoValue( rectDef_t *rect, vec4_t color )
{
int value;
- int valueMarked = -1;
qboolean bp = qfalse;
switch( BG_PrimaryWeapon( cg.snap->ps.stats ) )
@@ -648,8 +647,7 @@ static void CG_DrawPlayerAmmoValue( rectDef_t *rect, vec4_t color )
case WP_ABUILD:
case WP_ABUILD2:
case WP_HBUILD:
- value = cg.snap->ps.persistant[ PERS_BP ];
- valueMarked = cg.snap->ps.persistant[ PERS_MARKEDBP ];
+ value = cg.snap->ps.persistant[ PERS_BUILDPOINTS ];
bp = qtrue;
break;
@@ -660,8 +658,6 @@ static void CG_DrawPlayerAmmoValue( rectDef_t *rect, vec4_t color )
if( value > 999 )
value = 999;
- if( valueMarked > 999 )
- valueMarked = 999;
if( value > -1 )
{
@@ -678,10 +674,7 @@ static void CG_DrawPlayerAmmoValue( rectDef_t *rect, vec4_t color )
return;
}
- if( valueMarked > 0 )
- text = va( "%d+(%d)", value, valueMarked );
- else
- text = va( "%d", value );
+ text = va( "%d", value );
len = strlen( text );
@@ -2557,10 +2550,10 @@ CG_DrawCrosshair
static void CG_DrawCrosshair( rectDef_t *rect, vec4_t color )
{
float w, h;
- qhandle_t hShader;
float x, y;
weaponInfo_t *wi;
weapon_t weapon;
+ qboolean hit, ff;
weapon = BG_GetPlayerWeapon( &cg.snap->ps );
@@ -2590,24 +2583,66 @@ static void CG_DrawCrosshair( rectDef_t *rect, vec4_t color )
x = rect->x + ( rect->w / 2 ) - ( w / 2 );
y = rect->y + ( rect->h / 2 ) - ( h / 2 );
- hShader = wi->crossHair;
+ hit = ( cg.time <= cg.lastHitTime + 75 );
+ ff = ( cg.time == cg.crosshairClientTime || cg.crosshairBuildable >= 0 );
- //aiming at a friendly player/buildable, dim the crosshair
- if( cg.time == cg.crosshairClientTime || cg.crosshairBuildable >= 0 )
- {
- int i;
- for( i = 0; i < 3; i++ )
- color[i] *= .5f;
+ color[ 3 ] = 0.6f;
- }
-
- if( hShader != 0 )
+ trap_R_SetColor( color );
+
+ switch( wi->crossHairType )
{
+ case CH_NONE:
+ break;
+
+ case CH_DOT:
+ if( ff )
+ CG_DrawPic( x, y, w, h, cgs.media.ch_friendly );
+ else
+ CG_DrawPic( x, y, w, h, cgs.media.ch_dot );
- trap_R_SetColor( color );
- CG_DrawPic( x, y, w, h, hShader );
- trap_R_SetColor( NULL );
+ if( hit )
+ CG_DrawPic( x, y, w, h, cgs.media.ch_dothit );
+
+ break;
+
+ case CH_CIRCLE:
+ if( ff )
+ CG_DrawPic( x, y, w, h, cgs.media.ch_friendly );
+
+ if( hit )
+ CG_DrawPic( x, y, w, h, cgs.media.ch_circlehit );
+ else
+ CG_DrawPic( x, y, w, h, cgs.media.ch_circle );
+
+ break;
+
+ case CH_CIRCLEDDOT:
+ if( ff )
+ CG_DrawPic( x, y, w, h, cgs.media.ch_friendly );
+ else
+ CG_DrawPic( x, y, w, h, cgs.media.ch_dot );
+
+ if( hit )
+ CG_DrawPic( x, y, w, h, cgs.media.ch_circlehit );
+ else
+ CG_DrawPic( x, y, w, h, cgs.media.ch_circle );
+
+ break;
+
+ case CH_ALIEN:
+ if( ff )
+ CG_DrawPic( x, y, w, h, cgs.media.ch_afriendly );
+ else
+ CG_DrawPic( x, y, w, h, cgs.media.ch_adot );
+
+ if( hit )
+ CG_DrawPic( x, y, w, h, cgs.media.ch_acircle );
+
+ break;
}
+
+ trap_R_SetColor( NULL );
}
diff --git a/src/cgame/cg_ents.c b/src/cgame/cg_ents.c
index 339cd8e..6b1523d 100644
--- a/src/cgame/cg_ents.c
+++ b/src/cgame/cg_ents.c
@@ -236,7 +236,8 @@ static void CG_EntityEffects( centity_t *cent )
// constant light glow
- if ( cent->currentState.constantLight )
+ if ( cent->currentState.constantLight &&
+ cent->currentState.eType != ET_BUILDABLE )
{
int cl;
int i, r, g, b;
diff --git a/src/cgame/cg_event.c b/src/cgame/cg_event.c
index c8ca2e6..adc319c 100644
--- a/src/cgame/cg_event.c
+++ b/src/cgame/cg_event.c
@@ -808,6 +808,25 @@ void CG_EntityEvent( centity_t *cent, vec3_t position )
trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.repeaterUseSound );
break;
+ case EV_POWER_SWITCH:
+ trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.powerSwitchSound );
+ break;
+
+ case EV_POWER_ZAP:
+ {
+ particleSystem_t *ps;
+ ps = CG_SpawnNewParticleSystem( cgs.media.humanPowerZapPS );
+
+ if( CG_IsParticleSystemValid( &ps ) )
+ {
+ CG_SetAttachmentPoint( &ps->attachment, position );
+ CG_SetAttachmentCent( &ps->attachment, cg_entities + es->number );
+ CG_AttachToPoint( &ps->attachment );
+ }
+ }
+ trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.powerZap[ rand() % 4 ] );
+ break;
+
case EV_GRENADE_BOUNCE:
if( rand( ) & 1 )
trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.hardBounceSound1 );
diff --git a/src/cgame/cg_local.h b/src/cgame/cg_local.h
index a81d1df..e4949b5 100644
--- a/src/cgame/cg_local.h
+++ b/src/cgame/cg_local.h
@@ -79,8 +79,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#define TEAM_OVERLAY_MAXNAME_WIDTH 12
#define TEAM_OVERLAY_MAXLOCATION_WIDTH 16
-#define CUBOID_CRACK_TEXTURES 4
-
typedef enum
{
FOOTSTEP_NORMAL,
@@ -814,6 +812,15 @@ typedef struct weaponInfoMode_s
sfxHandle_t impactFleshSound[ 4 ]; //random impact sound
} weaponInfoMode_t;
+enum
+{
+ CH_NONE,
+ CH_DOT,
+ CH_CIRCLE,
+ CH_CIRCLEDDOT,
+ CH_ALIEN
+};
+
// each WP_* weapon enum has an associated weaponInfo_t
// that contains media references necessary to present the
// weapon and its effects
@@ -839,7 +846,7 @@ typedef struct weaponInfo_s
qhandle_t weaponIcon;
qhandle_t ammoIcon;
- qhandle_t crossHair;
+ int crossHairType;
int crossHairSize;
sfxHandle_t readySound;
@@ -932,6 +939,25 @@ typedef struct
#define MAX_CONSOLE_TEXT 8192
#define MAX_CONSOLE_LINES 32
+#define MAX_CKIT_ROWS 6
+#define MAX_CKIT_COLUMNS 7
+#define MAX_CKIT_TEXT 64 //make it big so Com_sprintf won't spam errors
+
+typedef struct
+{
+ qhandle_t icon;
+ char text[ MAX_CKIT_TEXT ];
+} ckitDisplayLine_t;
+
+typedef struct
+{
+ qhandle_t background;
+ qhandle_t bigicona;
+ qhandle_t bigiconb;
+ ckitDisplayLine_t lines[ MAX_CKIT_ROWS ];
+} ckitDisplay_t;
+
+
// all cg.stepTime, cg.duckTime, cg.landTime, etc are set to cg.time when the action
// occurs, and they will have visible effects for #define STEP_TIME or whatever msec after
@@ -1194,6 +1220,16 @@ typedef struct
qhandle_t announcerStack[ MAX_ANNOUNCER_STACK ];
int announcerStackPos;
int announcerStackLatest;
+
+ // no space for voltage and current information so they're being sent
+ // over the network in commands
+ int bse_entityNum;
+ float bse_voltage;
+ float bse_current;
+
+ ckitDisplay_t ckitDisp;
+
+ int lastHitTime;
} cg_t;
@@ -1228,6 +1264,7 @@ typedef struct
qhandle_t teamOverlayShader;
qhandle_t numberShaders[ 11 ];
+ qhandle_t digitalNumberShaders[ 12 ]; // note: 11 is comma
qhandle_t shadowMarkShader;
qhandle_t wakeMarkShader;
@@ -1236,6 +1273,7 @@ typedef struct
qhandle_t greenBuildShader;
qhandle_t redBuildShader;
qhandle_t humanSpawningShader;
+ qhandle_t humanUnpoweredSpawningShader;
// disconnect
qhandle_t disconnectPS;
@@ -1337,13 +1375,17 @@ typedef struct
qhandle_t humanBleedPS;
qhandle_t alienBuildableBleedPS;
qhandle_t humanBuildableBleedPS;
-
+
+ qhandle_t humanPowerZapPS;
qhandle_t teslaZapTS;
sfxHandle_t lCannonWarningSound;
sfxHandle_t lCannonWarningSound2;
+ qhandle_t friendlyCrosshair;
+ qhandle_t hitCrosshair;
+
qhandle_t buildWeaponTimerPie[ 8 ];
qhandle_t upgradeClassIconShader;
qhandle_t healthCross;
@@ -1353,7 +1395,7 @@ typedef struct
qhandle_t healthCrossPoisoned;
qhandle_t healthCrossImplanted;
- qhandle_t cuboidCracks[CUBOID_CRACK_TEXTURES-1];
+ qhandle_t cuboidCracks;
qhandle_t cuboidModel;
qhandle_t cuboidRedBuildShader;
qhandle_t cuboidYellowBuildShader;
@@ -1378,6 +1420,50 @@ typedef struct
qhandle_t basivisionShader;
qhandle_t basivisionBlipShader;
qhandle_t basivisionFlareShader;
+
+ sfxHandle_t unpoweredSurgeLoop;
+ sfxHandle_t powerSwitchSound;
+ sfxHandle_t powerZap[ 4 ];
+
+ //ckit's hacky dynamic display
+ qhandle_t ckitBackgroundShader; //note: supposed to be dynamic but I've got nothing put there yet
+ qhandle_t ckitOverlayShader;
+
+ qhandle_t ckit_background;
+ qhandle_t ckit_overlay;
+ qhandle_t ckit_bigicona;
+ qhandle_t ckit_bigiconb;
+ qhandle_t ckit_icon;
+ qhandle_t ckit_digit;
+
+ qhandle_t ckit_icon_bp;
+ qhandle_t ckit_icon_current;
+ qhandle_t ckit_icon_depth;
+ qhandle_t ckit_icon_health;
+ qhandle_t ckit_icon_height;
+ qhandle_t ckit_icon_network;
+ qhandle_t ckit_icon_nopower;
+ qhandle_t ckit_icon_nosurge;
+ qhandle_t ckit_icon_off;
+ qhandle_t ckit_icon_power;
+ qhandle_t ckit_icon_storedbp;
+ qhandle_t ckit_icon_surge;
+ qhandle_t ckit_icon_time;
+ qhandle_t ckit_icon_voltage;
+ qhandle_t ckit_icon_width;
+
+ qhandle_t ch_dot;
+ qhandle_t ch_dothit;
+ qhandle_t ch_circle;
+ qhandle_t ch_circlehit;
+ qhandle_t ch_friendly;
+
+ qhandle_t ch_adot;
+ qhandle_t ch_acircle;
+ qhandle_t ch_afriendly;
+ qhandle_t ch_aheadshot;
+
+ sfxHandle_t hitSound;
} cgMedia_t;
typedef struct
@@ -1425,7 +1511,6 @@ typedef struct
int timelimit;
int maxclients;
char mapname[ MAX_QPATH ];
- qboolean markDeconstruct; // Whether or not buildables are marked
int voteTime[ NUM_TEAMS ];
int voteYes[ NUM_TEAMS ];
@@ -1623,8 +1708,10 @@ extern vmCvar_t cg_chatTeamPrefix;
extern vmCvar_t cg_cuboidResizeAxis;
extern vmCvar_t cg_cuboidResizeRate;
extern vmCvar_t cg_cuboidPSQuality;
+
extern vmCvar_t cg_cuboidInfoX;
extern vmCvar_t cg_cuboidInfoY;
+extern vmCvar_t cg_drawCuboidInfo;
extern vmCvar_t cg_fuelInfoX;
extern vmCvar_t cg_fuelInfoY;
@@ -1634,6 +1721,11 @@ extern vmCvar_t cg_announcer;
extern vmCvar_t cg_cameraShakeMagnitude;
+extern vmCvar_t cg_debug1;
+extern vmCvar_t cg_debug2;
+extern vmCvar_t cg_debug3;
+extern vmCvar_t cg_debug4;
+
//
// cg_main.c
//
@@ -1753,15 +1845,16 @@ void CG_DrawBuildableStatus( void );
void CG_InitBuildables( void );
void CG_HumanBuildableExplosion( vec3_t origin, vec3_t dir );
void CG_AlienBuildableExplosion( vec3_t origin, vec3_t dir );
-void CG_CuboidAxis_f(void);
-void CG_CuboidRotate_f(void);
-void CG_CuboidSize_f(void);
-void CG_Cuboid_Send(void);
-void CG_Cuboid_Response(void);
+void CG_CuboidAxis_f( void );
+void CG_CuboidRotate_f( void );
+void CG_CuboidSize_f( void );
+void CG_Cuboid_Send( void );
+void CG_Cuboid_Response( void );
void CG_CuboidResize( qboolean enlarge );
-void CG_CuboidExplosion(buildable_t buildable, vec3_t origin, vec3_t cuboid);
-void CG_DrawCuboidParticles(void);
-void CG_CuboidAttack_f(void);
+void CG_CuboidExplosion( buildable_t buildable, vec3_t origin, vec3_t cuboid );
+void CG_DrawCuboidParticles( void );
+void CG_CuboidAttack_f( void );
+qhandle_t CG_BuildablePowerStatusIcon( entityState_t *es );
//
// cg_animation.c
diff --git a/src/cgame/cg_main.c b/src/cgame/cg_main.c
index ff3d567..ee37596 100644
--- a/src/cgame/cg_main.c
+++ b/src/cgame/cg_main.c
@@ -226,8 +226,10 @@ vmCvar_t cg_chatTeamPrefix;
vmCvar_t cg_cuboidResizeAxis;
vmCvar_t cg_cuboidResizeRate;
vmCvar_t cg_cuboidPSQuality;
+
vmCvar_t cg_cuboidInfoX;
vmCvar_t cg_cuboidInfoY;
+vmCvar_t cg_drawCuboidInfo;
vmCvar_t cg_fuelInfoX;
vmCvar_t cg_fuelInfoY;
@@ -237,6 +239,11 @@ vmCvar_t cg_announcer;
vmCvar_t cg_cameraShakeMagnitude;
+vmCvar_t cg_debug1;
+vmCvar_t cg_debug2;
+vmCvar_t cg_debug3;
+vmCvar_t cg_debug4;
+
typedef struct
{
vmCvar_t *vmCvar;
@@ -379,13 +386,19 @@ static cvarTable_t cvarTable[ ] =
{ &cg_cuboidInfoX, "cg_cuboidInfoX" ,"0", CVAR_ARCHIVE },
{ &cg_cuboidInfoY, "cg_cuboidInfoY" ,"150", CVAR_ARCHIVE },
+ { &cg_drawCuboidInfo, "cg_drawCuboidInfo" ,"0", CVAR_ARCHIVE },
{ &cg_fuelInfoX, "cg_fuelInfoX" ,"0", CVAR_ARCHIVE },
{ &cg_fuelInfoY, "cg_fuelInfoY" ,"150", CVAR_ARCHIVE },
{ &cg_fuelInfoScale, "cg_fuelInfoScale" ,"0.5", CVAR_ARCHIVE },
{ &cg_announcer, "cg_announcer", "1", CVAR_ARCHIVE },
- { &cg_cameraShakeMagnitude, "cg_cameraShakeMagnitude", "1", CVAR_ARCHIVE }
+ { &cg_cameraShakeMagnitude, "cg_cameraShakeMagnitude", "1", CVAR_ARCHIVE },
+
+ { &cg_debug1, "cg_debug1", "", CVAR_CHEAT },
+ { &cg_debug2, "cg_debug2", "", CVAR_CHEAT },
+ { &cg_debug3, "cg_debug3", "", CVAR_CHEAT },
+ { &cg_debug4, "cg_debug4", "", CVAR_CHEAT }
};
static int cvarTableSize = sizeof( cvarTable ) / sizeof( cvarTable[0] );
@@ -745,6 +758,13 @@ static void CG_RegisterSounds( void )
cgs.media.cuboidResizeSoundB = trap_S_RegisterSound( "sound/cuboid/resizeb.wav", qfalse );
cgs.media.cuboidRotateSound = trap_S_RegisterSound( "sound/cuboid/rotate.wav", qfalse );
cgs.media.cuboidAxisChangeSound = trap_S_RegisterSound( "sound/cuboid/axischange.wav", qfalse );
+
+ cgs.media.unpoweredSurgeLoop = trap_S_RegisterSound( "sound/buildables/human/unpowered_surge.wav", qfalse );
+ cgs.media.powerSwitchSound = trap_S_RegisterSound( "sound/buildables/human/switch.wav", qfalse );
+ for( i = 0; i < 4; i++ )
+ cgs.media.powerZap[ i ] = trap_S_RegisterSound( va( "sound/buildables/human/powerzap%i.wav", i + 1 ), qfalse );
+
+ cgs.media.hitSound = trap_S_RegisterSound( "sound/feedback/hit.wav", qfalse );
}
@@ -776,6 +796,21 @@ static void CG_RegisterGraphics( void )
"gfx/2d/numbers/nine_32b",
"gfx/2d/numbers/minus_32b",
};
+ static char *sb_digital[ 12 ] =
+ {
+ "gfx/2d/digital/0",
+ "gfx/2d/digital/1",
+ "gfx/2d/digital/2",
+ "gfx/2d/digital/3",
+ "gfx/2d/digital/4",
+ "gfx/2d/digital/5",
+ "gfx/2d/digital/6",
+ "gfx/2d/digital/7",
+ "gfx/2d/digital/8",
+ "gfx/2d/digital/9",
+ "gfx/2d/digital/minus",
+ "gfx/2d/digital/comma"
+ };
static char *buildWeaponTimerPieShaders[ 8 ] =
{
"ui/assets/neutral/1_5pie",
@@ -797,6 +832,9 @@ static void CG_RegisterGraphics( void )
for( i = 0; i < 11; i++ )
cgs.media.numberShaders[ i ] = trap_R_RegisterShader( sb_nums[ i ] );
+
+ for( i = 0; i < 12; i++ )
+ cgs.media.digitalNumberShaders[ i ] = trap_R_RegisterShader( sb_digital[ i ] );
cgs.media.viewBloodShader = trap_R_RegisterShader( "gfx/damage/fullscreen_painblend" );
@@ -813,14 +851,13 @@ static void CG_RegisterGraphics( void )
cgs.media.backTileShader = trap_R_RegisterShader( "console" );
-
// building shaders
cgs.media.greenBuildShader = trap_R_RegisterShader("gfx/misc/greenbuild" );
cgs.media.redBuildShader = trap_R_RegisterShader("gfx/misc/redbuild" );
cgs.media.humanSpawningShader = trap_R_RegisterShader("models/buildables/telenode/rep_cyl" );
+ cgs.media.humanUnpoweredSpawningShader = trap_R_RegisterShader("gfx/misc/unpowered_prebuild" );
- for( i = 0; i < CUBOID_CRACK_TEXTURES - 1; i++ )
- cgs.media.cuboidCracks[ i ] = trap_R_RegisterShader( va( "models/cuboid/cracks_%i", i ) );
+ cgs.media.cuboidCracks = trap_R_RegisterShader( "models/cuboid/cracks" );
cgs.media.cuboidModel = trap_R_RegisterModel( "models/cuboid/cuboid.md3" );
cgs.media.cuboidRedBuildShader = trap_R_RegisterShader( "gfx/cuboid/build_red" );
@@ -832,9 +869,30 @@ static void CG_RegisterGraphics( void )
cg.waitForCB = qfalse;
cg.cuboidValid = qfalse;
cg.latestCBNumber = 0;
+ VectorSet( cg.cuboidSelection, 30, 30, 30 );
+
+ // ckit...
+ cgs.media.ckitBackgroundShader = trap_R_RegisterShader( "gfx/ckit/background" );
+ cgs.media.ckitOverlayShader = trap_R_RegisterShader( "gfx/ckit/overlay" );
+
+ cgs.media.ckit_icon_bp = trap_R_RegisterShader( "gfx/ckit/icon_bp" );
+ cgs.media.ckit_icon_current = trap_R_RegisterShader( "gfx/ckit/icon_current" );
+ cgs.media.ckit_icon_depth = trap_R_RegisterShader( "gfx/ckit/icon_depth" );
+ cgs.media.ckit_icon_health = trap_R_RegisterShader( "gfx/ckit/icon_health" );
+ cgs.media.ckit_icon_height = trap_R_RegisterShader( "gfx/ckit/icon_height" );
+ cgs.media.ckit_icon_network = trap_R_RegisterShader( "gfx/ckit/icon_network" );
+ cgs.media.ckit_icon_nopower = trap_R_RegisterShader( "gfx/ckit/icon_nopower" );
+ cgs.media.ckit_icon_nosurge = trap_R_RegisterShader( "gfx/ckit/icon_nosurge" );
+ cgs.media.ckit_icon_off = trap_R_RegisterShader( "gfx/ckit/icon_off" );
+ cgs.media.ckit_icon_power = trap_R_RegisterShader( "gfx/ckit/icon_power" );
+ cgs.media.ckit_icon_storedbp = trap_R_RegisterShader( "gfx/ckit/icon_storedbp" );
+ cgs.media.ckit_icon_surge = trap_R_RegisterShader( "gfx/ckit/icon_surge" );
+ cgs.media.ckit_icon_time = trap_R_RegisterShader( "gfx/ckit/icon_time" );
+ cgs.media.ckit_icon_voltage = trap_R_RegisterShader( "gfx/ckit/icon_voltage" );
+ cgs.media.ckit_icon_width = trap_R_RegisterShader( "gfx/ckit/icon_width" );
for( i = 0; i < 15; i++ )
- cgs.media.splashLogo[ i ] = trap_R_RegisterShader( va( "cuboid/logo_%i.tga", i ) );
+ cgs.media.splashLogo[ i ] = trap_R_RegisterShader( va( "cuboid/logo_%i.tga", i ) );
cgs.media.splashLeft = trap_R_RegisterShader( "cuboid/logo_left.tga" );
cgs.media.splashRight = trap_R_RegisterShader( "cuboid/logo_right.tga" );
@@ -845,6 +903,21 @@ static void CG_RegisterGraphics( void )
for( i = 0; i < 8; i++ )
cgs.media.buildWeaponTimerPie[ i ] = trap_R_RegisterShader( buildWeaponTimerPieShaders[ i ] );
+ cgs.media.friendlyCrosshair = trap_R_RegisterShader( "gfx/2d/crosshair_friendly.tga" );
+ cgs.media.hitCrosshair = trap_R_RegisterShader( "gfx/2d/crosshair_hit.tga" );
+
+ cgs.media.ch_dot = trap_R_RegisterShader( "gfx/2d/ch_dot.tga" );
+ cgs.media.ch_dothit = trap_R_RegisterShader( "gfx/2d/ch_dothit.tga" );
+ cgs.media.ch_circle = trap_R_RegisterShader( "gfx/2d/ch_circle.tga" );
+ cgs.media.ch_circlehit = trap_R_RegisterShader( "gfx/2d/ch_circlehit.tga" );
+ cgs.media.ch_friendly = trap_R_RegisterShader( "gfx/2d/ch_friendly.tga" );
+
+ cgs.media.ch_adot = trap_R_RegisterShader( "gfx/2d/ch_adot.tga" );
+ cgs.media.ch_acircle = trap_R_RegisterShader( "gfx/2d/ch_acircle.tga" );
+ cgs.media.ch_afriendly = trap_R_RegisterShader( "gfx/2d/ch_afriendly.tga" );
+ cgs.media.ch_aheadshot = trap_R_RegisterShader( "gfx/2d/ch_aheadshot.tga" );
+
+
// player health cross shaders
cgs.media.healthCross = trap_R_RegisterShader( "ui/assets/neutral/cross.tga" );
cgs.media.healthCross2X = trap_R_RegisterShader( "ui/assets/neutral/cross2.tga" );
@@ -885,6 +958,8 @@ static void CG_RegisterGraphics( void )
cgs.media.humanBuildableBleedPS = CG_RegisterParticleSystem( "humanBuildableBleedPS");
cgs.media.alienBuildableBleedPS = CG_RegisterParticleSystem( "alienBuildableBleedPS" );
+ cgs.media.humanPowerZapPS = CG_RegisterParticleSystem( "humanPowerZapPS" );
+
cgs.media.alienBleedPS = CG_RegisterParticleSystem( "alienBleedPS" );
cgs.media.humanBleedPS = CG_RegisterParticleSystem( "humanBleedPS" );
@@ -1010,6 +1085,13 @@ static void CG_RegisterClients( void )
cgs.media.jetpackFlashModel = trap_R_RegisterModel( "models/players/human_base/jetpack_flash.md3" );
cgs.media.battpackModel = trap_R_RegisterModel( "models/players/human_base/battpack.md3" );
+ cgs.media.ckit_background = trap_R_RegisterModel( "models/weapons/ckit/ckit_background.md3" );
+ cgs.media.ckit_overlay = trap_R_RegisterModel( "models/weapons/ckit/ckit_overlay.md3" );
+ cgs.media.ckit_bigicona = trap_R_RegisterModel( "models/weapons/ckit/ckit_bigicona.md3" );
+ cgs.media.ckit_bigiconb = trap_R_RegisterModel( "models/weapons/ckit/ckit_bigiconb.md3" );
+ cgs.media.ckit_icon = trap_R_RegisterModel( "models/weapons/ckit/ckit_icon.md3" );
+ cgs.media.ckit_digit = trap_R_RegisterModel( "models/weapons/ckit/ckit_digit.md3" );
+
cg.charModelFraction = 1.0f;
trap_UpdateScreen( );
diff --git a/src/cgame/cg_playerstate.c b/src/cgame/cg_playerstate.c
index 242a3bb..f7c8074 100644
--- a/src/cgame/cg_playerstate.c
+++ b/src/cgame/cg_playerstate.c
@@ -271,6 +271,12 @@ void CG_CheckLocalSounds( playerState_t *ps, playerState_t *ops )
last = cg.time;
}
}
+
+ if( ps->persistant[ PERS_HITS ] != ops->persistant[ PERS_HITS ] )
+ {
+ trap_S_StartSound( NULL, cg.predictedPlayerState.clientNum, CHAN_AUTO, cgs.media.hitSound );
+ cg.lastHitTime = cg.time;
+ }
// if we are going into the intermission, don't start any voices
if( cg.intermissionStarted )
diff --git a/src/cgame/cg_servercmds.c b/src/cgame/cg_servercmds.c
index cf820c0..f9a173a 100644
--- a/src/cgame/cg_servercmds.c
+++ b/src/cgame/cg_servercmds.c
@@ -119,7 +119,6 @@ void CG_ParseServerinfo( void )
info = CG_ConfigString( CS_SERVERINFO );
cgs.timelimit = atoi( Info_ValueForKey( info, "timelimit" ) );
cgs.maxclients = atoi( Info_ValueForKey( info, "sv_maxclients" ) );
- cgs.markDeconstruct = atoi( Info_ValueForKey( info, "g_markDeconstruct" ) );
mapname = Info_ValueForKey( info, "mapname" );
Com_sprintf( cgs.mapname, sizeof( cgs.mapname ), "maps/%s.bsp", mapname );
}
@@ -661,13 +660,9 @@ void CG_Menu( int menu, int arg )
//===============================
case MN_H_NOBP:
- if( cgs.markDeconstruct )
- longMsg = "There is no power remaining. Free up power by marking "
- "existing buildable objects.";
- else
- longMsg = "There is no power remaining. Free up power by deconstructing "
- "existing buildable objects.";
- shortMsg = "There is no power remaining";
+ longMsg = "You don't have enough build points. Acquire more of them from "
+ "a Factory.";
+ shortMsg = "Insufficient build points";
type = DT_BUILD;
break;
diff --git a/src/cgame/cg_tutorial.c b/src/cgame/cg_tutorial.c
index 212db33..cb596b9 100644
--- a/src/cgame/cg_tutorial.c
+++ b/src/cgame/cg_tutorial.c
@@ -202,27 +202,9 @@ static void CG_AlienBuilderText( char *text, playerState_t *ps )
if( ( es = CG_BuildableInRange( ps, NULL ) ) )
{
- if( cgs.markDeconstruct )
- {
- if( es->eFlags & EF_B_MARKED )
- {
- Q_strcat( text, MAX_TUTORIAL_TEXT,
- va( "Press %s to unmark this structure for replacement\n",
- CG_KeyNameForCommand( "deconstruct" ) ) );
- }
- else
- {
- Q_strcat( text, MAX_TUTORIAL_TEXT,
- va( "Press %s to mark this structure for replacement\n",
- CG_KeyNameForCommand( "deconstruct" ) ) );
- }
- }
- else
- {
- Q_strcat( text, MAX_TUTORIAL_TEXT,
- va( "Press %s to destroy this structure\n",
- CG_KeyNameForCommand( "deconstruct" ) ) );
- }
+ Q_strcat( text, MAX_TUTORIAL_TEXT,
+ va( "Press %s to destroy this structure\n",
+ CG_KeyNameForCommand( "deconstruct" ) ) );
}
if( ( ps->stats[ STAT_BUILDABLE ] & ~SB_VALID_TOGGLEBIT ) == BA_NONE )
@@ -378,27 +360,9 @@ static void CG_HumanCkitText( char *text, playerState_t *ps )
if( ( es = CG_BuildableInRange( ps, NULL ) ) )
{
- if( cgs.markDeconstruct )
- {
- if( es->eFlags & EF_B_MARKED )
- {
- Q_strcat( text, MAX_TUTORIAL_TEXT,
- va( "Press %s to unmark this structure\n",
- CG_KeyNameForCommand( "deconstruct" ) ) );
- }
- else
- {
- Q_strcat( text, MAX_TUTORIAL_TEXT,
- va( "Press %s to mark this structure\n",
- CG_KeyNameForCommand( "deconstruct" ) ) );
- }
- }
- else
- {
- Q_strcat( text, MAX_TUTORIAL_TEXT,
- va( "Press %s to destroy this structure\n",
- CG_KeyNameForCommand( "deconstruct" ) ) );
- }
+ Q_strcat( text, MAX_TUTORIAL_TEXT,
+ va( "Press %s to destroy this structure\n",
+ CG_KeyNameForCommand( "deconstruct" ) ) );
}
}
diff --git a/src/cgame/cg_weapons.c b/src/cgame/cg_weapons.c
index 7e22baf..b3dd4c7 100644
--- a/src/cgame/cg_weapons.c
+++ b/src/cgame/cg_weapons.c
@@ -605,15 +605,27 @@ static qboolean CG_ParseWeaponFile( const char *filename, weaponInfo_t *wi )
if( size < 0 )
size = 0;
+ wi->crossHairSize = size;
+
token = COM_Parse( &text_p );
if( !token )
break;
- wi->crossHair = trap_R_RegisterShader( token );
- wi->crossHairSize = size;
-
- if( !wi->crossHair )
- CG_Printf( S_COLOR_RED "ERROR: weapon crosshair not found %s\n", token );
+ if( !Q_stricmp( token, "none" ) )
+ wi->crossHairType = CH_NONE;
+ else if( !Q_stricmp( token, "dot" ) )
+ wi->crossHairType = CH_DOT;
+ else if( !Q_stricmp( token, "circle" ) )
+ wi->crossHairType = CH_CIRCLE;
+ else if( !Q_stricmp( token, "circleddot" ) )
+ wi->crossHairType = CH_CIRCLEDDOT;
+ else if( !Q_stricmp( token, "alien" ) )
+ wi->crossHairType = CH_ALIEN;
+ else
+ {
+ Com_Printf( S_COLOR_YELLOW "WARNING: unknown cross hair type '%s'\n", token );
+ wi->crossHairType = CH_NONE;
+ }
continue;
}
@@ -869,6 +881,180 @@ static float CG_MachinegunSpinAngle( centity_t *cent, qboolean firing )
return angle;
}
+/*
+=============
+CG_GenerateCKitDisplay
+
+Figures out what should be displayed on the CKit's display
+=============
+*/
+static void CG_GenerateCKitDisplay( void )
+{
+ int row = 0;
+ ckitDisplay_t *cd = &cg.ckitDisp;
+ entityState_t *es;
+ playerState_t *ps = &cg.predictedPlayerState;
+ qboolean target = qfalse; // true if looking at something
+ qboolean player = qfalse; // true if looking at a player (buildable otherwise)
+ int buildable; // buildable type
+ qboolean probing = qfalse; // measures voltages and currents
+ int powerNetwork;
+ int probeEntity;
+ qboolean building; // displays buildable's info
+ qboolean cuboid; // true if building cuboid
+ const buildableAttributes_t *battr;
+ int buildTimer;
+
+ memset( &cg.ckitDisp, 0, sizeof( cg.ckitDisp ) );
+
+ /*
+ part 1: figure out what we're dealing with
+ */
+
+ powerNetwork = ( ps->misc[ MISC_INFOHEAD ] & 1023 );
+
+ probeEntity = ( ps->misc[ MISC_INFOHEAD ] >> 10 ) & 1023;
+ if( probeEntity != 1023 )
+ {
+ target = qtrue;
+ if( probeEntity < MAX_CLIENTS )
+ {
+ target = qtrue;
+ player = qtrue;
+ probing = ( cg.crosshairClientNum == probeEntity );
+ }
+ else
+ probing = ( cg.crosshairBuildable == probeEntity );
+
+ es = &cg_entities[ probeEntity ].currentState;
+ }
+
+ buildable = cg.predictedPlayerState.stats[ STAT_BUILDABLE ] &~ SB_VALID_TOGGLEBIT;
+ building = ( buildable != BA_NONE );
+ if( building )
+ {
+ battr = BG_Buildable( buildable, cg.cuboidSelection );
+ cuboid = battr->cuboid;
+ }
+
+ buildTimer = ps->stats[ STAT_MISC ];
+
+ /*
+ part 2: set up icons & text
+ */
+
+ cd->background = cgs.media.ckitBackgroundShader;
+
+ // first big icon indicates if power is available
+ if( powerNetwork )
+ cd->bigicona = cgs.media.ckit_icon_power;
+ else
+ cd->bigicona = cgs.media.ckit_icon_nopower;
+
+ // second big icon always shows the building's state
+ if( target && !player )
+ cd->bigiconb = CG_BuildablePowerStatusIcon( es );
+
+ if( building )
+ {
+ if( cuboid )
+ {
+ //width
+ cd->lines[ row ].icon = cgs.media.ckit_icon_width;
+ Com_sprintf( cd->lines[ row++ ].text, MAX_CKIT_TEXT, "%.1f", cg.cuboidSelection[ 0 ] );
+
+ //height
+ cd->lines[ row ].icon = cgs.media.ckit_icon_depth;
+ Com_sprintf( cd->lines[ row++ ].text, MAX_CKIT_TEXT, "%.1f", cg.cuboidSelection[ 1 ] );
+
+ //depth
+ cd->lines[ row ].icon = cgs.media.ckit_icon_height;
+ Com_sprintf( cd->lines[ row++ ].text, MAX_CKIT_TEXT, "%.1f", cg.cuboidSelection[ 2 ] );
+ }
+
+ //build points
+ cd->lines[ row ].icon = cgs.media.ckit_icon_bp;
+ Com_sprintf( cd->lines[ row++ ].text, MAX_CKIT_TEXT, "%i", battr->buildPoints );
+
+ //health
+ cd->lines[ row ].icon = cgs.media.ckit_icon_health;
+ Com_sprintf( cd->lines[ row++ ].text, MAX_CKIT_TEXT, "%i", battr->health );
+
+ //build time
+ cd->lines[ row ].icon = cgs.media.ckit_icon_time;
+ Com_sprintf( cd->lines[ row++ ].text, MAX_CKIT_TEXT, "%.1f", 0.001f * battr->buildTime );
+ }
+ else
+ {
+ if( buildTimer )
+ {
+ //build timer
+ cd->lines[ row ].icon = cgs.media.ckit_icon_time;
+ Com_sprintf( cd->lines[ row++ ].text, MAX_CKIT_TEXT, "%.1f", 0.001f * buildTimer );
+ }
+
+ // power network detector
+ cd->lines[ row ].icon = cgs.media.ckit_icon_network;
+ if( powerNetwork )
+ Com_sprintf( cd->lines[ row++ ].text, MAX_CKIT_TEXT, "%i", powerNetwork );
+ else
+ Com_sprintf( cd->lines[ row++ ].text, MAX_CKIT_TEXT, "--------------------" );
+
+
+ if( target )
+ {
+ battr = BG_Buildable( es->modelindex, es->angles );
+
+ if( probing )
+ {
+ if( !player )
+ {
+ // ammeter
+ cd->lines[ row ].icon = cgs.media.ckit_icon_current;
+ Com_sprintf( cd->lines[ row++ ].text, MAX_CKIT_TEXT, "%.2f", 0.001f * ps->misc[ MISC_INFO1 ] );
+
+ // voltmeter
+ cd->lines[ row ].icon = cgs.media.ckit_icon_voltage;
+ Com_sprintf( cd->lines[ row++ ].text, MAX_CKIT_TEXT, "%.2f", 0.001f * ps->misc[ MISC_INFO2 ] );
+
+ // stored BP
+ if( BG_Buildable( es->modelindex, NULL )->hasStorage )
+ {
+ cd->lines[ row ].icon = cgs.media.ckit_icon_storedbp;
+ Com_sprintf( cd->lines[ row++ ].text, MAX_CKIT_TEXT, "%.1f", 0.1f * ps->misc[ MISC_INFO3 ] );
+ }
+ }
+ else
+ {
+ // health
+ cd->lines[ row ].icon = cgs.media.ckit_icon_health;
+ Com_sprintf( cd->lines[ row++ ].text, MAX_CKIT_TEXT, "%i", ps->misc[ MISC_INFO1 ] );
+
+ // stored BP
+ if( ps->misc[ MISC_INFO3 ] != -1 )
+ {
+ cd->lines[ row ].icon = cgs.media.ckit_icon_storedbp;
+ Com_sprintf( cd->lines[ row++ ].text, MAX_CKIT_TEXT, "%i", ps->misc[ MISC_INFO2 ] );
+ }
+ }
+ }
+
+ if( !player )
+ {
+ //health
+ cd->lines[ row ].icon = cgs.media.ckit_icon_health;
+ if( battr->cuboid )
+ Com_sprintf( cd->lines[ row++ ].text, MAX_CKIT_TEXT, "%i", es->constantLight );
+ else
+ Com_sprintf( cd->lines[ row++ ].text, MAX_CKIT_TEXT, "%i", es->generic1 );
+
+ //build points
+ cd->lines[ row ].icon = cgs.media.ckit_icon_bp;
+ Com_sprintf( cd->lines[ row++ ].text, MAX_CKIT_TEXT, "%i", battr->buildPoints );
+ }
+ }
+ }
+}
/*
=============
@@ -1033,6 +1219,100 @@ void CG_AddPlayerWeapon( refEntity_t *parent, playerState_t *ps, centity_t *cent
CG_DestroyParticleSystem( &cent->muzzlePS );
}
+ // NOTE: this thing is full of magic numbers - they were determined by trial and error, do not modify
+ if( ps && weaponNum == WP_HBUILD )
+ {
+ refEntity_t ent;
+ vec3_t origin;
+ float y;
+ int i, j, l;
+
+ CG_GenerateCKitDisplay( );
+
+ memset( &ent, 0, sizeof( ent ) );
+ ent.renderfx = parent->renderfx;
+ CG_PositionEntityOnTag( &ent, parent, parent->hModel, "tag_weapon" );
+
+ // offset it a bit
+ VectorMA( ent.origin, -0.1f, ent.axis[ 0 ], ent.origin );
+
+ // background
+ if( ( ent.customShader = cg.ckitDisp.background ) )
+ {
+ ent.hModel = cgs.media.ckit_background;
+ trap_R_AddRefEntityToScene( &ent );
+ }
+
+ // overlay
+ ent.hModel = cgs.media.ckit_overlay;
+ ent.customShader = cgs.media.ckitOverlayShader;
+ trap_R_AddRefEntityToScene( &ent );
+
+ // big icons
+ if( ( ent.customShader = cg.ckitDisp.bigicona ) )
+ {
+ ent.hModel = cgs.media.ckit_bigicona;
+ trap_R_AddRefEntityToScene( &ent );
+ }
+
+ if( ( ent.customShader = cg.ckitDisp.bigiconb ) )
+ {
+ ent.hModel = cgs.media.ckit_bigiconb;
+ trap_R_AddRefEntityToScene( &ent );
+ }
+
+ // backup the origin
+ VectorCopy( ent.origin, origin );
+
+ // draw all 6 rows
+ for( y = 0.0f, i = 0; i < MAX_CKIT_ROWS; i++, y += -0.48f )
+ {
+ VectorMA( origin, y * 0.42f, ent.axis[ 0 ], ent.origin );
+ VectorMA( ent.origin, y, ent.axis[ 2 ], ent.origin );
+
+ if( ( ent.customShader = cg.ckitDisp.lines[ i ].icon ) )
+ {
+ ent.hModel = cgs.media.ckit_icon;
+ trap_R_AddRefEntityToScene( &ent );
+ }
+
+ ent.hModel = cgs.media.ckit_digit;
+ l = strlen( cg.ckitDisp.lines[ i ].text );
+
+ if( l > MAX_CKIT_COLUMNS )
+ l = MAX_CKIT_COLUMNS;
+
+ VectorMA( ent.origin, -0.3f * ( MAX_CKIT_COLUMNS - l - 1 ), ent.axis[ 1 ], ent.origin );
+
+ for( j = 0; j < l && j < MAX_CKIT_COLUMNS; j++ )
+ {
+ int index;
+ char ch;
+
+ ch = cg.ckitDisp.lines[ i ].text[ j ];
+
+ if( ch >= '0' && ch <= '9' )
+ index = ch - '0';
+ else if( ch == '-' )
+ index = 10;
+ else if( ch == '.' )
+ index = 11;
+ else
+ index = 0;
+
+ if( random() > 0.995f )
+ {
+ index += (int)( random() * 11 );
+ index %= 11;
+ }
+
+ ent.customShader = cgs.media.digitalNumberShaders[ index ];
+ VectorMA( ent.origin, -0.3f, ent.axis[ 1 ], ent.origin );
+ trap_R_AddRefEntityToScene( &ent );
+ }
+ }
+ }
+
// add the flash
if( !weapon->wim[ weaponMode ].continuousFlash || !firing )
{
@@ -1124,7 +1404,7 @@ void CG_AddViewWeapon( playerState_t *ps )
weaponInfo_t *wi;
weapon_t weapon = ps->weapon;
weaponMode_t weaponMode = ps->generic1;
- vec3_t cuboidSize;
+ vec3_t cuboidSize;
// no weapon carried - can't draw it
if( weapon == WP_NONE )
diff --git a/src/game/bg_misc.c b/src/game/bg_misc.c
index a416ecb..ca443f2 100644
--- a/src/game/bg_misc.c
+++ b/src/game/bg_misc.c
@@ -69,7 +69,8 @@ static const buildableAttributes_t bg_buildableList[ ] =
qfalse, //qboolean transparentTest;
qfalse, //qboolean uniqueTest;
ASPAWN_VALUE, //int value;
- qfalse //qboolean cuboid;
+ qfalse, //qboolean cuboid;
+ DEFAULT_POWER_SETTINGS
},
{
BA_A_OVERMIND, //int buildNum;
@@ -105,7 +106,8 @@ static const buildableAttributes_t bg_buildableList[ ] =
qfalse, //qboolean transparentTest;
qtrue, //qboolean uniqueTest;
OVERMIND_VALUE, //int value;
- qfalse //qboolean cuboid;
+ qfalse, //qboolean cuboid;
+ DEFAULT_POWER_SETTINGS
},
{
BA_A_BARRICADE, //int buildNum;
@@ -141,7 +143,8 @@ static const buildableAttributes_t bg_buildableList[ ] =
qfalse, //qboolean transparentTest;
qfalse, //qboolean uniqueTest;
BARRICADE_VALUE, //int value;
- qfalse //qboolean cuboid;
+ qfalse, //qboolean cuboid;
+ DEFAULT_POWER_SETTINGS
},
{
BA_A_ACIDTUBE, //int buildNum;
@@ -177,7 +180,8 @@ static const buildableAttributes_t bg_buildableList[ ] =
qfalse, //qboolean transparentTest;
qfalse, //qboolean uniqueTest;
ACIDTUBE_VALUE, //int value;
- qfalse //qboolean cuboid;
+ qfalse, //qboolean cuboid;
+ DEFAULT_POWER_SETTINGS
},
{
BA_A_TRAPPER, //int buildNum;
@@ -213,7 +217,8 @@ static const buildableAttributes_t bg_buildableList[ ] =
qtrue, //qboolean transparentTest;
qfalse, //qboolean uniqueTest;
TRAPPER_VALUE, //int value;
- qfalse //qboolean cuboid;
+ qfalse, //qboolean cuboid;
+ DEFAULT_POWER_SETTINGS
},
{
BA_A_BOOSTER, //int buildNum;
@@ -250,7 +255,8 @@ static const buildableAttributes_t bg_buildableList[ ] =
qtrue, //qboolean transparentTest;
qfalse, //qboolean uniqueTest;
BOOSTER_VALUE, //int value;
- qfalse //qboolean cuboid;
+ qfalse, //qboolean cuboid;
+ DEFAULT_POWER_SETTINGS
},
{
BA_A_HIVE, //int buildNum;
@@ -285,7 +291,8 @@ static const buildableAttributes_t bg_buildableList[ ] =
qfalse, //qboolean transparentTest;
qfalse, //qboolean uniqueTest;
HIVE_VALUE, //int value;
- qfalse //qboolean cuboid;
+ qfalse, //qboolean cuboid;
+ DEFAULT_POWER_SETTINGS
},
{
BA_H_SPAWN, //int buildNum;
@@ -321,7 +328,8 @@ static const buildableAttributes_t bg_buildableList[ ] =
qtrue, //qboolean transparentTest;
qfalse, //qboolean uniqueTest;
HSPAWN_VALUE, //int value;
- qfalse //qboolean cuboid;
+ qfalse, //qboolean cuboid;
+ DEFAULT_POWER_SETTINGS
},
{
BA_H_MGTURRET, //int buildNum;
@@ -357,7 +365,12 @@ static const buildableAttributes_t bg_buildableList[ ] =
qtrue, //qboolean transparentTest;
qfalse, //qboolean uniqueTest;
MGTURRET_VALUE, //int value;
- qfalse //qboolean cuboid;
+ qfalse, //qboolean cuboid;
+ qfalse, //qboolean isPowerSource;
+ qtrue, //qboolean requiresPower;
+ MGTURRET_R_IDLE, //float resistance;
+ MGTURRET_R_ACTIVE, //float surgeResistance;
+ qfalse //qboolean hasStorage;
},
{
BA_H_TESLAGEN, //int buildNum;
@@ -393,7 +406,12 @@ static const buildableAttributes_t bg_buildableList[ ] =
qtrue, //qboolean transparentTest;
qfalse, //qboolean uniqueTest;
TESLAGEN_VALUE, //int value;
- qfalse //qboolean cuboid;
+ qfalse, //qboolean cuboid;
+ qfalse, //qboolean isPowerSource;
+ qtrue, //qboolean requiresPower;
+ TESLAGEN_R_IDLE, //float resistance;
+ TESLAGEN_R_ACTIVE, //float surgeResistance;
+ qfalse //qboolean hasStorage;
},
{
BA_H_ARMOURY, //int buildNum;
@@ -429,7 +447,12 @@ static const buildableAttributes_t bg_buildableList[ ] =
qfalse, //qboolean transparentTest;
qfalse, //qboolean uniqueTest;
ARMOURY_VALUE, //int value;
- qfalse //qboolean cuboid;
+ qfalse, //qboolean cuboid;
+ qfalse, //qboolean isPowerSource;
+ qtrue, //qboolean requiresPower;
+ ARMOURY_RESISTANCE, //float resistance;
+ ARMOURY_RESISTANCE, //float surgeResistance;
+ qfalse //qboolean hasStorage;
},
{
BA_H_DCC, //int buildNum;
@@ -465,7 +488,12 @@ static const buildableAttributes_t bg_buildableList[ ] =
qfalse, //qboolean transparentTest;
qfalse, //qboolean uniqueTest;
DC_VALUE, //int value;
- qfalse //qboolean cuboid;
+ qfalse, //qboolean cuboid;
+ qfalse, //qboolean isPowerSource;
+ qtrue, //qboolean requiresPower;
+ DC_R_IDLE, //float resistance;
+ DC_R_ACTIVE, //float surgeResistance;
+ qfalse //qboolean hasStorage;
},
{
BA_H_MEDISTAT, //int buildNum;
@@ -502,20 +530,24 @@ static const buildableAttributes_t bg_buildableList[ ] =
qtrue, //qboolean transparentTest;
qfalse, //qboolean uniqueTest;
MEDISTAT_VALUE, //int value;
- qfalse //qboolean cuboid;
+ qfalse, //qboolean cuboid;
+ qfalse, //qboolean isPowerSource;
+ qtrue, //qboolean requiresPower;
+ MEDISTAT_R_IDLE, //float resistance;
+ MEDISTAT_R_ACTIVE, //float surgeResistance;
+ qfalse //qboolean hasStorage;
},
{
BA_H_REACTOR, //int buildNum;
"reactor", //char *buildName;
"Reactor", //char *humanName;
- "All structures except the telenode rely on a reactor to operate. "
- "The reactor provides power for all the human structures either "
- "directly or via repeaters. Only one reactor can be built at a time.",
- "team_human_reactor", //char *entityName;
+ "A large nuclear generator, able to power substantial amounts of "
+ "structures.",
+ "team_human_reactor_big", //char *entityName;
TR_GRAVITY, //trType_t traj;
0.0, //float bounce;
REACTOR_BP, //int buildPoints;
- ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages
+ ( 1 << S3 ), //int stages
REACTOR_HEALTH, //int health;
0, //int regenRate;
REACTOR_SPLASHDAMAGE, //int splashDamage;
@@ -536,9 +568,14 @@ static const buildableAttributes_t bg_buildableList[ ] =
0, //int creepSize;
qfalse, //qboolean dccTest;
qfalse, //qboolean transparentTest;
- qtrue, //qboolean uniqueTest;
+ qfalse, //qboolean uniqueTest;
REACTOR_VALUE, //int value;
- qfalse //qboolean cuboid;
+ qfalse, //qboolean cuboid;
+ qtrue, //qboolean isPowerSource;
+ qfalse, //qboolean requiresPower;
+ REACTOR_RESISTANCE, //float resistance;
+ REACTOR_RESISTANCE, //float surgeResistance;
+ qfalse //qboolean hasStorage;
},
{
BA_H_REPEATER, //int buildNum;
@@ -574,7 +611,135 @@ static const buildableAttributes_t bg_buildableList[ ] =
qfalse, //qboolean transparentTest;
qfalse, //qboolean uniqueTest;
REPEATER_VALUE, //int value;
- qfalse //qboolean cuboid;
+ qfalse, //qboolean cuboid;
+ DEFAULT_POWER_SETTINGS
+ },
+ {
+ BA_H_CAPBANK, //int buildNum;
+ "capbank", //char *buildName;
+ "Capacitor Bank", //char *humanName;
+ "A bank of capacitors able to compensate for "
+ "fluctations in the power network or even power "
+ "the network in the absence of a Reactor.",
+ "team_human_capbank", //char *entityName;
+ TR_GRAVITY, //trType_t traj;
+ 0.0, //float bounce;
+ CAPBANK_BP, //int buildPoints;
+ ( 1 << S2 )|( 1 << S3 ), //int stages
+ CAPBANK_HEALTH, //int health;
+ 0, //int regenRate;
+ CAPBANK_SPLASHDAMAGE, //int splashDamage;
+ CAPBANK_SPLASHRADIUS, //int splashRadius;
+ MOD_HSPAWN, //int meansOfDeath;
+ TEAM_HUMANS, //int team;
+ ( 1 << WP_HBUILD ), //weapon_t buildWeapon;
+ BANIM_IDLE1, //int idleAnim;
+ 100, //int nextthink;
+ CAPBANK_BT, //int buildTime;
+ qtrue, //qboolean usable;
+ 0, //int turretRange;
+ 0, //int turretFireSpeed;
+ WP_NONE, //weapon_t turretProjType;
+ 0.95f, //float minNormal;
+ qfalse, //qboolean invertNormal;
+ qfalse, //qboolean creepTest;
+ 0, //int creepSize;
+ qfalse, //qboolean dccTest;
+ qfalse, //qboolean transparentTest;
+ qfalse, //qboolean uniqueTest;
+ CAPBANK_VALUE, //int value;
+ qfalse, //qboolean cuboid;
+ qtrue, //qboolean isPowerSource;
+ qfalse, //qboolean requiresPower;
+ CAPBANK_RESISTANCE, //float resistance;
+ CAPBANK_RESISTANCE, //float surgeResistance;
+ qfalse //qboolean hasStorage;
+ },
+ {
+ BA_H_RTG, //int buildNum;
+ "rtg", //char *buildName;
+ "RTG Unit", //char *humanName;
+ "A portable all-in-one device, featuring a "
+ "radioisotope thermoelectric generator and a "
+ "miniaturized version of the Refinery. Does not "
+ "require power to be built. ^2First RTG Unit does "
+ "not require build points!",
+ "team_human_reactor", //char *entityName;
+ TR_GRAVITY, //trType_t traj;
+ 0.0, //float bounce;
+ RTG_BP, //int buildPoints;
+ ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages
+ RTG_HEALTH, //int health;
+ 0, //int regenRate;
+ RTG_SPLASHDAMAGE, //int splashDamage;
+ RTG_SPLASHRADIUS, //int splashRadius;
+ MOD_HSPAWN, //int meansOfDeath;
+ TEAM_HUMANS, //int team;
+ ( 1 << WP_HBUILD ), //weapon_t buildWeapon;
+ BANIM_IDLE1, //int idleAnim;
+ 500, //int nextthink;
+ RTG_BT, //int buildTime;
+ qtrue, //qboolean usable;
+ 0, //int turretRange;
+ 0, //int turretFireSpeed;
+ WP_NONE, //weapon_t turretProjType;
+ 0.95f, //float minNormal;
+ qfalse, //qboolean invertNormal;
+ qfalse, //qboolean creepTest;
+ 0, //int creepSize;
+ qfalse, //qboolean dccTest;
+ qfalse, //qboolean transparentTest;
+ qfalse, //qboolean uniqueTest;
+ RTG_VALUE, //int value;
+ qfalse, //qboolean cuboid;
+ qtrue, //qboolean isPowerSource;
+ qfalse, //qboolean requiresPower;
+ RTG_RESISTANCE, //float resistance;
+ RTG_RESISTANCE, //float surgeResistance;
+ qtrue //qboolean hasStorage;
+ },
+ {
+ BA_H_REFINERY, //int buildNum;
+ "refinery", //char *buildName;
+ "Refinery", //char *humanName;
+ "A portable all-in-one device, featuring a "
+ "radioisotope thermoelectric generator and a "
+ "miniaturized version of the Refinery. Does not "
+ "require power to be built. ^1This is the first "
+ "buildable to be built.",
+ "team_human_refinery", //char *entityName;
+ TR_GRAVITY, //trType_t traj;
+ 0.0, //float bounce;
+ REFINERY_BP, //int buildPoints;
+ ( 1 << S2 )|( 1 << S3 ), //int stages
+ REFINERY_HEALTH, //int health;
+ 0, //int regenRate;
+ REFINERY_SPLASHDAMAGE, //int splashDamage;
+ REFINERY_SPLASHRADIUS, //int splashRadius;
+ MOD_HSPAWN, //int meansOfDeath;
+ TEAM_HUMANS, //int team;
+ ( 1 << WP_HBUILD ), //weapon_t buildWeapon;
+ BANIM_IDLE1, //int idleAnim;
+ 500, //int nextthink;
+ REFINERY_BT, //int buildTime;
+ qtrue, //qboolean usable;
+ 0, //int turretRange;
+ 0, //int turretFireSpeed;
+ WP_NONE, //weapon_t turretProjType;
+ 0.95f, //float minNormal;
+ qfalse, //qboolean invertNormal;
+ qfalse, //qboolean creepTest;
+ 0, //int creepSize;
+ qfalse, //qboolean dccTest;
+ qfalse, //qboolean transparentTest;
+ qfalse, //qboolean uniqueTest;
+ REFINERY_VALUE, //int value;
+ qfalse, //qboolean cuboid;
+ qfalse, //qboolean isPowerSource;
+ qtrue, //qboolean requiresPower;
+ REFINERY_R_IDLE, //float resistance;
+ REFINERY_R_ACTIVE, //float surgeResistance;
+ qtrue //qboolean hasStorage;
},
{
BA_H_CUBOID1, //int buildNum;
@@ -610,7 +775,8 @@ static const buildableAttributes_t bg_buildableList[ ] =
qfalse, //qboolean transparentTest;
qfalse, //qboolean uniqueTest;
0, //int value;
- qtrue //qboolean cuboid;
+ qtrue, //qboolean cuboid;
+ DEFAULT_POWER_SETTINGS
},
{
BA_H_CUBOID2, //int buildNum;
@@ -618,13 +784,13 @@ static const buildableAttributes_t bg_buildableList[ ] =
"Glass", //char *humanName;
"A cuboid made of a transparent chemical compound. "
"Its durability is low compared to other glass-like "
- "materials. However it has shown increased strenght "
+ "materials. However it has shown increased strength "
"when formed into a thin pane shape.",
"team_human_hcuboid2", //char *entityName;
TR_GRAVITY, //trType_t traj;
0.0, //float bounce;
0, //int buildPoints;
- ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages
+ ( 1 << S2 )|( 1 << S3 ), //int stages
0, //int health;
0, //int regenRate;
0, //int splashDamage;
@@ -647,7 +813,8 @@ static const buildableAttributes_t bg_buildableList[ ] =
qfalse, //qboolean transparentTest;
qfalse, //qboolean uniqueTest;
0, //int value;
- qtrue //qboolean cuboid;
+ qtrue, //qboolean cuboid;
+ DEFAULT_POWER_SETTINGS
},
{
BA_H_CUBOID3, //int buildNum;
@@ -661,7 +828,7 @@ static const buildableAttributes_t bg_buildableList[ ] =
TR_GRAVITY, //trType_t traj;
0.0, //float bounce;
0, //int buildPoints;
- ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages
+ ( 1 << S3 ), //int stages
0, //int health;
0, //int regenRate;
0, //int splashDamage;
@@ -684,7 +851,8 @@ static const buildableAttributes_t bg_buildableList[ ] =
qfalse, //qboolean transparentTest;
qfalse, //qboolean uniqueTest;
0, //int value;
- qtrue //qboolean cuboid;
+ qtrue, //qboolean cuboid;
+ DEFAULT_POWER_SETTINGS
},
{
BA_A_CUBOID1, //int buildNum;
@@ -720,7 +888,8 @@ static const buildableAttributes_t bg_buildableList[ ] =
qfalse, //qboolean transparentTest;
qfalse, //qboolean uniqueTest;
0, //int value;
- qtrue //qboolean cuboid;
+ qtrue, //qboolean cuboid;
+ DEFAULT_POWER_SETTINGS
},
{
BA_A_CUBOID2, //int buildNum;
@@ -735,7 +904,7 @@ static const buildableAttributes_t bg_buildableList[ ] =
TR_GRAVITY, //trType_t traj;
0.0, //float bounce;
0, //int buildPoints;
- ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages
+ ( 1 << S2 )|( 1 << S3 ), //int stages
0, //int health;
0, //int regenRate;
0, //int splashDamage;
@@ -758,7 +927,8 @@ static const buildableAttributes_t bg_buildableList[ ] =
qfalse, //qboolean transparentTest;
qfalse, //qboolean uniqueTest;
0, //int value;
- qtrue //qboolean cuboid;
+ qtrue, //qboolean cuboid;
+ DEFAULT_POWER_SETTINGS
}
};
@@ -1283,7 +1453,7 @@ static const classAttributes_t bg_classList[ ] =
80, //int steptime;
LEVEL2_SPEED, //float speed;
10.0f, //float acceleration;
- 3.0f, //float airAcceleration;
+ 2.0f, //float airAcceleration;
6.0f, //float friction;
100.0f, //float stopSpeed;
380.0f, //float jumpMagnitude;
@@ -1310,7 +1480,7 @@ static const classAttributes_t bg_classList[ ] =
80, //int steptime;
LEVEL2_UPG_SPEED, //float speed;
10.0f, //float acceleration;
- 3.0f, //float airAcceleration;
+ 2.0f, //float airAcceleration;
6.0f, //float friction;
100.0f, //float stopSpeed;
380.0f, //float jumpMagnitude;
@@ -1419,9 +1589,9 @@ static const classAttributes_t bg_classList[ ] =
0.002f, //float bob;
1.0f, //float bobCycle;
100, //int steptime;
- 1.0f, //float speed;
+ 1.1f, //float speed;
10.0f, //float acceleration;
- 1.0f, //float airAcceleration;
+ 1.5f, //float airAcceleration;
6.0f, //float friction;
100.0f, //float stopSpeed;
220.0f, //float jumpMagnitude;
@@ -4301,7 +4471,7 @@ const cuboidAttributes_t BG_CuboidTypes [] =
80, // float hppv
CBHPT_PLAIN, // int hpt
3.0, // float bppv
- 20, // int buildrate
+ 30, // int buildrate
5000, // int minbt
qfalse, // qboolean regen;
0, // int regenspeed
@@ -4325,7 +4495,7 @@ const cuboidAttributes_t BG_CuboidTypes [] =
52, // float hppv
CBHPT_PANES, // int hpt
1.5, // float bppv
- 15, // int buildrate
+ 25, // int buildrate
6500, // int minbt
qfalse, // qboolean regen;
0, // int regenspeed
@@ -4349,7 +4519,7 @@ const cuboidAttributes_t BG_CuboidTypes [] =
50, // float hppv
CBHPT_PLAIN, // int hpt
4.0, // float bppv
- 10, // int buildrate
+ 15, // int buildrate
8000, // int minbt
qfalse, // qboolean regen;
0, // int regenspeed
diff --git a/src/game/bg_public.h b/src/game/bg_public.h
index e06015d..cbaf90a 100644
--- a/src/game/bg_public.h
+++ b/src/game/bg_public.h
@@ -280,12 +280,11 @@ typedef enum
PERS_CREDIT, // human credit
PERS_QUEUEPOS, // position in the spawn queue
PERS_NEWWEAPON, // weapon to switch to
- PERS_BP,
- PERS_MARKEDBP,
+ PERS_BUILDPOINTS,
//zdrytchx: no space in stats, use persistant. This meanas we risk doing a double jump upon spawning but death animations are 1700 msecs long, so technically it's impossible anyway
PERS_JUMPTIME,
PERS_SPAWNS_IMPLANTED
- // netcode has space for 1 more
+ // netcode has space for 2 more
} persEnum_t;
#define PS_WALLCLIMBINGFOLLOW 0x00000001
@@ -293,6 +292,21 @@ typedef enum
#define PS_NONSEGMODEL 0x00000004
#define PS_SPRINTTOGGLE 0x00000008
+// player_state->misc[] indexes
+typedef enum
+{
+ MISC_INFOHEAD,
+ MISC_INFO1,
+ MISC_INFO2,
+ MISC_INFO3,
+
+ MISC_CUBOID_X,
+ MISC_CUBOID_Y,
+ MISC_CUBOID_Z
+
+ // netcode has space for 10 more
+} miscEnum_t;
+
// entityState_t->eFlags
// notice that some flags are overlapped, so their meaning depends on context
#define EF_DEAD 0x0001 // don't draw a foe marker over players with EF_DEAD
@@ -307,7 +321,7 @@ typedef enum
// buildable flags:
#define EF_B_SPAWNED 0x0008
#define EF_B_POWERED 0x0010
-#define EF_B_MARKED 0x0020
+#define EF_B_SURGE 0x0020 // note: enabled/disabled for Repeaters
#define EF_WARN_CHARGE 0x0020 // Lucifer Cannon is about to overcharge
#define EF_WALLCLIMB 0x0040 // wall walking
@@ -438,6 +452,10 @@ typedef enum
BA_H_REACTOR,
BA_H_REPEATER,
+ BA_H_CAPBANK,
+ BA_H_RTG,
+
+ BA_H_REFINERY,
//cuboids must stay in a block
#define CUBOID_FIRST BA_H_CUBOID1
@@ -581,7 +599,10 @@ typedef enum
EV_ALIEN_HATCH_FAILURE, // when it doesns't work
EV_JETPACK_DEACTIVATE,
- EV_JETPACK_REFUEL
+ EV_JETPACK_REFUEL,
+
+ EV_POWER_SWITCH,
+ EV_POWER_ZAP
} entity_event_t;
@@ -1068,9 +1089,17 @@ typedef struct
qboolean transparentTest;
qboolean uniqueTest;
- int value;
+ int value;
qboolean cuboid;
+
+ //power grid features
+ qboolean isPowerSource;
+ qboolean requiresPower;
+ float resistance;
+ float surgeResistance;
+
+ qboolean hasStorage;
} buildableAttributes_t;
typedef struct
diff --git a/src/game/g_active.c b/src/game/g_active.c
index 1fa0caa..95f00d6 100644
--- a/src/game/g_active.c
+++ b/src/game/g_active.c
@@ -682,20 +682,6 @@ void ClientTimerActions( gentity_t *ent, int msec )
client->ps.stats[ STAT_BUILDABLE ] |= SB_VALID_TOGGLEBIT;
else
client->ps.stats[ STAT_BUILDABLE ] &= ~SB_VALID_TOGGLEBIT;
-
- // Let the client know which buildables will be removed by building
- for( i = 0; i < MAX_MISC; i++ )
- {
- if( i < level.numBuildablesForRemoval )
- client->ps.misc[ i ] = level.markedBuildables[ i ]->s.number;
- else
- client->ps.misc[ i ] = 0;
- }
- }
- else
- {
- for( i = 0; i < MAX_MISC; i++ )
- client->ps.misc[ i ] = 0;
}
break;
@@ -780,6 +766,55 @@ void ClientTimerActions( gentity_t *ent, int msec )
ent->client->ps.stats[ STAT_SHAKE ] *= 0.77f;
if( ent->client->ps.stats[ STAT_SHAKE ] < 0 )
ent->client->ps.stats[ STAT_SHAKE ] = 0;
+
+ // update the currents and voltages
+ if( BG_GetPlayerWeapon( &client->ps ) == WP_HBUILD )
+ {
+ trace_t tr;
+ vec3_t viewOrigin, forward, end;
+ gentity_t *traceEnt;
+ int head_network = 0, head_entity = 1023;
+
+ BG_GetClientViewOrigin( &client->ps, viewOrigin );
+ AngleVectors( client->ps.viewangles, forward, NULL, NULL );
+ VectorMA( viewOrigin, 200, forward, end );
+
+ trap_Trace( &tr, viewOrigin, NULL, NULL, end, ent->s.number, MASK_PLAYERSOLID );
+ traceEnt = &g_entities[ tr.entityNum ];
+
+ head_network = ent->powerNetwork;
+
+ if( tr.fraction < 0.99f )
+ {
+ if( traceEnt->client )
+ {
+ if( traceEnt->client->pers.teamSelection == TEAM_HUMANS &&
+ traceEnt->client->ps.stats[ STAT_HEALTH ] >= 0 )
+ {
+ head_entity = traceEnt->s.number;
+ client->ps.misc[ MISC_INFO1 ] = traceEnt->client->ps.stats[ STAT_HEALTH ];
+
+ if( BG_GetPlayerWeapon( &traceEnt->client->ps ) == WP_HBUILD )
+ client->ps.misc[ MISC_INFO2 ] = traceEnt->client->ps.persistant[ PERS_BUILDPOINTS ];
+ else
+ client->ps.misc[ MISC_INFO2 ] = -1;
+ }
+ }
+ else if( traceEnt->s.eType == ET_BUILDABLE &&
+ traceEnt->health > 0 && traceEnt->buildableTeam == TEAM_HUMANS &&
+ ( traceEnt->isPowerSource || traceEnt->requiresPower ) )
+ {
+ head_network = traceEnt->powerNetwork;
+ head_entity = traceEnt->s.number;
+ client->ps.misc[ MISC_INFO1 ] = traceEnt->current * 1000;
+ client->ps.misc[ MISC_INFO2 ] = traceEnt->voltage * 1000;
+ client->ps.misc[ MISC_INFO3 ] = traceEnt->storedBP * 10;
+ }
+ }
+
+ client->ps.misc[ MISC_INFOHEAD ] = ( head_network & 1023 ) | ( head_entity & 1023 ) << 10;
+
+ }
}
while( client->time1000 >= 1000 )
@@ -1769,16 +1804,11 @@ void ClientThink_real( gentity_t *ent )
vec3_t eyes, view, point;
gentity_t *traceEnt;
-#define USE_OBJECT_RANGE 64
-
- int entityList[ MAX_GENTITIES ];
- vec3_t range = { USE_OBJECT_RANGE, USE_OBJECT_RANGE, USE_OBJECT_RANGE };
- vec3_t mins, maxs;
- int i, num;
+#define USE_OBJECT_RANGE 100
// look for object infront of player
AngleVectors( client->ps.viewangles, view, NULL, NULL );
- BG_GetClientViewOrigin( &client->ps, eyes ); // !@#CUBOID
+ BG_GetClientViewOrigin( &client->ps, eyes );
VectorMA( eyes, USE_OBJECT_RANGE, view, point );
trap_Trace( &trace, client->ps.origin, NULL, NULL, point, ent->s.number, MASK_SHOT );
@@ -1786,50 +1816,29 @@ void ClientThink_real( gentity_t *ent )
if( traceEnt && traceEnt->buildableTeam == client->ps.stats[ STAT_TEAM ] && traceEnt->use )
traceEnt->use( traceEnt, ent, ent ); //other and activator are the same in this context
- else
+ else if( client->ps.stats[ STAT_TEAM ] == TEAM_ALIENS )
{
- //no entity in front of player - do a small area search
-
- VectorAdd( client->ps.origin, range, maxs );
- VectorSubtract( client->ps.origin, range, mins );
-
- num = trap_EntitiesInBox( mins, maxs, entityList, MAX_GENTITIES );
- for( i = 0; i < num; i++ )
+ if( BG_AlienCanEvolve( client->ps.stats[ STAT_CLASS ],
+ client->pers.credit,
+ g_alienStage.integer ) )
{
- traceEnt = &g_entities[ entityList[ i ] ];
-
- if( traceEnt && traceEnt->buildableTeam == client->ps.stats[ STAT_TEAM ] && traceEnt->use )
- {
- traceEnt->use( traceEnt, ent, ent ); //other and activator are the same in this context
- break;
- }
+ //no nearby objects and alien - show class menu
+ G_TriggerMenu( ent->client->ps.clientNum, MN_A_INFEST );
}
-
- if( i == num && client->ps.stats[ STAT_TEAM ] == TEAM_ALIENS )
+ else
{
- if( BG_AlienCanEvolve( client->ps.stats[ STAT_CLASS ],
- client->pers.credit,
- g_alienStage.integer ) )
- {
- //no nearby objects and alien - show class menu
- G_TriggerMenu( ent->client->ps.clientNum, MN_A_INFEST );
- }
- else
- {
- //flash frags
- G_AddEvent( ent, EV_ALIEN_EVOLVE_FAILED, 0 );
- }
+ //flash frags
+ G_AddEvent( ent, EV_ALIEN_EVOLVE_FAILED, 0 );
}
}
}
- client->ps.persistant[ PERS_BP ] = G_GetBuildPoints( client->ps.origin,
- client->ps.stats[ STAT_TEAM ] );
- client->ps.persistant[ PERS_MARKEDBP ] = G_GetMarkedBuildPoints( client->ps.origin,
- client->ps.stats[ STAT_TEAM ] );
-
- if( client->ps.persistant[ PERS_BP ] < 0 )
- client->ps.persistant[ PERS_BP ] = 0;
+ if( client->ps.stats[ STAT_TEAM ] == TEAM_ALIENS )
+ {
+ client->ps.persistant[ PERS_BUILDPOINTS ] = G_GetBuildPoints( client->ps.origin, client->ps.stats[ STAT_TEAM ] );
+ if( client->ps.persistant[ PERS_BUILDPOINTS ] < 0 )
+ client->ps.persistant[ PERS_BUILDPOINTS ] = 0;
+ }
// perform once-a-second actions
ClientTimerActions( ent, msec );
diff --git a/src/game/g_buildable.c b/src/game/g_buildable.c
index 0039ccd..8447e84 100644
--- a/src/game/g_buildable.c
+++ b/src/game/g_buildable.c
@@ -111,223 +111,6 @@ gentity_t *G_CheckSpawnPoint( int spawnNum, const vec3_t origin,
return NULL;
}
-#define POWER_REFRESH_TIME 2000
-
-/*
-================
-G_FindPower
-
-attempt to find power for self, return qtrue if successful
-================
-*/
-qboolean G_FindPower( gentity_t *self, qboolean searchUnspawned )
-{
- int i, j;
- gentity_t *ent, *ent2;
- gentity_t *closestPower = NULL;
- int distance = 0;
- int minDistance = REPEATER_BASESIZE + 1;
- vec3_t temp_v;
-
- if( self->buildableTeam != TEAM_HUMANS )
- return qfalse;
-
- // Reactor is always powered
- if( self->s.modelindex == BA_H_REACTOR )
- {
- self->parentNode = self;
-
- return qtrue;
- }
-
- // Handle repeaters
- if( self->s.modelindex == BA_H_REPEATER )
- {
- self->parentNode = G_Reactor( );
-
- return self->parentNode != NULL;
- }
-
- // Iterate through entities
- for( i = MAX_CLIENTS, ent = g_entities + i; i < level.num_entities; i++, ent++ )
- {
- if( ent->s.eType != ET_BUILDABLE )
- continue;
-
- // If entity is a power item calculate the distance to it
- if( ( ent->s.modelindex == BA_H_REACTOR || ent->s.modelindex == BA_H_REPEATER ) &&
- ( searchUnspawned || ent->spawned ) && ent->powered && ent->health > 0 )
- {
- VectorSubtract( self->s.origin, ent->s.origin, temp_v );
- distance = VectorLength( temp_v );
-
- // Always prefer a reactor if there is one in range
- if( ent->s.modelindex == BA_H_REACTOR && distance <= REACTOR_BASESIZE )
- {
- // Only power as much BP as the reactor can hold
- if( self->s.modelindex != BA_NONE )
- {
- int buildPoints = g_humanBuildPoints.integer;
-
- // Scan the buildables in the reactor zone
- for( j = MAX_CLIENTS, ent2 = g_entities + j; j < level.num_entities; j++, ent2++ )
- {
- gentity_t *powerEntity;
-
- if( ent2->s.eType != ET_BUILDABLE )
- continue;
-
- if( ent2 == self )
- continue;
-
- powerEntity = ent2->parentNode;
-
- if( powerEntity && powerEntity->s.modelindex == BA_H_REACTOR && ( powerEntity == ent ) )
- {
- buildPoints -= BG_Buildable( ent2->s.modelindex, ent2->cuboidSize )->buildPoints;
- }
- }
-
- buildPoints -= level.humanBuildPointQueue;
-
- buildPoints -= BG_Buildable( self->s.modelindex, self->cuboidSize )->buildPoints;
-
- if( buildPoints >= 0 )
- {
- self->parentNode = ent;
- return qtrue;
- }
- else
- {
- // a buildable can still be built if it shares BP from two zones
-
- // TODO: handle combined power zones here
- }
- }
-
- // Dummy buildables don't need to look for zones
- else
- {
- self->parentNode = ent;
- return qtrue;
- }
- }
- else if( distance < minDistance )
- {
- // It's a repeater, so check that enough BP will be available to power
- // the buildable but only if self is a real buildable
-
- if( self->s.modelindex != BA_NONE )
- {
- int buildPoints = g_humanRepeaterBuildPoints.integer;
-
- // Scan the buildables in the repeater zone
- for( j = MAX_CLIENTS, ent2 = g_entities + j; j < level.num_entities; j++, ent2++ )
- {
- gentity_t *powerEntity;
-
- if( ent2->s.eType != ET_BUILDABLE )
- continue;
-
- if( ent2 == self )
- continue;
-
- powerEntity = ent2->parentNode;
-
- if( powerEntity && powerEntity->s.modelindex == BA_H_REPEATER && ( powerEntity == ent ) )
- {
- buildPoints -= BG_Buildable( ent2->s.modelindex, ent->cuboidSize )->buildPoints;
- }
- }
-
- if( ent->usesBuildPointZone && level.buildPointZones[ ent->buildPointZone ].active )
- buildPoints -= level.buildPointZones[ ent->buildPointZone ].queuedBuildPoints;
-
- buildPoints -= BG_Buildable( self->s.modelindex, self->cuboidSize )->buildPoints;
-
- if( buildPoints >= 0 )
- {
- closestPower = ent;
- minDistance = distance;
- }
- else
- {
- // a buildable can still be built if it shares BP from two zones
-
- // TODO: handle combined power zones here
- }
- }
- else
- {
- // Dummy buildables don't need to look for zones
- closestPower = ent;
- minDistance = distance;
- }
- }
- }
- }
-
- self->parentNode = closestPower;
- return self->parentNode != NULL;
-}
-
-/*
-================
-G_PowerEntityForPoint
-
-Simple wrapper to G_FindPower to find the entity providing
-power for the specified point
-================
-*/
-gentity_t *G_PowerEntityForPoint( const vec3_t origin )
-{
- gentity_t dummy;
-
- dummy.parentNode = NULL;
- dummy.buildableTeam = TEAM_HUMANS;
- dummy.s.modelindex = BA_NONE;
- VectorCopy( origin, dummy.s.origin );
-
- if( G_FindPower( &dummy, qfalse ) )
- return dummy.parentNode;
- else
- return NULL;
-}
-
-/*
-================
-G_PowerEntityForEntity
-
-Simple wrapper to G_FindPower to find the entity providing
-power for the specified entity
-================
-*/
-gentity_t *G_PowerEntityForEntity( gentity_t *ent )
-{
- if( G_FindPower( ent, qfalse ) )
- return ent->parentNode;
- return NULL;
-}
-
-/*
-================
-G_IsPowered
-
-Check if a location has power, returning the entity type
-that is providing it
-================
-*/
-buildable_t G_IsPowered( vec3_t origin )
-{
- gentity_t *ent = G_PowerEntityForPoint( origin );
-
- if( ent )
- return ent->s.modelindex;
- else
- return BA_NONE;
-}
-
-
/*
==================
G_GetBuildPoints
@@ -347,95 +130,36 @@ int G_GetBuildPoints( const vec3_t pos, team_t team )
}
else if( team == TEAM_HUMANS )
{
- gentity_t *powerPoint = G_PowerEntityForPoint( pos );
-
- if( powerPoint && powerPoint->s.modelindex == BA_H_REACTOR )
- return level.humanBuildPoints;
-
- if( powerPoint && powerPoint->s.modelindex == BA_H_REPEATER &&
- powerPoint->usesBuildPointZone && level.buildPointZones[ powerPoint->buildPointZone ].active )
- {
- return level.buildPointZones[ powerPoint->buildPointZone ].totalBuildPoints -
- level.buildPointZones[ powerPoint->buildPointZone ].queuedBuildPoints;
- }
-
- // Return the BP of the main zone by default
- return level.humanBuildPoints;
+ return 0xDEADBEE; //humans use the material system
}
return 0;
}
/*
-==================
-G_GetMarkedBuildPoints
+================
+G_IsDCCBuilt
-Get the number of marked build points from a position
-==================
+See if any powered DCC exists
+================
*/
-int G_GetMarkedBuildPoints( const vec3_t pos, team_t team )
+qboolean G_IsDCCBuilt( void )
{
- gentity_t *ent;
int i;
- int sum = 0;
-
- if( G_TimeTilSuddenDeath( ) <= 0 )
- return 0;
-
- if( !g_markDeconstruct.integer )
- return 0;
-
- for( i = MAX_CLIENTS, ent = g_entities + i; i < level.num_entities; i++, ent++ )
- {
- if( ent->s.eType != ET_BUILDABLE )
- continue;
-
- if( team == TEAM_HUMANS &&
- ent->s.modelindex != BA_H_REACTOR &&
- ent->s.modelindex != BA_H_REPEATER &&
- ent->parentNode != G_PowerEntityForPoint( pos ) )
- continue;
-
- if( !ent->inuse )
- continue;
-
- if( ent->health <= 0 )
- continue;
-
- if( ent->buildableTeam != team )
- continue;
-
- if( ent->deconstruct )
- sum += BG_Buildable( ent->s.modelindex, ent->cuboidSize )->buildPoints;
- }
-
- return sum;
-}
-
-/*
-==================
-G_InPowerZone
-
-See if a buildable is inside of another power zone.
-Return pointer to provider if so.
-It's different from G_FindPower because FindPower for
-providers will find themselves.
-(This doesn't check if power zones overlap)
-==================
-*/
-gentity_t *G_InPowerZone( gentity_t *self )
-{
- int i;
- gentity_t *ent;
- int distance;
- vec3_t temp_v;
+ gentity_t *ent;
+ static gentity_t *cache = NULL;
+
+ if( cache && cache->inuse && cache->s.eType == ET_BUILDABLE &&
+ cache->s.modelindex == BA_H_DCC && cache->spawned &&
+ cache->powered && cache->health >= 0 )
+ return qtrue;
for( i = MAX_CLIENTS, ent = g_entities + i; i < level.num_entities; i++, ent++ )
{
if( ent->s.eType != ET_BUILDABLE )
continue;
- if( ent == self )
+ if( ent->s.modelindex != BA_H_DCC )
continue;
if( !ent->spawned )
@@ -443,81 +167,46 @@ gentity_t *G_InPowerZone( gentity_t *self )
if( ent->health <= 0 )
continue;
+
+ if( !ent->powered )
+ continue;
- // if entity is a power item calculate the distance to it
- if( ( ent->s.modelindex == BA_H_REACTOR || ent->s.modelindex == BA_H_REPEATER ) &&
- ent->spawned && ent->powered )
- {
- VectorSubtract( self->s.origin, ent->s.origin, temp_v );
- distance = VectorLength( temp_v );
+ cache = ent;
- if( ent->s.modelindex == BA_H_REACTOR && distance <= REACTOR_BASESIZE )
- return ent;
- else if( ent->s.modelindex == BA_H_REPEATER && distance <= REPEATER_BASESIZE )
- return ent;
- }
+ return qtrue;
}
- return NULL;
+ return qfalse;
}
-/*
-================
-G_FindDCC
-
-attempt to find a controlling DCC for self, return number found
-================
-*/
-int G_FindDCC( gentity_t *self )
-{
- int i;
- gentity_t *ent;
- int distance = 0;
- vec3_t temp_v;
- int foundDCC = 0;
-
- if( self->buildableTeam != TEAM_HUMANS )
- return 0;
-
- //iterate through entities
- for( i = MAX_CLIENTS, ent = g_entities + i; i < level.num_entities && foundDCC < MAX_DCS_PER_BUILDABLE; i++, ent++ )
- {
- if( ent->s.eType != ET_BUILDABLE )
- continue;
-
- //if entity is a dcc calculate the distance to it
- if( ent->s.modelindex == BA_H_DCC && ent->spawned )
- {
- VectorSubtract( self->s.origin, ent->s.origin, temp_v );
- distance = VectorLength( temp_v );
- if( distance < DC_RANGE && ent->powered )
- {
- foundDCC++;
- }
- }
- }
-
- return foundDCC;
-}
/*
================
-G_IsDCCBuilt
+G_IsRTGBuilt
-See if any powered DCC exists
+See if any RTG exists
================
*/
-qboolean G_IsDCCBuilt( void )
+qboolean G_IsRTGBuilt( void )
{
int i;
gentity_t *ent;
+ static gentity_t *cache = NULL;
+
+ if( cache && cache->inuse && cache->s.eType == ET_BUILDABLE &&
+ cache->s.modelindex == BA_H_DCC && cache->spawned &&
+ cache->health >= 0 )
+ return qtrue;
for( i = MAX_CLIENTS, ent = g_entities + i; i < level.num_entities; i++, ent++ )
{
+ if( !ent->r.linked )
+ continue;
+
if( ent->s.eType != ET_BUILDABLE )
continue;
- if( ent->s.modelindex != BA_H_DCC )
+ if( ent->s.modelindex != BA_H_RTG )
continue;
if( !ent->spawned )
@@ -526,6 +215,8 @@ qboolean G_IsDCCBuilt( void )
if( ent->health <= 0 )
continue;
+ cache = ent;
+
return qtrue;
}
@@ -534,33 +225,17 @@ qboolean G_IsDCCBuilt( void )
/*
================
-G_Reactor
G_Overmind
-Since there's only one of these and we quite often want to find them, cache the
-results, but check them for validity each time
+Since there's only one overmind and we quite often want to find it, cache the
+results, but check it for validity each time
-The code here will break if more than one reactor or overmind is allowed, even
+The code here will break if more than one overmind is allowed, even
if one of them is dead/unspawned
================
*/
static gentity_t *G_FindBuildable( buildable_t buildable );
-gentity_t *G_Reactor( void )
-{
- static gentity_t *rc;
-
- // If cache becomes invalid renew it
- if( !rc || rc->s.eType != ET_BUILDABLE || rc->s.modelindex != BA_H_REACTOR )
- rc = G_FindBuildable( BA_H_REACTOR );
-
- // If we found it and it's alive, return it
- if( rc && rc->spawned && rc->health > 0 )
- return rc;
-
- return NULL;
-}
-
gentity_t *G_Overmind( void )
{
static gentity_t *om;
@@ -698,6 +373,457 @@ static void G_CreepSlow( gentity_t *self )
/*
================
+G_ScanPowerGrid
+
+Recursively finds all power entities reachable from the specified entity
+================
+*/
+static struct
+{
+ int networkID;
+
+ gentity_t *load[ MAX_GENTITIES ];
+ int loadCount;
+
+ gentity_t *sources[ MAX_GENTITIES ];
+ int sourceCount;
+
+ qboolean visited[ MAX_GENTITIES ];
+} grid;
+
+void G_ScanPowerGrid( gentity_t *this )
+{
+ int i;
+ int nextList[ MAX_GENTITIES ], nextCount;
+ gentity_t *next;
+ vec3_t mins, maxs;
+ float range;
+
+ switch( this->s.modelindex )
+ {
+ case BA_H_REACTOR:
+ case BA_H_CAPBANK:
+ case BA_H_RTG:
+ range = REACTOR_BASESIZE;
+ break;
+ case BA_H_REPEATER:
+ range = REPEATER_BASESIZE;
+ break;
+ }
+
+ for( i = 0; i < 3; i++ )
+ {
+ mins[ i ] = this->s.origin[ i ] - range;
+ maxs[ i ] = this->s.origin[ i ] + range;
+ }
+
+ nextCount = trap_EntitiesInBox( mins, maxs, nextList, MAX_GENTITIES );
+
+ for( i = 0; i < nextCount; i++ )
+ {
+ if( grid.visited[ nextList[ i ] ] )
+ continue;
+ grid.visited[ nextList[ i ] ] = qtrue;
+
+ next = g_entities + nextList[ i ];
+
+ if( next->s.eType != ET_BUILDABLE )
+ {
+ //let ckits know in which network's range they're in
+ if( next->client &&
+ next->health >= 0 &&
+ next->s.weapon == WP_HBUILD )
+ next->powerNetwork = grid.networkID;
+ continue;
+ }
+
+ if( next->health <= 0 )
+ continue;
+ if( next->buildableTeam != TEAM_HUMANS )
+ continue;
+
+ //repeater just extends the power grid
+ //it does not provide or consume power
+ if( next->spawned && next->s.modelindex == BA_H_REPEATER )
+ {
+ //switched off
+ if( !next->active )
+ continue;
+
+ next->powerNetwork = grid.networkID;
+ G_ScanPowerGrid( next );
+ continue;
+ }
+
+ if( !next->isPowerSource && !next->requiresPower )
+ continue;
+
+ next->powerNetwork = grid.networkID;
+ if( next->isPowerSource )
+ {
+ //switched off
+ if( !next->active )
+ continue;
+ grid.sources[ grid.sourceCount++ ] = next;
+ }
+ else
+ grid.load[ grid.loadCount++ ] = next;
+ }
+}
+
+
+/*
+================
+G_CalculatePowerGrid
+
+This function takes the listed power sources (with voltages V and
+internal resistances Rs) and load (with resistances R), constructs the
+following electrical circuit and solves it:
+
+ Legend:
+ -(-+)-- voltage source
+ -/\/\/- resistor
+ |- ground
+
+ V1 Rs1 I1 R1
+ +--(-+)--/\/\/-->-+ +--/\/\/--+
+ | V2 Rs2 I2| I | R2 |
+ |--+--(-+)--/\/\/-->-+-->--+--/\/\/--+--|
+ | | | |
+ ... ... ... ...
+ | Vn Rsn In| | Rn |
+ +--(-+)--/\/\/-->-+ +--/\/\/--+
+
+================
+*/
+void G_CalculatePowerGrid( void )
+{
+ int i, j;
+ gentity_t *ent;
+
+ float nGl, nGs, nG, nR;
+ float URs, U2, Is;
+
+ // the net load conductance (resistors in parallel)
+ for( nGl = 0.0f, i = 0; i < grid.loadCount; i++ )
+ nGl += 1.0f / grid.load[ i ]->resistance;
+
+ // the net source conductance (resistors in parallel)
+ for( nGs = 0.0f, i = 0; i < grid.sourceCount; i++ )
+ nGs += 1.0f / grid.sources[ i ]->resistance;
+
+ // solve the circuit using the superposition theorem
+ for( i = 0; i < grid.sourceCount; i++ )
+ {
+ ent = grid.sources[ i ];
+
+ // net load + other sources conductance
+ nG = nGl + nGs - 1.0f / ent->resistance;
+
+ // net resistance
+ nR = 1.0f / nG + ent->resistance;
+
+ // current flowing through the source
+ Is = ent->voltage / nR;
+ ent->current += ent->voltage / nR;
+
+ // voltage drop on source's internal resistance
+ URs = Is * ent->resistance;
+
+ // voltage drop on other sources or the entire load
+ U2 = ent->voltage - URs;
+
+ // current flowing through other sources
+ for( j = 0; j < grid.sourceCount; j++ )
+ if( i != j )
+ grid.sources[ j ]->current -= U2 / grid.sources[ j ]->resistance;
+
+ // current flowing through parts of the load
+ for( j = 0; j < grid.loadCount; j++ )
+ grid.load[ j ]->current += U2 / grid.load[ j ]->resistance;
+ }
+}
+
+/*
+================
+G_UpdatePowerGrid
+
+Recalculate the entire power grid
+================
+*/
+void G_UpdatePowerGrid( float dt )
+{
+ int i;
+ gentity_t *ent;
+
+ // reset all ckits
+ for( i = 0; i < MAX_CLIENTS; i++ )
+ g_entities[ i ].powerNetwork = 0;
+
+ // reset all power entities
+ for( i = MAX_CLIENTS; i < level.num_entities; i++ )
+ {
+ ent = g_entities + i;
+
+ if( ent->s.eType != ET_BUILDABLE )
+ continue;
+ if( ent->buildableTeam != TEAM_HUMANS )
+ continue;
+
+ ent->powerNetwork = 0;
+ ent->current = 0.0f;
+
+ if( !ent->spawned )
+ {
+ ent->resistance = PREBUILD_RESISTANCE;
+ continue;
+ }
+
+ if( ent->s.modelindex == BA_H_REACTOR ||
+ ent->s.modelindex == BA_H_RTG )
+ ent->voltage = POWER_VOLTAGE * g_voltageModifier.value;
+
+ if( !ent->requiresPower || ent->isPowerSource )
+ continue;
+
+ if( ent->surge )
+ ent->resistance = BG_Buildable( ent->s.modelindex, NULL )->surgeResistance;
+ else
+ ent->resistance = BG_Buildable( ent->s.modelindex, NULL )->resistance;
+ }
+
+ // this table will be used throughout the following loop and its recursive calls
+ memset( grid.visited, 0, sizeof( grid.visited ) );
+
+ // find an unvisited power source and make a list of all power sources
+ // and receivers reachable from it for G_CalculatePowerGrid
+ for( i = MAX_CLIENTS; i < level.num_entities; i++ )
+ {
+ if( grid.visited[ i ] )
+ continue;
+
+ ent = g_entities + i;
+
+ if( ent->s.eType != ET_BUILDABLE )
+ continue;
+ if( !ent->spawned )
+ continue;
+ if( ent->health <= 0 )
+ continue;
+ if( ent->buildableTeam != TEAM_HUMANS )
+ continue;
+ if( !ent->isPowerSource )
+ continue;
+ if( !ent->active )
+ continue;
+
+ // unique network id
+ grid.networkID = ent->s.number;
+ ent->powerNetwork = grid.networkID;
+
+ // traverse the world and find all reachable power entities
+ grid.loadCount = 0;
+ grid.sourceCount = 0;
+
+ // add this source to the list
+ grid.visited[ i ] = qtrue;
+ grid.sources[ grid.sourceCount++ ] = ent;
+
+ // scan recursively
+ G_ScanPowerGrid( ent );
+
+ // calculate the power grid
+ G_CalculatePowerGrid( );
+ }
+
+ // calculate voltages, power levels, etc.
+ for( i = MAX_CLIENTS; i < level.num_entities; i++ )
+ {
+ ent = g_entities + i;
+
+ if( ent->s.eType != ET_BUILDABLE )
+ continue;
+ if( ent->buildableTeam != TEAM_HUMANS )
+ continue;
+
+ if( ent->isPowerSource )
+ {
+ if( ent->active && ent->s.modelindex == BA_H_CAPBANK )
+ ent->voltage -= ent->current * dt / CAPBANK_CAPACITY;
+
+ //zapping effect
+ #define MIN_ZAP_CURRENT 2.0f
+ #define ZAP_CHANCE_FACTOR 0.01f
+ if( ent->current > MIN_ZAP_CURRENT )
+ {
+ float chance;
+
+ chance = ( ent->current - MIN_ZAP_CURRENT ) * ZAP_CHANCE_FACTOR;
+ if( chance > 0.2f )
+ chance = 0.2f;
+
+ chance = 1.0f - chance;
+ if( random() > chance )
+ G_AddEvent( ent, EV_POWER_ZAP, 0 );
+ }
+ }
+ else
+ ent->voltage = ent->current * ent->resistance;
+ }
+}
+
+/*
+================
+G_SetupPowerEntity
+
+Called when a Human buildable finishes spawning and needs power grid
+related variables to be set accordingly
+================
+*/
+void G_SetupPowerEntity( gentity_t *built )
+{
+ built->requiresPower = BG_Buildable( built->s.modelindex, NULL )->requiresPower;
+ built->isPowerSource = BG_Buildable( built->s.modelindex, NULL )->isPowerSource;
+ built->resistance = BG_Buildable( built->s.modelindex, NULL )->resistance;
+
+ if( built->isPowerSource )
+ {
+ switch( built->s.modelindex )
+ {
+ case BA_H_REACTOR:
+ built->resistance = REACTOR_RESISTANCE;
+ break;
+ case BA_H_CAPBANK:
+ built->voltage = 0.0f; //spawn discharged
+ built->resistance = CAPBANK_RESISTANCE;
+ case BA_H_RTG:
+ built->resistance = RTG_RESISTANCE;
+ break;
+ }
+ }
+}
+
+/*
+================
+G_PowerForPoint
+
+Returns to which network ID this point belongs
+================
+*/
+
+int G_PowerForPoint( vec3_t point )
+{
+ int i;
+ int list[ MAX_GENTITIES ], count;
+ gentity_t *ent;
+ vec3_t mins, maxs;
+ float range;
+/*
+ switch( this->s.modelindex )
+ {
+
+ }*/
+ range = REACTOR_BASESIZE;
+
+ for( i = 0; i < 3; i++ )
+ {
+ mins[ i ] = point[ i ] - range;
+ maxs[ i ] = point[ i ] + range;
+ }
+
+ count = trap_EntitiesInBox( mins, maxs, list, MAX_GENTITIES );
+
+ for( i = 0; i < count; i++ )
+ {
+ ent = g_entities + list[ i ];
+
+ if( ent->s.eType != ET_BUILDABLE )
+ continue;
+ if( ent->buildableTeam != TEAM_HUMANS )
+ continue;
+ if( ent->health <= 0 )
+ continue;
+ if( !ent->spawned )
+ continue;
+ if( !ent->powerNetwork )
+ continue;
+
+ switch( ent->s.modelindex )
+ {
+ case BA_H_REACTOR:
+ case BA_H_CAPBANK:
+ case BA_H_RTG:
+ range = REACTOR_BASESIZE;
+ break;
+ case BA_H_REPEATER:
+ range = REPEATER_BASESIZE;
+ break;
+ default:
+ continue;
+ }
+
+ if( Distance( ent->s.origin, point ) > range )
+ continue;
+
+ return ent->powerNetwork;
+ }
+ return 0;
+}
+
+/*
+================
+NOTES TO G_CheckPower AND G_Surge
+
+Make sure that a buildable's resistance NEVER depends on its power
+state. Failure to ensure that will result in feedback loops in the
+power grid and general weirdness.
+================
+*/
+
+/*
+================
+G_CheckPower
+
+(Helper for Human buildable think functions)
+Checks if there's enough power for the buildable to idle
+================
+*/
+qboolean G_CheckPower( gentity_t *self, float min_current )
+{
+ self->surge = qfalse;
+ self->surgePowered = qfalse;
+ self->powered = qtrue;
+
+ if( self->current < min_current )
+ {
+ self->powered = qfalse;
+ return qfalse;
+ }
+
+ return qtrue;
+}
+
+/*
+================
+G_Surge
+
+(Helper for Human buildable think functions)
+Checks if there's enough power for the buildable to perform its action
+================
+*/
+qboolean G_Surge( gentity_t *self, float surge_current )
+{
+ self->surge = qtrue;
+
+ if( self->current < surge_current )
+ return qfalse;
+
+ self->surgePowered = qtrue;
+ return qtrue;
+}
+
+/*
+================
nullDieFunction
hack to prevent compilers complaining about function pointer -> NULL conversion
@@ -1536,42 +1662,6 @@ void ATrapper_Think( gentity_t *self )
//==================================================================================
-
-
-
-/*
-================
-G_SuicideIfNoPower
-
-Destroy human structures that have been unpowered too long
-================
-*/
-static qboolean G_SuicideIfNoPower( gentity_t *self )
-{
- if( self->buildableTeam != TEAM_HUMANS )
- return qfalse;
-
- if( !self->powered )
- {
- // if the power hasn't reached this buildable for some time, then destroy the buildable
- if( self->count == 0 )
- self->count = level.time;
- else if( ( level.time - self->count ) >= HUMAN_BUILDABLE_INACTIVE_TIME )
- {
- if( self->parentNode )
- G_Damage( self, NULL, g_entities + self->parentNode->killedBy,
- NULL, NULL, self->health, 0, MOD_NOCREEP );
- else
- G_Damage( self, NULL, NULL, NULL, NULL, self->health, 0, MOD_NOCREEP );
- return qtrue;
- }
- }
- else
- self->count = 0;
-
- return qfalse;
-}
-
/*
================
G_IdlePowerState
@@ -1594,13 +1684,9 @@ static void G_IdlePowerState( gentity_t *self )
}
-
-
//==================================================================================
-
-
/*
================
HSpawn_Disappear
@@ -1666,7 +1752,6 @@ void HSpawn_Die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int
self->die = nullDieFunction;
self->killedBy = attacker - g_entities;
- self->powered = qfalse; //free up power
self->s.eFlags &= ~EF_FIRING; //prevent any firing effects
if( self->spawned )
@@ -1694,36 +1779,30 @@ void HSpawn_Think( gentity_t *self )
{
gentity_t *ent;
- // set parentNode
- self->powered = G_FindPower( self, qfalse );
-
- if( G_SuicideIfNoPower( self ) )
+ if( !self->spawned || self->health <= 0 )
return;
-
- if( self->spawned )
+
+ //only suicide if at rest
+ if( self->s.groundEntityNum )
{
- //only suicide if at rest
- if( self->s.groundEntityNum )
+ if( ( ent = G_CheckSpawnPoint( self->s.number, self->s.origin,
+ self->s.origin2, BA_H_SPAWN, NULL ) ) != NULL )
{
- if( ( ent = G_CheckSpawnPoint( self->s.number, self->s.origin,
- self->s.origin2, BA_H_SPAWN, NULL ) ) != NULL )
+ // If the thing blocking the spawn is a buildable, kill it.
+ // If it's part of the map, kill self.
+ if( ent->s.eType == ET_BUILDABLE )
{
- // If the thing blocking the spawn is a buildable, kill it.
- // If it's part of the map, kill self.
- if( ent->s.eType == ET_BUILDABLE )
- {
- G_Damage( ent, NULL, NULL, NULL, NULL, self->health, 0, MOD_SUICIDE );
- G_SetBuildableAnim( self, BANIM_SPAWN1, qtrue );
- }
- else if( ent->s.number == ENTITYNUM_WORLD || ent->s.eType == ET_MOVER )
- {
- G_Damage( self, NULL, NULL, NULL, NULL, self->health, 0, MOD_SUICIDE );
- return;
- }
-
- if( ent->s.eType == ET_CORPSE )
- G_FreeEntity( ent ); //quietly remove
+ G_Damage( ent, NULL, NULL, NULL, NULL, self->health, 0, MOD_SUICIDE );
+ G_SetBuildableAnim( self, BANIM_SPAWN1, qtrue );
+ }
+ else if( ent->s.number == ENTITYNUM_WORLD || ent->s.eType == ET_MOVER )
+ {
+ G_Damage( self, NULL, NULL, NULL, NULL, self->health, 0, MOD_SUICIDE );
+ return;
}
+
+ if( ent->s.eType == ET_CORPSE )
+ G_FreeEntity( ent ); //quietly remove
}
}
@@ -1735,7 +1814,25 @@ void HSpawn_Think( gentity_t *self )
//==================================================================================
+/*
+================
+HRepeater_Think
+
+Think function for Human Repeater
+================
+*/
+void HRepeater_Think( gentity_t *self )
+{
+ self->nextthink = level.time + BG_Buildable( self->s.modelindex, NULL )->nextthink;
+
+ if( !self->spawned || self->health <= 0 )
+ return;
+
+ self->powered = self->active && ( self->powerNetwork != 0 );
+
+ G_IdlePowerState( self );
+}
/*
@@ -1752,7 +1849,6 @@ static void HRepeater_Die( gentity_t *self, gentity_t *inflictor, gentity_t *att
self->die = nullDieFunction;
self->killedBy = attacker - g_entities;
- self->powered = qfalse; //free up power
self->s.eFlags &= ~EF_FIRING; //prevent any firing effects
if( self->spawned )
@@ -1767,83 +1863,34 @@ static void HRepeater_Die( gentity_t *self, gentity_t *inflictor, gentity_t *att
}
G_LogDestruction( self, attacker, mod );
-
- if( self->usesBuildPointZone )
- {
- buildPointZone_t *zone = &level.buildPointZones[self->buildPointZone];
-
- zone->active = qfalse;
- self->usesBuildPointZone = qfalse;
- }
}
/*
================
-HRepeater_Think
+HSwitchable_Use
-Think for human power repeater
+Use for switchable buildings
================
*/
-void HRepeater_Think( gentity_t *self )
+void HSwitchable_Use( gentity_t *self, gentity_t *other, gentity_t *activator )
{
- int i;
- gentity_t *powerEnt;
- buildPointZone_t *zone;
-
- self->powered = G_FindPower( self, qfalse );
-
- powerEnt = G_InPowerZone( self );
- if( powerEnt != NULL )
- {
- // If the repeater is inside of another power zone then suicide
- // Attribute death to whoever built the reactor if that's a human,
- // which will ensure that it does not queue the BP
- if( powerEnt->builtBy >= 0 )
- G_Damage( self, NULL, g_entities + powerEnt->builtBy, NULL, NULL, self->health, 0, MOD_SUICIDE );
- else
- G_Damage( self, NULL, NULL, NULL, NULL, self->health, 0, MOD_SUICIDE );
+ if( !self->spawned || self->health <= 0 )
return;
- }
-
- G_IdlePowerState( self );
- // Initialise the zone once the repeater has spawned
- if( self->spawned && ( !self->usesBuildPointZone || !level.buildPointZones[ self->buildPointZone ].active ) )
+ if( !other || !other->client )
+ return;
+
+ // ckits and blasters switch the building
+ if( other->s.weapon == WP_HBUILD ||
+ other->s.weapon == WP_BLASTER )
{
- // See if a free zone exists
- for( i = 0; i < g_humanRepeaterMaxZones.integer; i++ )
- {
- zone = &level.buildPointZones[ i ];
-
- if( !zone->active )
- {
- // Initialise the BP queue with no BP queued
- zone->queuedBuildPoints = 0;
- zone->totalBuildPoints = g_humanRepeaterBuildPoints.integer;
- zone->nextQueueTime = level.time;
- zone->active = qtrue;
-
- self->buildPointZone = zone - level.buildPointZones;
- self->usesBuildPointZone = qtrue;
-
- break;
- }
- }
+ self->active ^= 1;
+ G_AddEvent( self, EV_POWER_SWITCH, 0 );
+ return;
}
- self->nextthink = level.time + POWER_REFRESH_TIME;
-}
-
-/*
-================
-HRepeater_Use
-
-Use for human power repeater
-================
-*/
-void HRepeater_Use( gentity_t *self, gentity_t *other, gentity_t *activator )
-{
- if( self->health <= 0 || !self->spawned )
+ // not powered
+ if( !self->powerNetwork )
return;
if( other && other->client )
@@ -1869,8 +1916,16 @@ void HReactor_Think( gentity_t *self )
vec3_t mins, maxs;
int i, num;
gentity_t *enemy, *tent;
+ qboolean fired = qfalse;
+
+ if( !self->spawned || self->health <= 0 )
+ return;
- if( self->dcc )
+ self->powered = self->active;
+
+ G_IdlePowerState( self );
+
+ if( G_IsDCCBuilt( ) )
{
VectorAdd( self->s.origin, dccrange, maxs );
VectorSubtract( self->s.origin, dccrange, mins );
@@ -1881,54 +1936,62 @@ void HReactor_Think( gentity_t *self )
VectorSubtract( self->s.origin, range, mins );
}
- if( self->spawned && ( self->health > 0 ) )
+ // Creates a tesla trail for every target
+ num = trap_EntitiesInBox( mins, maxs, entityList, MAX_GENTITIES );
+ for( i = 0; i < num; i++ )
{
- qboolean fired = qfalse;
-
- // Creates a tesla trail for every target
- num = trap_EntitiesInBox( mins, maxs, entityList, MAX_GENTITIES );
- for( i = 0; i < num; i++ )
- {
- enemy = &g_entities[ entityList[ i ] ];
- if( !enemy->client ||
- enemy->client->ps.stats[ STAT_TEAM ] != TEAM_ALIENS )
- continue;
- if( enemy->flags & FL_NOTARGET )
- continue;
+ enemy = &g_entities[ entityList[ i ] ];
+ if( !enemy->client ||
+ enemy->client->ps.stats[ STAT_TEAM ] != TEAM_ALIENS )
+ continue;
+ if( enemy->flags & FL_NOTARGET )
+ continue;
- tent = G_TempEntity( enemy->s.pos.trBase, EV_TESLATRAIL );
- tent->s.generic1 = self->s.number; //src
- tent->s.clientNum = enemy->s.number; //dest
- VectorCopy( self->s.pos.trBase, tent->s.origin2 );
- fired = qtrue;
- }
+ tent = G_TempEntity( enemy->s.pos.trBase, EV_TESLATRAIL );
+ tent->s.generic1 = self->s.number; //src
+ tent->s.clientNum = enemy->s.number; //dest
+ VectorCopy( self->s.pos.trBase, tent->s.origin2 );
+ fired = qtrue;
+ }
- // Actual damage is done by radius
- if( fired )
- {
- self->timestamp = level.time;
- if( self->dcc )
- G_SelectiveRadiusDamage( self->s.pos.trBase, self,
- REACTOR_ATTACK_DCC_DAMAGE,
- REACTOR_ATTACK_DCC_RANGE, self,
- MOD_REACTOR, TEAM_HUMANS );
- else
- G_SelectiveRadiusDamage( self->s.pos.trBase, self,
- REACTOR_ATTACK_DAMAGE,
- REACTOR_ATTACK_RANGE, self,
- MOD_REACTOR, TEAM_HUMANS );
- }
+ // Actual damage is done by radius
+ if( fired )
+ {
+ self->timestamp = level.time;
+ if( G_IsDCCBuilt( ) )
+ G_SelectiveRadiusDamage( self->s.pos.trBase, self,
+ REACTOR_ATTACK_DCC_DAMAGE,
+ REACTOR_ATTACK_DCC_RANGE, self,
+ MOD_REACTOR, TEAM_HUMANS );
+ else
+ G_SelectiveRadiusDamage( self->s.pos.trBase, self,
+ REACTOR_ATTACK_DAMAGE,
+ REACTOR_ATTACK_RANGE, self,
+ MOD_REACTOR, TEAM_HUMANS );
}
- if( self->dcc )
- self->nextthink = level.time + REACTOR_ATTACK_DCC_REPEAT;
- else
- self->nextthink = level.time + REACTOR_ATTACK_REPEAT;
+ if( G_IsDCCBuilt( ) )
+ self->nextthink -= REACTOR_ATTACK_DCC_REPEAT - REACTOR_ATTACK_REPEAT;
}
//==================================================================================
+/*
+================
+HArmoury_Think
+*
+Think function for Human Armoury
+================
+*/
+void HArmoury_Think( gentity_t *self )
+{
+ self->nextthink = level.time + BG_Buildable( self->s.modelindex, NULL )->nextthink;
+
+ if( !self->spawned )
+ return;
+ G_CheckPower( self, ARMOURY_CURRENT );
+}
/*
================
@@ -1953,57 +2016,9 @@ void HArmoury_Activate( gentity_t *self, gentity_t *other, gentity_t *activator
}
}
-/*
-================
-HArmoury_Think
-
-Think for armoury
-================
-*/
-void HArmoury_Think( gentity_t *self )
-{
- //make sure we have power
- self->nextthink = level.time + POWER_REFRESH_TIME;
-
- self->powered = G_FindPower( self, qfalse );
-
- G_SuicideIfNoPower( self );
-}
-
-
-
-
-//==================================================================================
-
-
-
-
-
-/*
-================
-HDCC_Think
-
-Think for dcc
-================
-*/
-void HDCC_Think( gentity_t *self )
-{
- //make sure we have power
- self->nextthink = level.time + POWER_REFRESH_TIME;
-
- self->powered = G_FindPower( self, qfalse );
-
- G_SuicideIfNoPower( self );
-}
-
-
-
-
//==================================================================================
-
-
/*
================
HMedistat_Die
@@ -2037,10 +2052,12 @@ void HMedistat_Think( gentity_t *self )
qboolean occupied = qfalse;
self->nextthink = level.time + BG_Buildable( self->s.modelindex, NULL )->nextthink;
-
- self->powered = G_FindPower( self, qfalse );
- if( G_SuicideIfNoPower( self ) )
+
+ if( !self->spawned || self->health <= 0 )
return;
+
+ G_CheckPower( self, MEDISTAT_I_IDLE );
+
G_IdlePowerState( self );
//clear target's healing flag
@@ -2055,105 +2072,105 @@ void HMedistat_Think( gentity_t *self )
self->active = qfalse;
self->enemy = NULL;
}
-
- self->nextthink = level.time + POWER_REFRESH_TIME;
- return;
}
- if( self->spawned )
+ VectorAdd( self->s.origin, self->r.maxs, maxs );
+ VectorAdd( self->s.origin, self->r.mins, mins );
+
+ mins[ 2 ] += fabs( self->r.mins[ 2 ] ) + self->r.maxs[ 2 ];
+ maxs[ 2 ] += 60; //player height
+
+ //if active use the healing idle
+ if( self->active )
+ G_SetIdleBuildableAnim( self, BANIM_IDLE2 );
+
+ //check if a previous occupier is still here
+ num = trap_EntitiesInBox( mins, maxs, entityList, MAX_GENTITIES );
+ for( i = 0; i < num; i++ )
{
- VectorAdd( self->s.origin, self->r.maxs, maxs );
- VectorAdd( self->s.origin, self->r.mins, mins );
+ player = &g_entities[ entityList[ i ] ];
- mins[ 2 ] += fabs( self->r.mins[ 2 ] ) + self->r.maxs[ 2 ];
- maxs[ 2 ] += 60; //player height
+ if( player->flags & FL_NOTARGET )
+ continue; // notarget cancels even beneficial effects?
+
+ //remove poison from everyone, not just the healed player
+ if( player->client && player->client->ps.stats[ STAT_STATE ] & SS_POISONED )
+ player->client->ps.stats[ STAT_STATE ] &= ~SS_POISONED;
+
+ if( self->enemy == player && player->client &&
+ ( ( player->client->ps.stats[ STAT_TEAM ] == TEAM_HUMANS ) &&
+ player->health < player->client->ps.stats[ STAT_MAX_HEALTH ] &&
+ PM_Live( player->client->ps.pm_type ) ) )
+ {
+ if( !G_Surge( self, MEDISTAT_I_ACTIVE ) )
+ return;
- //if active use the healing idle
- if( self->active )
- G_SetIdleBuildableAnim( self, BANIM_IDLE2 );
-
- //check if a previous occupier is still here
- num = trap_EntitiesInBox( mins, maxs, entityList, MAX_GENTITIES );
+ occupied = qtrue;
+ player->client->ps.stats[ STAT_STATE ] |= SS_HEALING_ACTIVE;
+ }
+ }
+
+ if( !occupied )
+ {
+ self->enemy = NULL;
+
+ //look for something to heal
for( i = 0; i < num; i++ )
{
player = &g_entities[ entityList[ i ] ];
if( player->flags & FL_NOTARGET )
continue; // notarget cancels even beneficial effects?
-
- //remove poison from everyone, not just the healed player
- if( player->client && player->client->ps.stats[ STAT_STATE ] & SS_POISONED )
- player->client->ps.stats[ STAT_STATE ] &= ~SS_POISONED;
-
- if( self->enemy == player && player->client &&
- ( (player->client->ps.stats[ STAT_TEAM ] == TEAM_HUMANS ) && // DIFF NOTE: remove this change from diffs ASAP
- player->health < player->client->ps.stats[ STAT_MAX_HEALTH ] &&
- PM_Live( player->client->ps.pm_type ) ) )
- {
- occupied = qtrue;
- player->client->ps.stats[ STAT_STATE ] |= SS_HEALING_ACTIVE;
- }
- }
-
- if( !occupied )
- {
- self->enemy = NULL;
- //look for something to heal
- for( i = 0; i < num; i++ )
+ if( player->client && player->client->ps.stats[ STAT_TEAM ] == TEAM_HUMANS )
{
- player = &g_entities[ entityList[ i ] ];
-
- if( player->flags & FL_NOTARGET )
- continue; // notarget cancels even beneficial effects?
-
- if( player->client && player->client->ps.stats[ STAT_TEAM ] == TEAM_HUMANS )
+ if( ( player->health < player->client->ps.stats[ STAT_MAX_HEALTH ] ||
+ player->client->ps.stats[ STAT_STAMINA ] < STAMINA_MAX ) &&
+ PM_Live( player->client->ps.pm_type ) )
{
- if( ( player->health < player->client->ps.stats[ STAT_MAX_HEALTH ] ||
- player->client->ps.stats[ STAT_STAMINA ] < STAMINA_MAX ) &&
- PM_Live( player->client->ps.pm_type ) )
+ if( !G_Surge( self, MEDISTAT_I_ACTIVE ) )
+ return;
+
+ self->enemy = player;
+
+ //start the heal anim
+ if( !self->active && self->surge && self->surgePowered )
{
- self->enemy = player;
-
- //start the heal anim
- if( !self->active )
- {
- G_SetBuildableAnim( self, BANIM_ATTACK1, qfalse );
- self->active = qtrue;
- player->client->ps.stats[ STAT_STATE ] |= SS_HEALING_ACTIVE;
- }
+ G_SetBuildableAnim( self, BANIM_ATTACK1, qfalse );
+ self->active = qtrue;
+ player->client->ps.stats[ STAT_STATE ] |= SS_HEALING_ACTIVE;
}
- else if( !BG_InventoryContainsUpgrade( UP_MEDKIT, player->client->ps.stats ) )
- BG_AddUpgradeToInventory( UP_MEDKIT, player->client->ps.stats );
}
+ else if( !BG_InventoryContainsUpgrade( UP_MEDKIT, player->client->ps.stats ) )
+ BG_AddUpgradeToInventory( UP_MEDKIT, player->client->ps.stats );
}
}
+ }
- //nothing left to heal so go back to idling
- if( !self->enemy && self->active )
- {
- G_SetBuildableAnim( self, BANIM_CONSTRUCT2, qtrue );
- G_SetIdleBuildableAnim( self, BANIM_IDLE1 );
+ //nothing left to heal so go back to idling
+ if( !self->enemy && self->active )
+ {
+ G_SetBuildableAnim( self, BANIM_CONSTRUCT2, qtrue );
+ G_SetIdleBuildableAnim( self, BANIM_IDLE1 );
- self->active = qfalse;
- }
- else if( self->enemy && self->enemy->client ) //heal!
- {
- if( self->enemy->client->ps.stats[ STAT_STAMINA ] < STAMINA_MAX )
- self->enemy->client->ps.stats[ STAT_STAMINA ] += STAMINA_MEDISTAT_RESTORE;
+ self->active = qfalse;
+ }
+ else if( self->enemy && self->enemy->client ) //heal!
+ {
+ if( self->enemy->client->ps.stats[ STAT_STAMINA ] < STAMINA_MAX )
+ self->enemy->client->ps.stats[ STAT_STAMINA ] += STAMINA_MEDISTAT_RESTORE;
- if( self->enemy->client->ps.stats[ STAT_STAMINA ] > STAMINA_MAX )
- self->enemy->client->ps.stats[ STAT_STAMINA ] = STAMINA_MAX;
+ if( self->enemy->client->ps.stats[ STAT_STAMINA ] > STAMINA_MAX )
+ self->enemy->client->ps.stats[ STAT_STAMINA ] = STAMINA_MAX;
- self->enemy->health++;
+ self->enemy->health++;
- //if they're completely healed, give them a medkit
- if( self->enemy->health >= self->enemy->client->ps.stats[ STAT_MAX_HEALTH ] )
- {
- self->enemy->health = self->enemy->client->ps.stats[ STAT_MAX_HEALTH ];
- if( !BG_InventoryContainsUpgrade( UP_MEDKIT, self->enemy->client->ps.stats ) )
- BG_AddUpgradeToInventory( UP_MEDKIT, self->enemy->client->ps.stats );
- }
+ //if they're completely healed, give them a medkit
+ if( self->enemy->health >= self->enemy->client->ps.stats[ STAT_MAX_HEALTH ] )
+ {
+ self->enemy->health = self->enemy->client->ps.stats[ STAT_MAX_HEALTH ];
+ if( !BG_InventoryContainsUpgrade( UP_MEDKIT, self->enemy->client->ps.stats ) )
+ BG_AddUpgradeToInventory( UP_MEDKIT, self->enemy->client->ps.stats );
}
}
}
@@ -2179,8 +2196,8 @@ qboolean HMGTurret_CheckTarget( gentity_t *self, gentity_t *target,
trace_t tr;
vec3_t dir, end;
- if( !target || target->health <= 0 || !target->client ||
- target->client->pers.teamSelection != TEAM_ALIENS )
+ if( !target || target->health <= 0 || !target->client /*||
+ target->client->pers.teamSelection != TEAM_ALIENS */) //debug: target humans too for now
return qfalse;
if( target->flags & FL_NOTARGET )
@@ -2368,6 +2385,7 @@ HMGTurret_Think
Think function for MG turret
================
*/
+
void HMGTurret_Think( gentity_t *self )
{
self->nextthink = level.time +
@@ -2375,10 +2393,12 @@ void HMGTurret_Think( gentity_t *self )
// Turn off client side muzzle flashes
self->s.eFlags &= ~EF_FIRING;
-
- self->powered = G_FindPower( self, qfalse );
- if( G_SuicideIfNoPower( self ) )
+
+ if( !self->spawned || self->health <= 0 )
return;
+
+ G_CheckPower( self, MGTURRET_I_IDLE );
+
G_IdlePowerState( self );
// If not powered or spawned don't do anything
@@ -2386,10 +2406,9 @@ void HMGTurret_Think( gentity_t *self )
{
// if power loss drop turret
if( self->spawned &&
- HMGTurret_State( self, MGT_STATE_INACTIVE ) )
+ HMGTurret_State( self, MGT_STATE_INACTIVE ) );
return;
- self->nextthink = level.time + POWER_REFRESH_TIME;
return;
}
if( !self->spawned )
@@ -2428,6 +2447,9 @@ void HMGTurret_Think( gentity_t *self )
if( !self->active || self->turretSpinupTime > level.time )
return;
+ if( !G_Surge( self, MGTURRET_I_ACTIVE ) )
+ return;
+
// Fire repeat delay
if( self->timestamp > level.time )
return;
@@ -2456,62 +2478,174 @@ Think function for Tesla Generator
*/
void HTeslaGen_Think( gentity_t *self )
{
+ vec3_t origin, range, mins, maxs;
+ int entityList[ MAX_GENTITIES ], i, num;
+
self->nextthink = level.time + BG_Buildable( self->s.modelindex, NULL )->nextthink;
- self->powered = G_FindPower( self, qfalse );
- if( G_SuicideIfNoPower( self ) )
+ if( !self->spawned || self->health <= 0 )
return;
+
+ G_CheckPower( self, TESLAGEN_I_IDLE );
+
G_IdlePowerState( self );
//if not powered don't do anything and check again for power next think
if( !self->powered )
{
self->s.eFlags &= ~EF_FIRING;
- self->nextthink = level.time + POWER_REFRESH_TIME;
return;
}
- if( self->spawned && self->timestamp < level.time )
- {
- vec3_t origin, range, mins, maxs;
- int entityList[ MAX_GENTITIES ], i, num;
+ if( !self->spawned )
+ return;
- // Communicates firing state to client
- self->s.eFlags &= ~EF_FIRING;
+ // Communicates firing state to client
+ self->s.eFlags &= ~EF_FIRING;
- // Move the muzzle from the entity origin up a bit to fire over turrets
- VectorMA( self->s.origin, self->r.maxs[ 2 ], self->s.origin2, origin );
+ // Move the muzzle from the entity origin up a bit to fire over turrets
+ VectorMA( self->s.origin, self->r.maxs[ 2 ], self->s.origin2, origin );
- VectorSet( range, TESLAGEN_RANGE, TESLAGEN_RANGE, TESLAGEN_RANGE );
- VectorAdd( origin, range, maxs );
- VectorSubtract( origin, range, mins );
+ VectorSet( range, TESLAGEN_RANGE, TESLAGEN_RANGE, TESLAGEN_RANGE );
+ VectorAdd( origin, range, maxs );
+ VectorSubtract( origin, range, mins );
- // Attack nearby Aliens
- num = trap_EntitiesInBox( mins, maxs, entityList, MAX_GENTITIES );
- for( i = 0; i < num; i++ )
- {
- self->enemy = &g_entities[ entityList[ i ] ];
+ // Attack nearby Aliens
+ num = trap_EntitiesInBox( mins, maxs, entityList, MAX_GENTITIES );
+ for( i = 0; i < num; i++ )
+ {
+ self->enemy = &g_entities[ entityList[ i ] ];
- if( self->enemy->flags & FL_NOTARGET )
- continue;
+ if( self->enemy->flags & FL_NOTARGET )
+ continue;
+
+ if( self->enemy->client && self->enemy->health > 0 &&
+ /*self->enemy->client->ps.stats[ STAT_TEAM ] == TEAM_ALIENS &&*/
+ Distance( origin, self->enemy->s.pos.trBase ) <= TESLAGEN_RANGE )
+ {
+ if( !G_Surge( self, TESLAGEN_I_ACTIVE ) )
+ break;
- if( self->enemy->client && self->enemy->health > 0 &&
- self->enemy->client->ps.stats[ STAT_TEAM ] == TEAM_ALIENS &&
- Distance( origin, self->enemy->s.pos.trBase ) <= TESLAGEN_RANGE )
- FireWeapon( self );
+ FireWeapon( self );
}
- self->enemy = NULL;
+ }
+ self->enemy = NULL;
- if( self->s.eFlags & EF_FIRING )
- {
- G_AddEvent( self, EV_FIRE_WEAPON, 0 );
+ if( self->s.eFlags & EF_FIRING )
+ {
+ G_AddEvent( self, EV_FIRE_WEAPON, 0 );
- //doesn't really need an anim
- //G_SetBuildableAnim( self, BANIM_ATTACK1, qfalse );
+ //doesn't really need an anim
+ //G_SetBuildableAnim( self, BANIM_ATTACK1, qfalse );
- self->timestamp = level.time + TESLAGEN_REPEAT;
- }
+ self->timestamp = level.time + TESLAGEN_REPEAT;
+ }
+}
+
+//==================================================================================
+
+void HDCC_Think( gentity_t *self )
+{
+ int i, count, list[ MAX_GENTITIES ];
+ gentity_t *ent;
+ vec3_t mins, maxs;
+
+ self->nextthink = level.time + DC_HEALRATE;
+
+ if( !self->spawned || self->health <= 0 )
+ return;
+
+ G_CheckPower( self, DC_I_IDLE );
+ G_IdlePowerState( self );
+ if( !self->powered )
+ return;
+
+ for( i = 0; i < 3; i++ )
+ mins[ i ] = self->s.origin[ i ] - DC_RANGE,
+ maxs[ i ] = self->s.origin[ i ] + DC_RANGE;
+
+ count = trap_EntitiesInBox( mins, maxs, list, MAX_GENTITIES );
+
+ for( i = 0; i < count; i++ )
+ {
+ ent = g_entities + list[ i ];
+
+ if( ent->s.eType != ET_BUILDABLE )
+ continue;
+ if( ent->buildableTeam != TEAM_HUMANS )
+ continue;
+ if( ent->health >= BG_Buildable( ent->s.modelindex, ent->cuboidSize )->health )
+ continue;
+ if( ent->lastDamageTime + HUMAN_REGEN_DAMAGE_TIME >= level.time )
+ continue;
+ if( BG_Buildable( ent->s.modelindex, NULL )->cuboid &&
+ !BG_CuboidAttributes( ent->s.modelindex )->repairable )
+ continue;
+
+ if( !G_Surge( self, DC_I_ACTIVE ) )
+ return;
+
+ ent->health++;
+ }
+}
+
+//==================================================================================
+
+void HCapbank_Think( gentity_t *self)
+{
+ //nothing to do here
+}
+
+//==================================================================================
+
+void HRTG_Think( gentity_t *self)
+{
+ self->nextthink = level.time + BG_Buildable( self->s.modelindex, NULL )->nextthink;
+
+ if( !self->spawned || self->health <= 0 )
+ return;
+
+ if( G_TimeTilSuddenDeath( ) <= 0 )
+ {
+ self->storedBP = 0;
+ return;
}
+
+ self->storedBP += RTG_YIELD * g_massYieldModifier.value;
+
+ if( self->storedBP > RTG_STORAGE )
+ self->storedBP = RTG_STORAGE;
+}
+
+//==================================================================================
+
+void HRefinery_Think( gentity_t *self)
+{
+ self->nextthink = level.time + BG_Buildable( self->s.modelindex, NULL )->nextthink;
+
+ if( !self->spawned || self->health <= 0 )
+ return;
+
+ G_CheckPower( self, REFINERY_I_IDLE );
+ G_IdlePowerState( self );
+
+ if( G_TimeTilSuddenDeath( ) <= 0 )
+ {
+ self->storedBP = 0;
+ return;
+ }
+
+ //nothing to do
+ if( self->storedBP >= REFINERY_STORAGE - 0.001f )
+ return;
+
+ if( !G_Surge( self, REFINERY_I_ACTIVE ) )
+ return;
+
+ self->storedBP += REFINERY_YIELD * g_massYieldModifier.value;
+
+ if( self->storedBP > REFINERY_STORAGE )
+ self->storedBP = REFINERY_STORAGE;
}
//==================================================================================
@@ -2534,7 +2668,6 @@ void Cuboid_Die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int
G_SetBuildableAnim( self, BANIM_DESTROY1, qtrue ); // just for sound
self->die = nullDieFunction;
self->killedBy = attacker - g_entities;
- self->powered = qfalse;
self->s.eFlags &= ~EF_FIRING;
G_LogDestruction( self, attacker, mod );
dir[ 0 ] =
@@ -2632,48 +2765,6 @@ void G_QueueBuildPoints( gentity_t *self )
level.alienBuildPointQueue += queuePoints;
break;
-
- case TEAM_HUMANS:
- powerEntity = G_PowerEntityForEntity( self );
-
- if( powerEntity )
- {
- int nqt;
- switch( powerEntity->s.modelindex )
- {
- case BA_H_REACTOR:
- nqt = G_NextQueueTime( level.humanBuildPointQueue,
- g_humanBuildPoints.integer,
- g_humanBuildQueueTime.integer );
- if( !level.humanBuildPointQueue ||
- level.time + nqt < level.humanNextQueueTime )
- level.humanNextQueueTime = level.time + nqt;
-
- level.humanBuildPointQueue += queuePoints;
- break;
-
- case BA_H_REPEATER:
- if( powerEntity->usesBuildPointZone &&
- level.buildPointZones[ powerEntity->buildPointZone ].active )
- {
- buildPointZone_t *zone = &level.buildPointZones[ powerEntity->buildPointZone ];
-
- nqt = G_NextQueueTime( zone->queuedBuildPoints,
- zone->totalBuildPoints,
- g_humanRepeaterBuildQueueTime.integer );
-
- if( !zone->queuedBuildPoints ||
- level.time + nqt < zone->nextQueueTime )
- zone->nextQueueTime = level.time + nqt;
-
- zone->queuedBuildPoints += queuePoints;
- }
- break;
-
- default:
- break;
- }
- }
}
}
@@ -2774,6 +2865,7 @@ void G_BuildableThink( gentity_t *ent, int msec )
{
G_TeamCommand( TEAM_ALIENS, "cp \"The Overmind has awakened!\"" );
}
+ G_SetupPowerEntity( ent );
}
// Timer actions
@@ -2784,9 +2876,18 @@ void G_BuildableThink( gentity_t *ent, int msec )
if( !ent->spawned )
{
- buildRate=(int)(ceil((float)maxHealth/(float)buildTime*1e3f));
- ent->health=MIN(ent->health+buildRate,maxHealth);
- ent->healthLeft=MAX(ent->healthLeft-buildRate,0);
+ buildRate = (int)( ceil( (float)maxHealth / (float)buildTime * 1.0e3f ) );
+
+ if( ent->buildableTeam == TEAM_HUMANS &&
+ ent->s.modelindex != BA_H_RTG )
+ {
+ buildRate *= ent->current / PREBUILD_CURRENT;
+ if( buildRate < 0 )
+ buildRate = 0;
+ ent->powered = ( buildRate > 0 );
+ }
+ ent->health = MIN( ent->health + buildRate, maxHealth );
+ ent->healthLeft = MAX( ent->healthLeft - buildRate, 0 );
}
else if( ent->health > 0 && ent->health < maxHealth )
{
@@ -2795,13 +2896,6 @@ void G_BuildableThink( gentity_t *ent, int msec )
{
ent->health += regenRate;
}
- else if( ent->buildableTeam == TEAM_HUMANS && ent->dcc &&
- ( ent->lastDamageTime + HUMAN_REGEN_DAMAGE_TIME ) < level.time &&
- ( !BG_Buildable( ent->s.modelindex, NULL )->cuboid ||
- BG_CuboidAttributes( ent->s.modelindex )->repairable ) )
- {
- ent->health += DC_HEALRATE * ent->dcc;
- }
}
if( ent->health >= maxHealth )
@@ -2819,8 +2913,6 @@ void G_BuildableThink( gentity_t *ent, int msec )
if( ent->clientSpawnTime < 0 )
ent->clientSpawnTime = 0;
- ent->dcc = ( ent->buildableTeam != TEAM_HUMANS ) ? 0 : G_FindDCC( ent );
-
// Set health
ent->s.generic1 = MIN( MAX( ent->health, 0 ), 999 );
@@ -2828,16 +2920,47 @@ void G_BuildableThink( gentity_t *ent, int msec )
BG_CuboidPackHealthSafe( ent->s.modelindex, &ent->s, ent->health );
// Set flags
- ent->s.eFlags &= ~( EF_B_POWERED | EF_B_SPAWNED | EF_B_MARKED );
- if( ent->powered )
- ent->s.eFlags |= EF_B_POWERED;
+ ent->s.eFlags &= ~( EF_B_POWERED | EF_B_SPAWNED | EF_B_SURGE );
+
+ if( ent->buildableTeam == TEAM_HUMANS )
+ {
+ if( ent->s.modelindex == BA_H_REPEATER )
+ {
+ if( ent->powered )
+ ent->s.eFlags |= EF_B_POWERED;
+ if( ent->active )
+ ent->s.eFlags |= EF_B_SURGE;
+ }
+ else if( ent->isPowerSource )
+ {
+ ent->s.eFlags |= EF_B_POWERED;
+ if( ent->active )
+ ent->s.eFlags |= EF_B_SURGE;
+ }
+ else
+ {
+ if( ent->powered )
+ {
+ if( ent->surge )
+ {
+ ent->s.eFlags |= EF_B_SURGE;
+ if( ent->surgePowered )
+ ent->s.eFlags |= EF_B_POWERED;
+ }
+ else
+ ent->s.eFlags |= EF_B_POWERED;
+ }
+ }
+ }
+ else
+ {
+ if( ent->powered )
+ ent->s.eFlags |= EF_B_POWERED;
+ }
if( ent->spawned )
ent->s.eFlags |= EF_B_SPAWNED;
- if( ent->deconstruct )
- ent->s.eFlags |= EF_B_MARKED;
-
// Check if this buildable is touching any triggers
G_BuildableTouchTriggers( ent );
@@ -2940,450 +3063,61 @@ static qboolean G_BuildablesIntersect( buildable_t a, vec3_t originA, vec3_t cub
/*
===============
-G_CompareBuildablesForRemoval
-
-qsort comparison function for a buildable removal list
-===============
-*/
-static buildable_t cmpBuildable;
-static vec3_t cmpOrigin;
-static vec3_t cmpCuboid;
-static int G_CompareBuildablesForRemoval( const void *a, const void *b )
-{
- int precedence[ ] =
- {
- BA_NONE,
-
- BA_A_BARRICADE,
- BA_A_ACIDTUBE,
- BA_A_TRAPPER,
- BA_A_HIVE,
- BA_A_BOOSTER,
- BA_A_SPAWN,
- BA_A_CUBOID1,
- BA_A_OVERMIND,
-
- BA_H_MGTURRET,
- BA_H_TESLAGEN,
- BA_H_DCC,
- BA_H_MEDISTAT,
- BA_H_ARMOURY,
- BA_H_SPAWN,
- BA_H_REPEATER,
- BA_H_CUBOID1,
- BA_H_CUBOID2,
- BA_H_REACTOR
- };
-
- gentity_t *buildableA, *buildableB;
- int i;
- int aPrecedence = 0, bPrecedence = 0;
- qboolean aMatches = qfalse, bMatches = qfalse;
-
- buildableA = *(gentity_t **)a;
- buildableB = *(gentity_t **)b;
-
- // Prefer the one that collides with the thing we're building
- aMatches = G_BuildablesIntersect( cmpBuildable, cmpOrigin, cmpCuboid,
- buildableA->s.modelindex, buildableA->s.origin, buildableA->cuboidSize );
- bMatches = G_BuildablesIntersect( cmpBuildable, cmpOrigin, cmpCuboid,
- buildableB->s.modelindex, buildableB->s.origin, buildableB->cuboidSize );
- if( aMatches && !bMatches )
- return -1;
- else if( !aMatches && bMatches )
- return 1;
-
- // If the only spawn is marked, prefer it last
- if( cmpBuildable == BA_A_SPAWN || cmpBuildable == BA_H_SPAWN )
- {
- if( ( buildableA->s.modelindex == BA_A_SPAWN && level.numAlienSpawns == 1 ) ||
- ( buildableA->s.modelindex == BA_H_SPAWN && level.numHumanSpawns == 1 ) )
- return 1;
-
- if( ( buildableB->s.modelindex == BA_A_SPAWN && level.numAlienSpawns == 1 ) ||
- ( buildableB->s.modelindex == BA_H_SPAWN && level.numHumanSpawns == 1 ) )
- return -1;
- }
-
- // If one matches the thing we're building, prefer it
- aMatches = ( buildableA->s.modelindex == cmpBuildable );
- bMatches = ( buildableB->s.modelindex == cmpBuildable );
- if( aMatches && !bMatches )
- return -1;
- else if( !aMatches && bMatches )
- return 1;
-
- // They're the same type
- if( buildableA->s.modelindex == buildableB->s.modelindex )
- {
- gentity_t *powerEntity = G_PowerEntityForPoint( cmpOrigin );
-
- // Prefer the entity that is providing power for this point
- aMatches = ( powerEntity == buildableA );
- bMatches = ( powerEntity == buildableB );
- if( aMatches && !bMatches )
- return -1;
- else if( !aMatches && bMatches )
- return 1;
-
- // Pick the one marked earliest
- return buildableA->deconstructTime - buildableB->deconstructTime;
- }
-
- // Resort to preference list
- for( i = 0; i < sizeof( precedence ) / sizeof( precedence[ 0 ] ); i++ )
- {
- if( buildableA->s.modelindex == precedence[ i ] )
- aPrecedence = i;
-
- if( buildableB->s.modelindex == precedence[ i ] )
- bPrecedence = i;
- }
-
- return aPrecedence - bPrecedence;
-}
-
-/*
-===============
-G_ClearDeconMarks
-
-Remove decon mark from all buildables
-===============
-*/
-void G_ClearDeconMarks( void )
-{
- int i;
- gentity_t *ent;
-
- for( i = MAX_CLIENTS, ent = g_entities + i ; i < level.num_entities ; i++, ent++ )
- {
- if( !ent->inuse )
- continue;
-
- if( ent->s.eType != ET_BUILDABLE )
- continue;
-
- ent->deconstruct = qfalse;
- }
-}
-
-/*
-===============
-G_FreeMarkedBuildables
-
-Free up build points for a team by deconstructing marked buildables
-===============
-*/
-void G_FreeMarkedBuildables( gentity_t *deconner, char *readable, int rsize,
- char *nums, int nsize )
-{
- int i;
- int bNum;
- int listItems = 0;
- int totalListItems = 0;
- gentity_t *ent;
- int removalCounts[ BA_NUM_BUILDABLES ] = {0};
-
- if( readable && rsize )
- readable[ 0 ] = '\0';
- if( nums && nsize )
- nums[ 0 ] = '\0';
-
- if( !g_markDeconstruct.integer )
- return; // Not enabled, can't deconstruct anything
-
- for( i = 0; i < level.numBuildablesForRemoval; i++ )
- {
- ent = level.markedBuildables[ i ];
- bNum = BG_Buildable( ent->s.modelindex, NULL )->number;
-
- if( removalCounts[ bNum ] == 0 )
- totalListItems++;
-
- G_Damage( ent, NULL, deconner, NULL, NULL, ent->health, 0, MOD_REPLACE );
-
- removalCounts[ bNum ]++;
-
- if( nums )
- Q_strcat( nums, nsize, va( " %d", ent - g_entities ) );
-
- G_FreeEntity( ent );
- }
-
- if( !readable )
- return;
-
- for( i = 0; i < BA_NUM_BUILDABLES; i++ )
- {
- if( removalCounts[ i ] )
- {
- if( listItems )
- {
- if( listItems == ( totalListItems - 1 ) )
- Q_strcat( readable, rsize, va( "%s and ",
- ( totalListItems > 2 ) ? "," : "" ) );
- else
- Q_strcat( readable, rsize, ", " );
- }
- Q_strcat( readable, rsize, va( "%s", BG_Buildable( i, NULL )->humanName ) );
- if( removalCounts[ i ] > 1 )
- Q_strcat( readable, rsize, va( " (%dx)", removalCounts[ i ] ) );
- listItems++;
- }
- }
-}
-
-/*
-===============
G_SufficientBPAvailable
Determine if enough build points can be released for the buildable
and list the buildables that must be destroyed if this is the case
===============
*/
-static itemBuildError_t G_SufficientBPAvailable( buildable_t buildable,
+static itemBuildError_t G_SufficientBPAvailable( gclient_t *builder,
+ buildable_t buildable,
vec3_t origin,
- vec3_t cuboidSize )
+ vec3_t cuboidSize )
{
- int i;
- int numBuildables = 0;
- int numRequired = 0;
- int pointsYielded = 0;
- gentity_t *ent;
- team_t team = BG_Buildable( buildable, NULL )->team;
- int buildPoints = BG_Buildable( buildable, cuboidSize )->buildPoints;
- int remainingBP, remainingSpawns;
- qboolean collision = qfalse;
- int collisionCount = 0;
- qboolean repeaterInRange = qfalse;
- int repeaterInRangeCount = 0;
- itemBuildError_t bpError;
- buildable_t spawn;
- buildable_t core;
- int spawnCount = 0;
- qboolean changed = qtrue;
-
- level.numBuildablesForRemoval = 0;
-
- if( team == TEAM_ALIENS )
- {
- remainingBP = G_GetBuildPoints( origin, team );
- remainingSpawns = level.numAlienSpawns;
- bpError = IBE_NOALIENBP;
- spawn = BA_A_SPAWN;
- core = BA_A_OVERMIND;
- }
- else if( team == TEAM_HUMANS )
- {
- if( buildable == BA_H_REACTOR || buildable == BA_H_REPEATER )
- remainingBP = level.humanBuildPoints;
- else
- remainingBP = G_GetBuildPoints( origin, team );
-
- remainingSpawns = level.numHumanSpawns;
- bpError = IBE_NOHUMANBP;
- spawn = BA_H_SPAWN;
- core = BA_H_REACTOR;
- }
- else
- {
- Com_Error( ERR_FATAL, "team is %d\n", team );
- return IBE_NONE;
- }
-
- // Simple non-marking case
- if( !g_markDeconstruct.integer )
+ int required;
+ int available;
+ int error;
+
+ required = BG_Buildable( buildable, cuboidSize )->buildPoints;
+
+ switch( BG_Buildable( buildable, NULL )->team )
{
- if( remainingBP - buildPoints < 0 )
- return bpError;
-
- // Check for buildable<->buildable collisions
- for( i = MAX_CLIENTS, ent = g_entities + i; i < level.num_entities; i++, ent++ )
- {
- if( ent->s.eType != ET_BUILDABLE )
- continue;
-
- if( G_BuildablesIntersect( buildable, origin, cuboidSize, ent->s.modelindex, ent->s.origin, ent->cuboidSize ) )
- return IBE_NOROOM;
-
- }
-
- return IBE_NONE;
+ case TEAM_ALIENS:
+ error = IBE_NOALIENBP;
+ available = G_GetBuildPoints( origin, TEAM_ALIENS );
+ break;
+
+ case TEAM_HUMANS:
+ error = IBE_NOHUMANBP;
+ if( !builder )
+ available = required; //always enough
+ else
+ //first RTG is free
+ if( buildable == BA_H_RTG && !G_IsRTGBuilt() )
+ available = INFINITE;
+ else
+ available = builder->ps.persistant[ PERS_BUILDPOINTS ];
+ break;
}
+
+ if( required > available )
+ return error;
+
+ return IBE_NONE;
- // Set buildPoints to the number extra that are required
- buildPoints -= remainingBP;
- // Build a list of buildable entities
+#if 0
+ // Check for buildable<->buildable collisions
+ // FIXME: is this check even needed?
for( i = MAX_CLIENTS, ent = g_entities + i; i < level.num_entities; i++, ent++ )
{
if( ent->s.eType != ET_BUILDABLE )
continue;
- collision = G_BuildablesIntersect( buildable, origin, cuboidSize, ent->s.modelindex, ent->s.origin, ent->cuboidSize );
-
- if( collision )
- {
- // Don't allow replacements at all
- if( g_markDeconstruct.integer == 1 )
- return IBE_NOROOM;
-
- // Only allow replacements of the same type
- if( g_markDeconstruct.integer == 2 && ent->s.modelindex != buildable )
- return IBE_NOROOM;
-
- // Any other setting means anything goes
-
- collisionCount++;
- }
-
- // Check if this is a repeater and it's in range
- if( buildable == BA_H_REPEATER &&
- buildable == ent->s.modelindex &&
- Distance( ent->s.origin, origin ) < REPEATER_BASESIZE )
- {
- repeaterInRange = qtrue;
- repeaterInRangeCount++;
- }
- else
- repeaterInRange = qfalse;
-
- // Don't allow marked buildables to be replaced in another zone,
- // unless the marked buildable isn't in a zone (and thus unpowered)
- if( team == TEAM_HUMANS &&
- buildable != BA_H_REACTOR &&
- buildable != BA_H_REPEATER &&
- ent->parentNode != G_PowerEntityForPoint( origin ) )
- continue;
-
- if( !ent->inuse )
- continue;
-
- if( ent->health <= 0 )
- continue;
-
- if( ent->buildableTeam != team )
- continue;
-
- // Explicitly disallow replacement of the core buildable with anything
- // other than the core buildable
- if( ent->s.modelindex == core && buildable != core )
- continue;
-
- // Don't allow a power source to be replaced by a dependant
- if( team == TEAM_HUMANS &&
- G_PowerEntityForPoint( origin ) == ent &&
- buildable != BA_H_REPEATER &&
- buildable != core )
- continue;
-
- // Don't include unpowered buildables
- if( !collision && !ent->powered )
- continue;
-
- if( ent->deconstruct )
- {
- level.markedBuildables[ numBuildables++ ] = ent;
-
- // Buildables that are marked here will always end up at the front of the
- // removal list, so just incrementing numBuildablesForRemoval is sufficient
- if( collision || repeaterInRange )
- {
- // Collided with something, so we definitely have to remove it or
- // it's a repeater that intersects the new repeater's power area,
- // so it must be removed
-
- if( collision )
- collisionCount--;
-
- if( repeaterInRange )
- repeaterInRangeCount--;
-
- if( ent->powered )
- pointsYielded += BG_Buildable( ent->s.modelindex, ent->cuboidSize )->buildPoints;
- level.numBuildablesForRemoval++;
- }
- else if( BG_Buildable( ent->s.modelindex, NULL )->uniqueTest &&
- ent->s.modelindex == buildable )
- {
- // If it's a unique buildable, it must be replaced by the same type
- if( ent->powered )
- pointsYielded += BG_Buildable( ent->s.modelindex, ent->cuboidSize )->buildPoints;
- level.numBuildablesForRemoval++;
- }
- }
- }
-
- numRequired = level.numBuildablesForRemoval;
-
- // We still need build points, but have no candidates for removal
- if( buildPoints > 0 && numBuildables == 0 )
- return bpError;
-
- // Collided with something we can't remove
- if( collisionCount > 0 )
- return IBE_NOROOM;
-
- // There are one or more repeaters we can't remove
- if( repeaterInRangeCount > 0 )
- return IBE_RPTPOWERHERE;
-
- // Sort the list
- cmpBuildable = buildable;
- VectorCopy( origin, cmpOrigin );
- VectorCopy( cuboidSize, cmpCuboid );
- qsort( level.markedBuildables, numBuildables, sizeof( level.markedBuildables[ 0 ] ),
- G_CompareBuildablesForRemoval );
-
- // Determine if there are enough markees to yield the required BP
- for( ; pointsYielded < buildPoints && level.numBuildablesForRemoval < numBuildables;
- level.numBuildablesForRemoval++ )
- {
- ent = level.markedBuildables[ level.numBuildablesForRemoval ];
- if( ent->powered )
- pointsYielded += BG_Buildable( ent->s.modelindex, ent->cuboidSize )->buildPoints;
+ if( G_BuildablesIntersect( buildable, origin, cuboidSize, ent->s.modelindex, ent->s.origin, ent->cuboidSize ) )
+ return IBE_NOROOM;
}
-
- // Do another pass to see if we can meet quota with fewer buildables
- // than we have now due to mismatches between priority and BP amounts
- // by repeatedly testing if we can chop off the first thing that isn't
- // required by rules of collision/uniqueness, which are always at the head
- while( changed && level.numBuildablesForRemoval > 1 &&
- level.numBuildablesForRemoval > numRequired )
- {
- int pointsUnYielded = 0;
- changed = qfalse;
- ent = level.markedBuildables[ numRequired ];
- if( ent->powered )
- pointsUnYielded = BG_Buildable( ent->s.modelindex, ent->cuboidSize )->buildPoints;
-
- if( pointsYielded - pointsUnYielded >= buildPoints )
- {
- pointsYielded -= pointsUnYielded;
- memmove( &level.markedBuildables[ numRequired ],
- &level.markedBuildables[ numRequired + 1 ],
- ( level.numBuildablesForRemoval - numRequired )
- * sizeof( gentity_t * ) );
- level.numBuildablesForRemoval--;
- changed = qtrue;
- }
- }
-
- for( i = 0; i < level.numBuildablesForRemoval; i++ )
- {
- if( level.markedBuildables[ i ]->s.modelindex == spawn )
- spawnCount++;
- }
-
- // Make sure we're not removing the last spawn
- if( !g_cheats.integer && remainingSpawns > 0 && ( remainingSpawns - spawnCount ) < 1 )
- return IBE_LASTSPAWN;
-
- // Not enough points yielded
- if( pointsYielded < buildPoints )
- return bpError;
- else
- return IBE_NONE;
+#endif
}
/*
@@ -3410,23 +3144,6 @@ static void G_SetBuildableLinkState( qboolean link )
}
}
-static void G_SetBuildableMarkedLinkState( qboolean link )
-{
- int i;
- gentity_t *ent;
-
- for( i = 0; i < level.numBuildablesForRemoval; i++ )
- {
- ent = level.markedBuildables[ i ];
- if( link )
- trap_LinkEntity( ent );
- else
- trap_UnlinkEntity( ent );
- }
-}
-
-
-
/*
================
G_CanBuild
@@ -3482,7 +3199,7 @@ itemBuildError_t G_CanBuild( gentity_t *ent, buildable_t buildable, int distance
contents = trap_PointContents( entity_origin, -1 );
- if( ( tempReason = G_SufficientBPAvailable( buildable, origin, cuboidSize ) ) != IBE_NONE )
+ if( ( tempReason = G_SufficientBPAvailable( ent->client, buildable, origin, cuboidSize ) ) != IBE_NONE )
reason = tempReason;
if( ent->client->ps.stats[ STAT_TEAM ] == TEAM_ALIENS )
@@ -3510,32 +3227,14 @@ itemBuildError_t G_CanBuild( gentity_t *ent, buildable_t buildable, int distance
else if( ent->client->ps.stats[ STAT_TEAM ] == TEAM_HUMANS )
{
//human criteria
-
- // Check for power
- if( G_IsPowered( entity_origin ) == BA_NONE )
- {
- //tell player to build a repeater to provide power
- if( buildable != BA_H_REACTOR && buildable != BA_H_REPEATER )
- reason = IBE_NOPOWERHERE;
- }
+ if( !G_PowerForPoint( origin ) &&
+ buildable != BA_H_RTG )
+ reason = IBE_NOPOWERHERE;
//this buildable requires a DCC
if( BG_Buildable( buildable, NULL )->dccTest && !G_IsDCCBuilt( ) )
reason = IBE_NODCC;
- //check that there is a parent reactor when building a repeater
- if( buildable == BA_H_REPEATER )
- {
- tempent = G_Reactor( );
-
- if( tempent == NULL ) // No reactor
- reason = IBE_RPTNOREAC;
- else if( g_markDeconstruct.integer && G_IsPowered( entity_origin ) == BA_H_REACTOR )
- reason = IBE_RPTPOWERHERE;
- else if( !g_markDeconstruct.integer && G_IsPowered( entity_origin ) )
- reason = IBE_RPTPOWERHERE;
- }
-
// Check permission to build here
if( tr1.surfaceFlags & SURF_NOHUMANBUILD || contents & CONTENTS_NOHUMANBUILD )
reason = IBE_PERMISSION;
@@ -3549,7 +3248,7 @@ itemBuildError_t G_CanBuild( gentity_t *ent, buildable_t buildable, int distance
if( BG_Buildable( buildable, NULL )->uniqueTest )
{
tempent = G_FindBuildable( buildable );
- if( tempent && !tempent->deconstruct )
+ if( tempent )
{
switch( buildable )
{
@@ -3570,18 +3269,12 @@ itemBuildError_t G_CanBuild( gentity_t *ent, buildable_t buildable, int distance
//check there is enough room to spawn from (presuming this is a spawn)
if( reason == IBE_NONE )
- {
- G_SetBuildableMarkedLinkState( qfalse );
if( G_CheckSpawnPoint( ENTITYNUM_NONE, origin, normal, buildable, NULL ) != NULL )
reason = IBE_NORMAL;
- G_SetBuildableMarkedLinkState( qtrue );
- }
//this item does not fit here
if( reason == IBE_NONE && ( tr2.startsolid || !COMPARE_FLOAT_EPSILON(tr3.fraction,1.0f) ) )
reason = IBE_NOROOM;
- if( reason != IBE_NONE )
- level.numBuildablesForRemoval = 0;
if( g_buildableDensityLimit.integer > 0 )
{
@@ -3661,12 +3354,11 @@ static gentity_t *G_Build( gentity_t *builder, buildable_t buildable,
{
gentity_t *built;
vec3_t localOrigin;
- char readable[ MAX_STRING_CHARS ];
char buildnums[ MAX_STRING_CHARS ];
buildLog_t *log;
qboolean cuboid;
- cuboid=BG_Buildable(buildable,NULL)->cuboid;
+ cuboid = BG_Buildable(buildable,NULL)->cuboid;
VectorCopy( origin, localOrigin );
@@ -3675,10 +3367,6 @@ static gentity_t *G_Build( gentity_t *builder, buildable_t buildable,
else
log = NULL;
- // Free existing buildables
- G_FreeMarkedBuildables( builder, readable, sizeof( readable ),
- buildnums, sizeof( buildnums ) );
-
// Spawn the buildable
built = G_Spawn();
built->s.eType = ET_BUILDABLE;
@@ -3692,13 +3380,13 @@ static gentity_t *G_Build( gentity_t *builder, buildable_t buildable,
if( !builder->client )
VectorMA( localOrigin, 1.0f, normal, localOrigin );
- if(cuboid)
+ if( cuboid )
{
- BG_CuboidBBox(cuboidSize,built->r.mins,built->r.maxs);
- VectorCopy(cuboidSize,&built->cuboidSize);
+ BG_CuboidBBox( cuboidSize, built->r.mins, built->r.maxs );
+ VectorCopy( cuboidSize, &built->cuboidSize );
}
else
- BG_BuildableBoundingBox(buildable,built->r.mins,built->r.maxs);
+ BG_BuildableBoundingBox( buildable, built->r.mins, built->r.maxs );
built->health = 1;
built->healthLeft = BG_Buildable( buildable, cuboidSize )->health-1;
@@ -3713,8 +3401,7 @@ static gentity_t *G_Build( gentity_t *builder, buildable_t buildable,
built->spawned = qfalse;
built->buildTime = built->s.time = level.time;
- // build instantly in cheat mode
- if( builder->client && (g_cheats.integer || g_instantBuild.integer) )
+ if( builder->client && g_instantBuild.integer )
{
built->health = BG_Buildable( buildable, cuboidSize )->health;
built->buildTime = built->s.time =
@@ -3804,16 +3491,34 @@ static gentity_t *G_Build( gentity_t *builder, buildable_t buildable,
case BA_H_REACTOR:
built->think = HReactor_Think;
built->die = HSpawn_Die;
- built->use = HRepeater_Use;
+ built->use = HSwitchable_Use;
built->powered = built->active = qtrue;
break;
case BA_H_REPEATER:
built->think = HRepeater_Think;
built->die = HRepeater_Die;
- built->use = HRepeater_Use;
+ built->use = HSwitchable_Use;
built->count = -1;
break;
+
+ case BA_H_CAPBANK:
+ built->think = HCapbank_Think;
+ built->die = HSpawn_Die;
+ built->use = HSwitchable_Use;
+ break;
+
+ case BA_H_RTG:
+ built->think = HRTG_Think;
+ built->die = HSpawn_Die;
+ built->use = HSwitchable_Use;
+ break;
+
+ case BA_H_REFINERY:
+ built->think = HRefinery_Think;
+ built->die = HSpawn_Die;
+ //built->use = HSwitchable_Use;
+ break;
default:
//erk
@@ -3839,15 +3544,14 @@ static gentity_t *G_Build( gentity_t *builder, buildable_t buildable,
G_SetOrigin( built, localOrigin );
- // roughly nudge the buildable onto the surface D:<
VectorScale( normal, -512.0f, built->s.pos.trDelta );
- if(BG_Buildable(buildable, NULL)->cuboid)
- VectorCopy(cuboidSize,built->s.angles);
+ if( BG_Buildable( buildable, NULL )->cuboid )
+ VectorCopy( cuboidSize,built->s.angles );
else
{
- VectorCopy( angles, built->s.angles );
- built->s.angles[ PITCH ] = 0.0f;
+ VectorCopy( angles, built->s.angles );
+ built->s.angles[ PITCH ] = 0.0f;
}
built->s.pos.trType = BG_Buildable( buildable, NULL )->traj;
@@ -3859,13 +3563,8 @@ static gentity_t *G_Build( gentity_t *builder, buildable_t buildable,
built->s.angles2[ YAW ] = angles[ YAW ];
built->s.angles2[ PITCH ] = MGTURRET_VERTICALCAP;
- if( BG_Buildable( buildable, NULL )->team == TEAM_ALIENS )
- {
- built->powered = qtrue;
- built->s.eFlags |= EF_B_POWERED;
- }
- else if( ( built->powered = G_FindPower( built, qfalse ) ) )
- built->s.eFlags |= EF_B_POWERED;
+ built->powered = qtrue;
+ built->s.eFlags |= EF_B_POWERED;
built->s.eFlags &= ~EF_B_SPAWNED;
@@ -3878,32 +3577,47 @@ static gentity_t *G_Build( gentity_t *builder, buildable_t buildable,
if( built->builtBy >= 0 )
G_SetBuildableAnim( built, BANIM_CONSTRUCT1, qtrue );
+ if( BG_Buildable( buildable, NULL )->team == TEAM_HUMANS )
+ {
+ //special case for the RTG unit that can be built w/o power
+ if( buildable == BA_H_RTG )
+ built->requiresPower = qfalse;
+ else
+ built->requiresPower = qtrue;
+
+ built->isPowerSource = qfalse;
+ built->resistance = PREBUILD_RESISTANCE;
+ if( BG_Buildable( buildable, NULL )->isPowerSource ||
+ buildable == BA_H_REPEATER )
+ built->active = qtrue; //spawn enabled
+ }
+
+ // subtract build points
+ if( buildable != BA_H_RTG || G_IsRTGBuilt( ) ) //first RTG is free
+ if( builder && builder->client )
+ builder->client->ps.persistant[ PERS_BUILDPOINTS ] -= BG_Buildable( buildable, cuboidSize )->buildPoints;
+
+ BG_CuboidPackHealthSafe( built->s.modelindex, &built->s, built->health );
+
trap_LinkEntity( built );
if( builder && builder->client )
{
G_TeamCommand( builder->client->ps.stats[ STAT_TEAM ],
- va( "print \"%s ^2built^7 by %s%s%s\n\"",
- G_CuboidName(built->s.modelindex,cuboidSize,qfalse),
- builder->client->pers.netname,
- ( readable[ 0 ] ) ? "^7, ^3replacing^7 " : "",
- readable ) );
- G_LogPrintf( "Construct: %d %d %s%s: %s" S_COLOR_WHITE " is building "
- "%s%s%s\n",
+ va( "print \"%s ^2built^7 by %s\n\"",
+ G_CuboidName( built->s.modelindex, cuboidSize, qfalse ),
+ builder->client->pers.netname ) );
+ G_LogPrintf( "Construct: %d %d %s%s: %s" S_COLOR_WHITE " is building %s\n",
builder - g_entities,
built - g_entities,
BG_Buildable( built->s.modelindex, NULL )->name,
buildnums,
builder->client->pers.netname,
- G_CuboidName(built->s.modelindex,built->cuboidSize,qtrue),
- readable[ 0 ] ? ", replacing " : "",
- readable );
+ G_CuboidName( built->s.modelindex, built->cuboidSize, qtrue ) );
}
if( log )
G_BuildLogSet( log, built );
-
- BG_CuboidPackHealthSafe(built->s.modelindex,&built->s,built->health);
return built;
}
@@ -4026,6 +3740,8 @@ static gentity_t *G_FinishSpawningBuildable( gentity_t *ent, qboolean force )
built->health = BG_Buildable( buildable, built->cuboidSize )->health;
built->s.eFlags |= EF_B_SPAWNED;
+ G_SetupPowerEntity( built );
+
// drop towards normal surface
VectorScale( built->s.origin2, -4096.0f, dest );
VectorAdd( dest, built->s.origin, dest );
@@ -4407,8 +4123,6 @@ buildLog_t *G_BuildLogNew( gentity_t *actor, buildFate_t fate )
void G_BuildLogSet( buildLog_t *log, gentity_t *ent )
{
log->modelindex = ent->s.modelindex;
- log->deconstruct = log->deconstruct;
- log->deconstructTime = ent->deconstructTime;
VectorCopy( ent->s.pos.trBase, log->origin );
VectorCopy( ent->s.angles, log->angles );
VectorCopy( ent->s.origin2, log->origin2 );
@@ -4464,8 +4178,6 @@ void G_BuildLogRevertThink( gentity_t *ent )
}
built = G_FinishSpawningBuildable( ent, qtrue );
- if( ( built->deconstruct = ent->deconstruct ) )
- built->deconstructTime = ent->deconstructTime;
built->buildTime = built->s.time = 0;
G_KillBox( built );
@@ -4482,8 +4194,6 @@ void G_BuildLogRevert( int id )
int i;
vec3_t dist;
- level.numBuildablesForRemoval = 0;
-
level.numBuildLogs -= level.buildId - id;
while( level.buildId > id )
{
@@ -4521,8 +4231,6 @@ void G_BuildLogRevert( int id )
VectorCopy( log->origin2, builder->s.origin2 );
VectorCopy( log->angles2, builder->s.angles2 );
builder->s.modelindex = log->modelindex;
- builder->deconstruct = log->deconstruct;
- builder->deconstructTime = log->deconstructTime;
builder->think = G_BuildLogRevertThink;
builder->nextthink = level.time + FRAMETIME;
@@ -4539,27 +4247,6 @@ void G_BuildLogRevert( int id )
level.alienBuildPointQueue =
MAX( 0, level.alienBuildPointQueue - value );
}
- else
- {
- if( log->powerSource == BA_H_REACTOR )
- {
- level.humanBuildPointQueue =
- MAX( 0, level.humanBuildPointQueue - value );
- }
- else if( log->powerSource == BA_H_REPEATER )
- {
- gentity_t *source;
- buildPointZone_t *zone;
-
- source = G_PowerEntityForPoint( log->origin );
- if( source && source->usesBuildPointZone )
- {
- zone = &level.buildPointZones[ source->buildPointZone ];
- zone->queuedBuildPoints =
- MAX( 0, zone->queuedBuildPoints - value );
- }
- }
- }
}
}
}
diff --git a/src/game/g_client.c b/src/game/g_client.c
index 7596ea1..a3c7a67 100644
--- a/src/game/g_client.c
+++ b/src/game/g_client.c
@@ -1482,6 +1482,7 @@ void ClientSpawn( gentity_t *ent, gentity_t *spawn, vec3_t origin, vec3_t angles
for( i = 0; i < MAX_PERSISTANT; i++ )
persistant[ i ] = client->ps.persistant[ i ];
+ persistant[ PERS_BUILDPOINTS ] = 0; // clear buildpoints
eventSequence = client->ps.eventSequence;
memset( client, 0, sizeof( *client ) );
@@ -1795,11 +1796,12 @@ void ClientDisconnect( int clientNum )
G_RelayCuboidToSpectators
Called everytime a player changes his cuboid size.
-A server command is issued to everyone spectating him
-so that their clients can know the cuboid size as well.
============
*/
-void G_RelayCuboidToSpectators(gentity_t *self)
+void G_RelayCuboidToSpectators( gentity_t *self )
{
+ self->client->ps.misc[ MISC_CUBOID_X ] = self->client->cuboidSelection[ 0 ] * 10;
+ self->client->ps.misc[ MISC_CUBOID_Y ] = self->client->cuboidSelection[ 1 ] * 10;
+ self->client->ps.misc[ MISC_CUBOID_Z ] = self->client->cuboidSelection[ 2 ] * 10;
}
diff --git a/src/game/g_cmds.c b/src/game/g_cmds.c
index 2c15638..c1da4e0 100644
--- a/src/game/g_cmds.c
+++ b/src/game/g_cmds.c
@@ -1363,7 +1363,7 @@ void Cmd_CallVote_f( gentity_t *ent )
}
else if( !Q_stricmp( vote, "map_restart" ) )
{
- if( level.time / 60000 >= g_restartVoteTimelimit.integer )
+ if( g_restartVoteTimelimit.integer && ( level.time - level.startTime ) / 60000 >= g_restartVoteTimelimit.integer )
{
trap_SendServerCommand( ent-g_entities,
va( "print \"%s: It's not allowed to call a restart vote after %i minute%s.\n\"",
@@ -1377,7 +1377,7 @@ void Cmd_CallVote_f( gentity_t *ent )
}
else if( !Q_stricmp( vote, "map" ) )
{
- if( level.time / 60000 >= g_mapVoteTimelimit.integer )
+ if( g_mapVoteTimelimit.integer && ( level.time - level.startTime ) / 60000 >= g_mapVoteTimelimit.integer )
{
trap_SendServerCommand( ent-g_entities,
va( "print \"%s: It's not allowed to call a map vote after %i minute%s. Call a ^1nextmap^7 vote instead\n\"",
@@ -1434,7 +1434,7 @@ void Cmd_CallVote_f( gentity_t *ent )
}
else if( !Q_stricmp( vote, "sudden_death" ) )
{
- if(!g_suddenDeathVotePercent.integer)
+ if( !g_suddenDeathVotePercent.integer )
{
trap_SendServerCommand( ent-g_entities,
"print \"Sudden Death votes have been disabled\n\"" );
@@ -1918,6 +1918,7 @@ void Cmd_Destroy_f( gentity_t *ent )
char cmd[ 12 ];
qboolean deconstruct = qtrue;
qboolean lastSpawn = qfalse;
+ int bp;
if( ent->client->pers.namelog->denyBuild )
{
@@ -1942,22 +1943,21 @@ void Cmd_Destroy_f( gentity_t *ent )
( ( ent->client->ps.weapon >= WP_ABUILD ) &&
( ent->client->ps.weapon <= WP_HBUILD ) ) )
{
+ //give some BP back: 20% for a dead buildable, 80% for a new one
+ bp = BG_Buildable( traceEnt->s.modelindex, traceEnt->cuboidSize )->buildPoints;
+ bp *= MAX( (float)traceEnt->health, 0.0f ) /
+ BG_Buildable( traceEnt->s.modelindex, traceEnt->cuboidSize )->health * 0.6f + 0.2f;
+
// Always let the builder prevent the explosion
if( traceEnt->health <= 0 )
{
+ ent->client->ps.persistant[ PERS_BUILDPOINTS ] += bp;
G_QueueBuildPoints( traceEnt );
G_RewardAttackers( traceEnt );
G_FreeEntity( traceEnt );
return;
}
- // Cancel deconstruction (unmark)
- if( deconstruct && g_markDeconstruct.integer && traceEnt->deconstruct )
- {
- traceEnt->deconstruct = qfalse;
- return;
- }
-
// Prevent destruction of the last spawn
if( ent->client->pers.teamSelection == TEAM_ALIENS &&
traceEnt->s.modelindex == BA_A_SPAWN )
@@ -1972,8 +1972,7 @@ void Cmd_Destroy_f( gentity_t *ent )
lastSpawn = qtrue;
}
- if( lastSpawn && !g_cheats.integer &&
- !g_markDeconstruct.integer )
+ if( lastSpawn && !g_cheats.integer )
{
G_TriggerMenu( ent->client->ps.clientNum, MN_B_LASTSPAWN );
return;
@@ -1986,9 +1985,7 @@ void Cmd_Destroy_f( gentity_t *ent )
return;
}
- if( !g_markDeconstruct.integer ||
- ( ent->client->pers.teamSelection == TEAM_HUMANS &&
- !G_FindPower( traceEnt, qtrue ) ) )
+ if( ent->client->pers.teamSelection == TEAM_HUMANS )
{
if( ent->client->buildTimer )
{
@@ -2004,21 +2001,18 @@ void Cmd_Destroy_f( gentity_t *ent )
G_Damage( traceEnt, ent, ent, forward, tr.endpos,
traceEnt->health, 0, MOD_SUICIDE );
}
- else if( g_markDeconstruct.integer &&
- ( ent->client->pers.teamSelection != TEAM_HUMANS ||
- G_FindPower( traceEnt , qtrue ) || lastSpawn ) )
- {
- traceEnt->deconstruct = qtrue; // Mark buildable for deconstruction
- traceEnt->deconstructTime = level.time;
- }
else
{
if( !g_cheats.integer && !g_instantBuild.integer ) // add a bit to the build timer
{
- ent->client->buildTimer +=
- BG_Buildable( traceEnt->s.modelindex, traceEnt->cuboidSize )->buildTime / 4;
- G_RecalcBuildTimer(ent->client);
+ ent->client->buildTimer += BG_Buildable( traceEnt->s.modelindex, traceEnt->cuboidSize )->buildTime / 4;
+ G_RecalcBuildTimer(ent->client);
}
+
+ ent->client->ps.persistant[ PERS_BUILDPOINTS ] += bp;
+ if( ent->client->ps.persistant[ PERS_BUILDPOINTS ] > CKIT_STORAGE )
+ ent->client->ps.persistant[ PERS_BUILDPOINTS ] = CKIT_STORAGE;
+
G_Damage( traceEnt, ent, ent, forward, tr.endpos,
traceEnt->health, 0, MOD_DECONSTRUCT );
G_FreeEntity( traceEnt );
@@ -2782,6 +2776,69 @@ void Cmd_Reload_f( gentity_t *ent )
playerState_t *ps = &ent->client->ps;
int ammo;
+ // reload transfers mass in case of CKit
+ if( ps->weapon == WP_HBUILD )
+ {
+ trace_t trace;
+ vec3_t eyes, view, point;
+ gentity_t *other;
+
+ #define USE_OBJECT_RANGE 100
+
+ // look for object infront of player
+ AngleVectors( ent->client->ps.viewangles, view, NULL, NULL );
+ BG_GetClientViewOrigin( &ent->client->ps, eyes );
+ VectorMA( eyes, USE_OBJECT_RANGE, view, point );
+
+ trap_Trace( &trace, ent->client->ps.origin, NULL, NULL, point, ent->s.number, MASK_SHOT );
+ other = &g_entities[ trace.entityNum ];
+
+ // transfer FROM buildable
+ if( other->s.eType == ET_BUILDABLE )
+ {
+ if( other->buildableTeam == TEAM_HUMANS &&
+ BG_Buildable( other->s.modelindex, NULL )->hasStorage &&
+ other->spawned && other->health >= 0 &&
+ other->storedBP > 0 )
+ {
+ float bp;
+
+ bp = floor( MIN( MIN( other->storedBP, 4 ),
+ CKIT_STORAGE - ent->client->ps.persistant[ PERS_BUILDPOINTS ] ) );
+
+ other->storedBP -= bp;
+ ent->client->ps.persistant[ PERS_BUILDPOINTS ] += bp;
+
+ if( bp )
+ G_AddEvent( ent, EV_RPTUSE_SOUND, 0 );
+ else
+ G_AddEvent( ent, EV_BUILD_REPAIRED, 0 );
+ }
+ }
+ //transfer TO another player
+ else if( other->client )
+ {
+ if( BG_GetPlayerWeapon( &other->client->ps ) == WP_HBUILD &&
+ other->client->ps.stats[ STAT_HEALTH ] >= 0 )
+ {
+ int bp;
+
+ bp = MIN( MIN( ent->client->ps.persistant[ PERS_BUILDPOINTS ], 4 ),
+ CKIT_STORAGE - other->client->ps.persistant[ PERS_BUILDPOINTS ] );
+
+ ent->client->ps.persistant[ PERS_BUILDPOINTS ] -= bp;
+ other->client->ps.persistant[ PERS_BUILDPOINTS ] += bp;
+
+ if( bp )
+ G_AddEvent( ent, EV_RPTUSE_SOUND, 0 );
+ else
+ G_AddEvent( ent, EV_BUILD_REPAIRED, 0 );
+ }
+ }
+
+ return;
+ }
+
// weapon doesn't ever need reloading
if( BG_Weapon( ps->weapon )->infiniteAmmo )
return;
@@ -3305,7 +3362,6 @@ Cmd_Debug1_f
*/
void Cmd_Debug1_f( gentity_t *other )
{
- other->client->ps.stats[ STAT_SHAKE ] += 70;
}
/*
diff --git a/src/game/g_combat.c b/src/game/g_combat.c
index fe5d607..6acf6b7 100644
--- a/src/game/g_combat.c
+++ b/src/game/g_combat.c
@@ -195,17 +195,18 @@ float G_RewardAttackers( gentity_t *self )
AddScore( player, stageValue );
- // killing buildables earns score, but not credits
- if( self->s.eType != ET_BUILDABLE )
- {
- G_AddCreditToClient( player->client, stageValue, qtrue );
+ if( self->s.eType == ET_BUILDABLE )
+ stageValue *= g_buildableValueModifier.value;
+ else
+ stageValue *= g_playerValueModifier.value;
+
+ G_AddCreditToClient( player->client, stageValue, qtrue );
- // add to stage counters
- if( player->client->ps.stats[ STAT_TEAM ] == TEAM_ALIENS )
- alienCredits += stageValue;
- else if( player->client->ps.stats[ STAT_TEAM ] == TEAM_HUMANS )
- humanCredits += stageValue;
- }
+ // add to stage counters
+ if( player->client->ps.stats[ STAT_TEAM ] == TEAM_ALIENS )
+ alienCredits += stageValue;
+ else if( player->client->ps.stats[ STAT_TEAM ] == TEAM_HUMANS )
+ humanCredits += stageValue;
}
self->credits[ i ] = 0;
}
@@ -1069,7 +1070,7 @@ void G_Damage( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker,
}
// base is under attack warning if DCC'd
- if( targ->buildableTeam == TEAM_HUMANS && G_FindDCC( targ ) &&
+ if( targ->buildableTeam == TEAM_HUMANS && G_IsDCCBuilt( ) &&
level.time > level.humanBaseAttackTimer )
{
level.humanBaseAttackTimer = level.time + DC_ATTACK_PERIOD;
@@ -1085,7 +1086,8 @@ void G_Damage( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker,
// add to the attacker's hit counter
if( attacker->client && targ != attacker && targ->health > 0
&& targ->s.eType != ET_MISSILE
- && targ->s.eType != ET_GENERAL )
+ && targ->s.eType != ET_GENERAL
+ && mod != MOD_DECONSTRUCT )
{
if( OnSameTeam( targ, attacker ) )
attacker->client->ps.persistant[ PERS_HITS ]--;
diff --git a/src/game/g_local.h b/src/game/g_local.h
index 001c7d9..944140f 100644
--- a/src/game/g_local.h
+++ b/src/game/g_local.h
@@ -198,16 +198,12 @@ struct gentity_s
gentity_t *parentNode; // for creep and defence/spawn dependencies
qboolean active; // for power repeater, but could be useful elsewhere
qboolean locked; // used for turret tracking
- qboolean powered; // for human buildables
int builtBy; // clientNum of person that built this
- int dcc; // number of controlling dccs
qboolean spawned; // whether or not this buildable has finished spawning
int shrunkTime; // time when a barricade shrunk or zero
int buildTime; // when this buildable was built
int animTime; // last animation change
int time1000; // timer evaluated every second
- qboolean deconstruct; // deconstruct if no BP left
- int deconstructTime; // time at which structure marked
int overmindAttackTimer;
int overmindDyingTimer;
int overmindSpawnsTimer;
@@ -243,10 +239,24 @@ struct gentity_s
qboolean pointAgainstWorld; // don't use the bbox for map collisions
- int buildPointZone; // index for zone
- int usesBuildPointZone; // does it use a zone?
+ vec3_t cuboidSize;
- vec3_t cuboidSize;
+ //power grid
+ qboolean requiresPower; // false for telenodes, cuboids, etc.
+ qboolean isPowerSource; // true for all active elements (including the capbank)
+
+ int powerNetwork; // which network is it in (0 is no network)
+ qboolean powered; // is this buildable powered?
+ qboolean surge; // true if the buildable requests high amount of power (resistance=surgeResistance)
+ // IMPORTANT NOTE: it should NOT depend on anything power-related to avoid
+ // unstable network states
+ qboolean surgePowered; // is surge powered?
+ float voltage; // voltage drop (load) or gain (source)
+ float current; // current flow
+ float resistance; // resistance (for sources it's their internal resistance)
+
+ //mass
+ float storedBP;
};
typedef enum
@@ -485,16 +495,6 @@ void G_PrintSpawnQueue( spawnQueue_t *sq );
#define MAX_DAMAGE_REGION_TEXT 8192
#define MAX_DAMAGE_REGIONS 16
-// build point zone
-typedef struct
-{
- int active;
-
- int totalBuildPoints;
- int queuedBuildPoints;
- int nextQueueTime;
-} buildPointZone_t;
-
// store locational damage regions
typedef struct damageRegion_s
{
@@ -641,14 +641,6 @@ typedef struct
int alienBuildPoints;
int alienBuildPointQueue;
int alienNextQueueTime;
- int humanBuildPoints;
- int humanBuildPointQueue;
- int humanNextQueueTime;
-
- buildPointZone_t *buildPointZones;
-
- gentity_t *markedBuildables[ MAX_GENTITIES ];
- int numBuildablesForRemoval;
int alienKills;
int humanKills;
@@ -801,8 +793,8 @@ gentity_t *G_CheckSpawnPoint( int spawnNum, const vec3_t origin,
buildable_t G_IsPowered( vec3_t origin );
qboolean G_IsDCCBuilt( void );
-int G_FindDCC( gentity_t *self );
-gentity_t *G_Reactor( void );
+qboolean G_IsRTGBuilt( void );
+qboolean G_FindDCC( gentity_t *self );
gentity_t *G_Overmind( void );
qboolean G_FindCreep( gentity_t *self );
@@ -823,12 +815,7 @@ void G_BaseSelfDestruct( team_t team );
int G_NextQueueTime( int queuedBP, int totalBP, int queueBaseRate );
void G_QueueBuildPoints( gentity_t *self );
int G_GetBuildPoints( const vec3_t pos, team_t team );
-int G_GetMarkedBuildPoints( const vec3_t pos, team_t team );
qboolean G_FindPower( gentity_t *self, qboolean searchUnspawned );
-gentity_t *G_PowerEntityForPoint( const vec3_t origin );
-gentity_t *G_PowerEntityForEntity( gentity_t *ent );
-gentity_t *G_RepeaterEntityForPoint( vec3_t origin );
-gentity_t *G_InPowerZone( gentity_t *self );
buildLog_t *G_BuildLogNew( gentity_t *actor, buildFate_t fate );
void G_BuildLogSet( buildLog_t *log, gentity_t *ent );
void G_BuildLogAuto( gentity_t *actor, gentity_t *buildable, buildFate_t fate );
@@ -836,6 +823,7 @@ void G_BuildLogRevert( int id );
const char *G_CuboidName(buildable_t buildable, const vec3_t cuboidSize, qboolean verbose);
void G_LayoutBuildItem( buildable_t buildable, vec3_t origin, vec3_t angles, vec3_t origin2, vec3_t angles2 );
void G_RemoveUnbuiltBuildables( gentity_t *self );
+void G_UpdatePowerGrid( float dt );
//
// g_utils.c
@@ -1158,11 +1146,6 @@ extern vmCvar_t pmove_msec;
extern vmCvar_t g_alienBuildPoints;
extern vmCvar_t g_alienBuildQueueTime;
-extern vmCvar_t g_humanBuildPoints;
-extern vmCvar_t g_humanBuildQueueTime;
-extern vmCvar_t g_humanRepeaterBuildPoints;
-extern vmCvar_t g_humanRepeaterBuildQueueTime;
-extern vmCvar_t g_humanRepeaterMaxZones;
extern vmCvar_t g_humanStage;
extern vmCvar_t g_humanCredits;
extern vmCvar_t g_humanMaxStage;
@@ -1182,8 +1165,6 @@ extern vmCvar_t g_disabledEquipment;
extern vmCvar_t g_disabledClasses;
extern vmCvar_t g_disabledBuildables;
-extern vmCvar_t g_markDeconstruct;
-
extern vmCvar_t g_debugMapRotation;
extern vmCvar_t g_currentMapRotation;
extern vmCvar_t g_mapRotationNodes;
@@ -1227,6 +1208,11 @@ extern vmCvar_t g_cuboidHealthLimit;
extern vmCvar_t g_buildableDensityLimit;
extern vmCvar_t g_buildableDensityLimitRange;
+extern vmCvar_t g_buildableValueModifier;
+extern vmCvar_t g_playerValueModifier;
+extern vmCvar_t g_massYieldModifier;
+extern vmCvar_t g_voltageModifier;
+
void trap_Print( const char *fmt );
void trap_Error( const char *fmt );
diff --git a/src/game/g_main.c b/src/game/g_main.c
index 0f9c31c..1cbf897 100644
--- a/src/game/g_main.c
+++ b/src/game/g_main.c
@@ -86,11 +86,6 @@ vmCvar_t g_maxNameChanges;
vmCvar_t g_alienBuildPoints;
vmCvar_t g_alienBuildQueueTime;
-vmCvar_t g_humanBuildPoints;
-vmCvar_t g_humanBuildQueueTime;
-vmCvar_t g_humanRepeaterBuildPoints;
-vmCvar_t g_humanRepeaterBuildQueueTime;
-vmCvar_t g_humanRepeaterMaxZones;
vmCvar_t g_humanStage;
vmCvar_t g_humanCredits;
vmCvar_t g_humanMaxStage;
@@ -110,8 +105,6 @@ vmCvar_t g_disabledEquipment;
vmCvar_t g_disabledClasses;
vmCvar_t g_disabledBuildables;
-vmCvar_t g_markDeconstruct;
-
vmCvar_t g_debugMapRotation;
vmCvar_t g_currentMapRotation;
vmCvar_t g_mapRotationNodes;
@@ -158,6 +151,11 @@ vmCvar_t g_cuboidMode;
vmCvar_t g_buildableDensityLimit;
vmCvar_t g_buildableDensityLimitRange;
+vmCvar_t g_buildableValueModifier;
+vmCvar_t g_playerValueModifier;
+vmCvar_t g_massYieldModifier;
+vmCvar_t g_voltageModifier;
+
// copy cvars that can be set in worldspawn so they can be restored later
static char cv_gravity[ MAX_CVAR_VALUE_STRING ];
static char cv_humanMaxStage[ MAX_CVAR_VALUE_STRING ];
@@ -232,11 +230,6 @@ static cvarTable_t gameCvarTable[ ] =
{ &g_alienBuildPoints, "g_alienBuildPoints", DEFAULT_ALIEN_BUILDPOINTS, 0, 0, qfalse },
{ &g_alienBuildQueueTime, "g_alienBuildQueueTime", DEFAULT_ALIEN_QUEUE_TIME, CVAR_ARCHIVE, 0, qfalse },
- { &g_humanBuildPoints, "g_humanBuildPoints", DEFAULT_HUMAN_BUILDPOINTS, 0, 0, qfalse },
- { &g_humanBuildQueueTime, "g_humanBuildQueueTime", DEFAULT_HUMAN_QUEUE_TIME, CVAR_ARCHIVE, 0, qfalse },
- { &g_humanRepeaterBuildPoints, "g_humanRepeaterBuildPoints", DEFAULT_HUMAN_REPEATER_BUILDPOINTS, CVAR_ARCHIVE, 0, qfalse },
- { &g_humanRepeaterMaxZones, "g_humanRepeaterMaxZones", DEFAULT_HUMAN_REPEATER_MAX_ZONES, CVAR_ARCHIVE, 0, qfalse },
- { &g_humanRepeaterBuildQueueTime, "g_humanRepeaterBuildQueueTime", DEFAULT_HUMAN_REPEATER_QUEUE_TIME, CVAR_ARCHIVE, 0, qfalse },
{ &g_humanStage, "g_humanStage", "0", 0, 0, qfalse },
{ &g_humanCredits, "g_humanCredits", "0", 0, 0, qfalse },
{ &g_humanMaxStage, "g_humanMaxStage", DEFAULT_HUMAN_MAX_STAGE, 0, 0, qfalse, cv_humanMaxStage },
@@ -261,8 +254,6 @@ static cvarTable_t gameCvarTable[ ] =
{ &g_floodMaxDemerits, "g_floodMaxDemerits", "5000", CVAR_ARCHIVE, 0, qfalse },
{ &g_floodMinTime, "g_floodMinTime", "2000", CVAR_ARCHIVE, 0, qfalse },
- { &g_markDeconstruct, "g_markDeconstruct", "3", CVAR_SERVERINFO | CVAR_ARCHIVE, 0, qtrue },
-
{ &g_debugMapRotation, "g_debugMapRotation", "0", 0, 0, qfalse },
{ &g_currentMapRotation, "g_currentMapRotation", "-1", 0, 0, qfalse }, // -1 = NOT_ROTATING
{ &g_mapRotationNodes, "g_mapRotationNodes", "", CVAR_ROM, 0, qfalse },
@@ -301,7 +292,12 @@ static cvarTable_t gameCvarTable[ ] =
{ &g_cuboidMode, "g_cuboidMode", "0", CVAR_ARCHIVE, 0, qfalse },
{ &g_buildableDensityLimit, "g_buildableDensityLimit", "0", CVAR_ARCHIVE | CVAR_SERVERINFO, 0, qfalse },
- { &g_buildableDensityLimitRange, "g_buildableDensityLimitRange", "0", CVAR_ARCHIVE | CVAR_SERVERINFO, 0, qfalse }
+ { &g_buildableDensityLimitRange, "g_buildableDensityLimitRange", "0", CVAR_ARCHIVE | CVAR_SERVERINFO, 0, qfalse },
+
+ { &g_playerValueModifier, "g_playerValueModifier", "0.5", CVAR_ARCHIVE | CVAR_SERVERINFO, 0, qfalse },
+ { &g_buildableValueModifier, "g_buildableValueModifier", "0.16", CVAR_ARCHIVE | CVAR_SERVERINFO, 0, qfalse },
+ { &g_massYieldModifier, "g_massYieldModifier", "1", CVAR_ARCHIVE | CVAR_SERVERINFO, 0, qfalse },
+ { &g_voltageModifier, "g_voltageModifier", "1.0", CVAR_ARCHIVE | CVAR_SERVERINFO }
};
static int gameCvarTableSize = sizeof( gameCvarTable ) / sizeof( gameCvarTable[ 0 ] );
@@ -1197,7 +1193,6 @@ void G_CalculateBuildPoints( void )
{
int i;
buildable_t buildable;
- buildPointZone_t *zone;
// BP queue updates
while( level.alienBuildPointQueue > 0 &&
@@ -1209,15 +1204,6 @@ void G_CalculateBuildPoints( void )
g_alienBuildQueueTime.integer );
}
- while( level.humanBuildPointQueue > 0 &&
- level.humanNextQueueTime < level.time )
- {
- level.humanBuildPointQueue--;
- level.humanNextQueueTime += G_NextQueueTime( level.humanBuildPointQueue,
- g_humanBuildPoints.integer,
- g_humanBuildQueueTime.integer );
- }
-
// Sudden Death checks
if( G_TimeTilSuddenDeath( ) <= 0 && level.suddenDeathWarning < TW_PASSED )
{
@@ -1226,7 +1212,6 @@ void G_CalculateBuildPoints( void )
trap_SendServerCommand( -1, "print \"Beginning Sudden Death.\n\"" );
trap_SendServerCommand( -1, "announce suddendeath" );
level.suddenDeathWarning = TW_PASSED;
- G_ClearDeconMarks( );
// Clear blueprints, or else structs that cost 0 BP can still be built after SD
for( i = 0; i < level.maxclients; i++ )
@@ -1246,101 +1231,26 @@ void G_CalculateBuildPoints( void )
level.suddenDeathWarning = TW_IMMINENT;
}
- level.humanBuildPoints = g_humanBuildPoints.integer - level.humanBuildPointQueue;
level.alienBuildPoints = g_alienBuildPoints.integer - level.alienBuildPointQueue;
- // Reset buildPointZones
- for( i = 0; i < g_humanRepeaterMaxZones.integer; i++ )
- {
- buildPointZone_t *zone = &level.buildPointZones[ i ];
-
- zone->active = qfalse;
- zone->totalBuildPoints = g_humanRepeaterBuildPoints.integer;
- }
-
// Iterate through entities
for( i = MAX_CLIENTS; i < level.num_entities; i++ )
{
gentity_t *ent = &g_entities[ i ];
- buildPointZone_t *zone;
buildable_t buildable;
int cost;
if( ent->s.eType != ET_BUILDABLE || ent->s.eFlags & EF_DEAD )
continue;
- // mark a zone as active
- if( ent->usesBuildPointZone )
- {
- assert( ent->buildPointZone >= 0 && ent->buildPointZone < g_humanRepeaterMaxZones.integer );
-
- zone = &level.buildPointZones[ ent->buildPointZone ];
- zone->active = qtrue;
- }
-
// Subtract the BP from the appropriate pool
buildable = ent->s.modelindex;
cost = BG_Buildable( buildable, ent->cuboidSize )->buildPoints;
if( ent->buildableTeam == TEAM_ALIENS )
level.alienBuildPoints -= cost;
- if( buildable == BA_H_REPEATER )
- level.humanBuildPoints -= cost;
- else if( buildable != BA_H_REACTOR )
- {
- gentity_t *power = G_PowerEntityForEntity( ent );
-
- if( power )
- {
- if( power->s.modelindex == BA_H_REACTOR )
- level.humanBuildPoints -= cost;
- else if( power->s.modelindex == BA_H_REPEATER && power->usesBuildPointZone )
- level.buildPointZones[ power->buildPointZone ].totalBuildPoints -= cost;
- }
- }
}
- // Finally, update repeater zones and their queues
- // note that this has to be done after the used BP is calculated
- for( i = MAX_CLIENTS; i < level.num_entities; i++ )
- {
- gentity_t *ent = &g_entities[ i ];
-
- if( ent->s.eType != ET_BUILDABLE || ent->s.eFlags & EF_DEAD ||
- ent->buildableTeam != TEAM_HUMANS )
- continue;
-
- buildable = ent->s.modelindex;
-
- if( buildable != BA_H_REPEATER )
- continue;
-
- if( ent->usesBuildPointZone && level.buildPointZones[ ent->buildPointZone ].active )
- {
- zone = &level.buildPointZones[ ent->buildPointZone ];
-
- if( G_TimeTilSuddenDeath( ) > 0 )
- {
- // BP queue updates
- while( zone->queuedBuildPoints > 0 &&
- zone->nextQueueTime < level.time )
- {
- zone->queuedBuildPoints--;
- zone->nextQueueTime += G_NextQueueTime( zone->queuedBuildPoints,
- zone->totalBuildPoints,
- g_humanRepeaterBuildQueueTime.integer );
- }
- }
- else
- {
- zone->totalBuildPoints = zone->queuedBuildPoints = 0;
- }
- }
- }
-
- if( level.humanBuildPoints < 0 )
- level.humanBuildPoints = 0;
-
if( level.alienBuildPoints < 0 )
level.alienBuildPoints = 0;
}
@@ -2338,14 +2248,6 @@ void CheckCvars( void )
trap_Cvar_Set( "g_needpass", "0" );
}
- // Unmark any structures for deconstruction when
- // the server setting is changed
- if( g_markDeconstruct.modificationCount != lastMarkDeconModCount )
- {
- lastMarkDeconModCount = g_markDeconstruct.modificationCount;
- G_ClearDeconMarks( );
- }
-
// If we change g_suddenDeathTime during a map, we need to update
// when sd will begin
if( g_suddenDeathTime.modificationCount != lastSDTimeModCount )
@@ -2354,24 +2256,6 @@ void CheckCvars( void )
level.suddenDeathBeginTime = g_suddenDeathTime.integer * 60000;
}
- // If the number of zones changes, we need a new array
- if( g_humanRepeaterMaxZones.integer != lastNumZones )
- {
- buildPointZone_t *newZones;
- size_t newsize = g_humanRepeaterMaxZones.integer * sizeof( buildPointZone_t );
- size_t oldsize = lastNumZones * sizeof( buildPointZone_t );
-
- newZones = BG_Alloc( newsize );
- if( level.buildPointZones )
- {
- Com_Memcpy( newZones, level.buildPointZones, MIN( oldsize, newsize ) );
- BG_Free( level.buildPointZones );
- }
-
- level.buildPointZones = newZones;
- lastNumZones = g_humanRepeaterMaxZones.integer;
- }
-
level.frameMsec = trap_Milliseconds( );
}
@@ -2586,6 +2470,9 @@ void G_RunFrame( int levelTime )
G_SpawnClients( TEAM_HUMANS );
G_CalculateAvgPlayers( );
G_UpdateZaps( msec );
+
+ // update the power grid
+ G_UpdatePowerGrid( 0.001f * msec );
// see if it is time to end the level
CheckExitRules( );
diff --git a/src/game/g_weapon.c b/src/game/g_weapon.c
index 4a28083..e4399a4 100644
--- a/src/game/g_weapon.c
+++ b/src/game/g_weapon.c
@@ -768,8 +768,8 @@ void CheckCkitRepair( gentity_t *ent )
if( tr.fraction < 1.0f && traceEnt->spawned && traceEnt->health > 0 &&
traceEnt->s.eType == ET_BUILDABLE && traceEnt->buildableTeam == TEAM_HUMANS )
{
- if(BG_Buildable(traceEnt->s.modelindex,NULL)->cuboid)
- if(!BG_CuboidAttributes(traceEnt->s.modelindex)->repairable)
+ if( BG_Buildable( traceEnt->s.modelindex, NULL )->cuboid )
+ if( !BG_CuboidAttributes( traceEnt->s.modelindex )->repairable )
return;
bHealth = BG_Buildable( traceEnt->s.modelindex, traceEnt->cuboidSize )->health;
diff --git a/src/game/tremulous.h b/src/game/tremulous.h
index bf60cd0..71d848e 100644
--- a/src/game/tremulous.h
+++ b/src/game/tremulous.h
@@ -600,10 +600,9 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#define DC_SPLASHDAMAGE 50
#define DC_SPLASHRADIUS 100
#define DC_ATTACK_PERIOD 10000 // how often to spam "under attack"
-#define DC_HEALRATE 4
+#define DC_HEALRATE 250 // +1 HP every this amount of time
#define DC_RANGE 1000
#define DC_VALUE HBVM(DC_BP)
-#define MAX_DCS_PER_BUILDABLE 2
#define ARMOURY_BP 10
#define ARMOURY_BT 15000
@@ -612,7 +611,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#define ARMOURY_SPLASHRADIUS 100
#define ARMOURY_VALUE HBVM(ARMOURY_BP)
-#define REACTOR_BP 0
+#define REACTOR_BP 36
#define REACTOR_BT 30000
#define REACTOR_HEALTH HBHM(930)
#define REACTOR_SPLASHDAMAGE 200
@@ -623,7 +622,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#define REACTOR_ATTACK_DCC_REPEAT 1000
#define REACTOR_ATTACK_DCC_RANGE 150.0f
#define REACTOR_ATTACK_DCC_DAMAGE 40
-#define REACTOR_VALUE HBVM(30)
+#define REACTOR_VALUE HBVM(REACTOR_BP)
#define REPEATER_BP 4
#define REPEATER_BT 15000
@@ -632,6 +631,86 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#define REPEATER_SPLASHRADIUS 100
#define REPEATER_VALUE HBVM(REPEATER_BP)
+#define CAPBANK_BP 10
+#define CAPBANK_BT 20000
+#define CAPBANK_HEALTH HBHM(310)
+#define CAPBANK_SPLASHDAMAGE 70
+#define CAPBANK_SPLASHRADIUS 140
+#define CAPBANK_VALUE HBVM(CAPBANK_BP)
+
+#define RTG_BP 14
+#define RTG_BT 20000
+#define RTG_HEALTH HBHM(460)
+#define RTG_SPLASHDAMAGE 120
+#define RTG_SPLASHRADIUS 150
+#define RTG_VALUE HBVM(15)
+#define RTG_YIELD 0.15
+#define RTG_STORAGE 15
+
+#define REFINERY_BP 16
+#define REFINERY_BT 20000
+#define REFINERY_HEALTH HBHM(310)
+#define REFINERY_SPLASHDAMAGE 100
+#define REFINERY_SPLASHRADIUS 150
+#define REFINERY_VALUE HBVM(REFINERY_BP)
+#define REFINERY_YIELD 0.35 // at 2Hz
+#define REFINERY_STORAGE 30
+
+/*
+ * POWER GRID settings
+ *
+ * All units are SI:
+ * resistance (R) - ohms
+ * voltage (V) - volts
+ * current (I) - amperes
+ * capacity (C) - farads
+ */
+
+//settings for buildables that are not a part of the power grid
+#define DEFAULT_POWER_SETTINGS qfalse, qfalse, 0.0f, 0.0f, qfalse
+
+#define RESISTANCE(i,pc) (POWER_VOLTAGE/(i)*(pc))
+
+#define POWER_VOLTAGE 100.0f
+
+#define RTG_RESISTANCE 5.0f
+
+#define REACTOR_RESISTANCE 1.0f
+
+#define CAPBANK_RESISTANCE 0.05f
+#define CAPBANK_CAPACITY 2.0f
+
+#define PREBUILD_CURRENT 7.0f
+#define PREBUILD_RESISTANCE RESISTANCE(PREBUILD_CURRENT,0.8f)
+
+#define MEDISTAT_I_IDLE 0.25f
+#define MEDISTAT_R_IDLE RESISTANCE(MEDISTAT_I_IDLE,0.35f)
+#define MEDISTAT_I_ACTIVE 1.0f
+#define MEDISTAT_R_ACTIVE RESISTANCE(MEDISTAT_I_ACTIVE,0.75f)
+
+#define ARMOURY_CURRENT 0.1f
+#define ARMOURY_RESISTANCE RESISTANCE(ARMOURY_CURRENT,0.25f)
+
+#define TESLAGEN_I_IDLE 0.6f
+#define TESLAGEN_R_IDLE RESISTANCE(TESLAGEN_I_IDLE,0.52f)
+#define TESLAGEN_I_ACTIVE 5.0f
+#define TESLAGEN_R_ACTIVE RESISTANCE(TESLAGEN_I_ACTIVE,0.75f)
+
+#define MGTURRET_I_IDLE 0.3f
+#define MGTURRET_R_IDLE RESISTANCE(MGTURRET_I_IDLE,0.6f)
+#define MGTURRET_I_ACTIVE 2.0f
+#define MGTURRET_R_ACTIVE RESISTANCE(MGTURRET_I_ACTIVE,0.75f)
+
+#define DC_I_IDLE 0.4f
+#define DC_R_IDLE RESISTANCE(DC_I_IDLE,0.5f)
+#define DC_I_ACTIVE 5.0f
+#define DC_R_ACTIVE RESISTANCE(DC_I_ACTIVE,0.75f)
+
+#define REFINERY_I_IDLE 0.25f
+#define REFINERY_R_IDLE RESISTANCE(REFINERY_I_IDLE,0.55f)
+#define REFINERY_I_ACTIVE 4.0f
+#define REFINERY_R_ACTIVE RESISTANCE(REFINERY_I_ACTIVE,0.75f)
+
/*
* HUMAN misc
*/
@@ -664,6 +743,8 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#define HUMAN_BUILDABLE_INACTIVE_TIME 90000
+#define CKIT_STORAGE 36
+
/*
* Misc
*/
diff --git a/src/ui/ui_main.c b/src/ui/ui_main.c
index 6566d5e..ef53272 100644
--- a/src/ui/ui_main.c
+++ b/src/ui/ui_main.c
@@ -1690,7 +1690,7 @@ static void UI_DrawInfoPane( menuItem_t *item, rectDef_t *rect, float text_x, fl
break;
case TEAM_HUMANS:
- string = "Power";
+ string = "Mass";
break;
default:
@@ -2580,24 +2580,41 @@ static void UI_LoadHumanBuilds( void )
{
int i, j = 0;
stage_t stage;
+ static buildable_t list [ 14 ] =
+ {
+ BA_H_RTG,
+ BA_H_REACTOR,
+ BA_H_SPAWN,
+ BA_H_REFINERY,
+ BA_H_MGTURRET,
+ BA_H_ARMOURY,
+ BA_H_MEDISTAT,
+ BA_H_REPEATER,
+ BA_H_CAPBANK,
+ BA_H_DCC,
+ BA_H_TESLAGEN,
+ BA_H_CUBOID1,
+ BA_H_CUBOID2,
+ BA_H_CUBOID3
+ };
UI_ParseCarriageList( );
stage = UI_GetCurrentHumanStage( );
uiInfo.humanBuildCount = 0;
- for( i = BA_NONE + 1; i < BA_NUM_BUILDABLES; i++ )
+ for( i = 0; i < 14; i++ )
{
- if( BG_Buildable( i, NULL )->team == TEAM_HUMANS &&
- BG_Buildable( i, NULL )->buildWeapon & uiInfo.weapons &&
- BG_BuildableAllowedInStage( i, stage ) &&
- BG_BuildableIsAllowed( i ) )
+ if( BG_Buildable( list[ i ], NULL )->team == TEAM_HUMANS &&
+ BG_Buildable( list[ i ], NULL )->buildWeapon & uiInfo.weapons &&
+ BG_BuildableAllowedInStage( list[ i ], stage ) &&
+ BG_BuildableIsAllowed( list[ i ] ) )
{
- uiInfo.humanBuildList[ j ].text = BG_Buildable( i, NULL )->humanName;
+ uiInfo.humanBuildList[ j ].text = BG_Buildable( list[ i ], NULL )->humanName;
uiInfo.humanBuildList[ j ].cmd =
- String_Alloc( va( "cmd build %s\n", BG_Buildable( i, NULL )->name ) );
+ String_Alloc( va( "cmd build %s\n", BG_Buildable( list[ i ], NULL )->name ) );
uiInfo.humanBuildList[ j ].type = INFOTYPE_BUILDABLE;
- uiInfo.humanBuildList[ j ].v.buildable = i;
+ uiInfo.humanBuildList[ j ].v.buildable = list[ i ];
j++;
diff --git a/src_assets/crosshairs.svg b/src_assets/crosshairs.svg
new file mode 100644
index 0000000..d74096f
--- /dev/null
+++ b/src_assets/crosshairs.svg
@@ -0,0 +1,3149 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+ <!ENTITY ns_extend "http://ns.adobe.com/Extensibility/1.0/">
+ <!ENTITY ns_ai "http://ns.adobe.com/AdobeIllustrator/10.0/">
+ <!ENTITY ns_graphs "http://ns.adobe.com/Graphs/1.0/">
+ <!ENTITY ns_vars "http://ns.adobe.com/Variables/1.0/">
+ <!ENTITY ns_imrep "http://ns.adobe.com/ImageReplacement/1.0/">
+ <!ENTITY ns_sfw "http://ns.adobe.com/SaveForWeb/1.0/">
+ <!ENTITY ns_custom "http://ns.adobe.com/GenericCustomNamespace/1.0/">
+ <!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/">
+]>
+<svg version="1.1" id="Layer_1" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="566.93px"
+ height="793.7px" viewBox="0 0 566.93 793.7" enable-background="new 0 0 566.93 793.7" xml:space="preserve">
+<switch>
+ <foreignObject requiredExtensions="&ns_ai;" x="0" y="0" width="1" height="1">
+ <i:pgfRef xlink:href="#adobe_illustrator_pgf">
+ </i:pgfRef>
+ </foreignObject>
+ <g i:extraneous="self">
+ <g>
+ <path fill="#FFFFFF" d="M453.543,292.678c-5.08,0-9.213-4.133-9.213-9.213s4.133-9.213,9.213-9.213s9.211,4.133,9.211,9.213
+ S458.623,292.678,453.543,292.678z"/>
+ <path d="M453.543,276.378c3.914,0,7.086,3.173,7.086,7.087s-3.172,7.086-7.086,7.086s-7.086-3.172-7.086-7.086
+ S449.629,276.378,453.543,276.378 M453.543,272.126c-6.252,0-11.338,5.086-11.338,11.339c0,6.252,5.086,11.338,11.338,11.338
+ s11.338-5.086,11.338-11.338C464.881,277.212,459.795,272.126,453.543,272.126L453.543,272.126z"/>
+ </g>
+ <g>
+ <circle fill="none" stroke="#000000" stroke-width="14.1732" stroke-miterlimit="10" cx="113.386" cy="113.386" r="56.693"/>
+ <g>
+ <path fill="#FFFFFF" d="M113.386,122.599c-5.08,0-9.212-4.133-9.212-9.212c0-5.08,4.133-9.213,9.212-9.213
+ s9.212,4.133,9.212,9.213C122.598,118.466,118.465,122.599,113.386,122.599z"/>
+ <path d="M113.386,106.299c3.914,0,7.086,3.173,7.086,7.087c0,3.914-3.173,7.086-7.086,7.086s-7.086-3.173-7.086-7.086
+ C106.299,109.472,109.472,106.299,113.386,106.299 M113.386,102.047c-6.252,0-11.338,5.086-11.338,11.339
+ c0,6.252,5.086,11.338,11.338,11.338s11.338-5.086,11.338-11.338C124.724,107.134,119.638,102.047,113.386,102.047
+ L113.386,102.047z"/>
+ </g>
+ <circle fill="none" stroke="#FFFFFF" stroke-width="5.6693" stroke-miterlimit="10" cx="113.386" cy="113.386" r="56.693"/>
+ </g>
+ <g>
+ <path fill="#FFFFFF" d="M453.543,122.599c-5.08,0-9.213-4.133-9.213-9.212c0-5.08,4.133-9.213,9.213-9.213
+ s9.211,4.133,9.211,9.213C462.754,118.466,458.623,122.599,453.543,122.599z"/>
+ <path d="M453.543,106.299c3.914,0,7.086,3.173,7.086,7.087c0,3.914-3.172,7.086-7.086,7.086s-7.086-3.173-7.086-7.086
+ C446.457,109.472,449.629,106.299,453.543,106.299 M453.543,102.047c-6.252,0-11.338,5.086-11.338,11.339
+ c0,6.252,5.086,11.338,11.338,11.338s11.338-5.086,11.338-11.338C464.881,107.134,459.795,102.047,453.543,102.047
+ L453.543,102.047z"/>
+ </g>
+ <g>
+ <circle fill="none" stroke="#000000" stroke-width="14.1732" stroke-miterlimit="10" cx="283.464" cy="113.386" r="56.693"/>
+ <circle fill="none" stroke="#FFFFFF" stroke-width="5.6693" stroke-miterlimit="10" cx="283.464" cy="113.386" r="56.693"/>
+ </g>
+ <g>
+ <circle fill="none" stroke="#000000" stroke-width="14.1732" stroke-miterlimit="10" cx="113.385" cy="453.543" r="56.693"/>
+ <circle fill="none" stroke="#FFFFFF" stroke-width="5.6693" stroke-miterlimit="10" cx="113.385" cy="453.543" r="56.693"/>
+ </g>
+ <g>
+ <circle fill="none" stroke="#000000" stroke-width="14.1732" stroke-miterlimit="10" cx="283.464" cy="453.543" r="56.693"/>
+ <circle fill="none" stroke="#FFFFFF" stroke-width="5.6693" stroke-miterlimit="10" cx="283.464" cy="453.543" r="56.693"/>
+ </g>
+ <g>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="269.291" y1="467.717" x2="297.636" y2="439.369"/>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="269.291" y1="439.369" x2="297.636" y2="467.717"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="269.291" y1="467.719" x2="297.636" y2="439.371"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="269.291" y1="439.371" x2="297.636" y2="467.719"/>
+ </g>
+ <g>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="439.371" y1="467.717" x2="467.717" y2="439.369"/>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="439.371" y1="439.369" x2="467.717" y2="467.717"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="439.371" y1="467.719" x2="467.717" y2="439.371"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="439.371" y1="439.371" x2="467.717" y2="467.719"/>
+ </g>
+ <g>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="99.212" y1="467.717" x2="127.558" y2="439.369"/>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="99.212" y1="439.369" x2="127.558" y2="467.717"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="99.212" y1="467.719" x2="127.558" y2="439.371"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="99.212" y1="439.371" x2="127.558" y2="467.719"/>
+ </g>
+ <g>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="269.291" y1="637.794" x2="297.636" y2="609.446"/>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="269.291" y1="609.446" x2="297.636" y2="637.794"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="269.291" y1="637.796" x2="297.636" y2="609.448"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="269.291" y1="609.448" x2="297.636" y2="637.796"/>
+ </g>
+ <g>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="439.371" y1="637.794" x2="467.717" y2="609.446"/>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="439.371" y1="609.446" x2="467.717" y2="637.794"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="439.371" y1="637.796" x2="467.717" y2="609.448"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="439.371" y1="609.448" x2="467.717" y2="637.796"/>
+ </g>
+ <g>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="99.212" y1="637.794" x2="127.558" y2="609.446"/>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="99.212" y1="609.446" x2="127.558" y2="637.794"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="99.212" y1="637.796" x2="127.558" y2="609.448"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="99.212" y1="609.448" x2="127.558" y2="637.796"/>
+ </g>
+ <g>
+ <g>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="425.197" y1="283.463" x2="411.025" y2="283.466"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="425.195" y1="283.463" x2="411.023" y2="283.464"/>
+ </g>
+ <g>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="496.064" y1="283.464" x2="481.892" y2="283.463"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="496.063" y1="283.464" x2="481.89" y2="283.461"/>
+ </g>
+ <g>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="453.546" y1="255.118" x2="453.541" y2="240.947"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="453.546" y1="255.116" x2="453.543" y2="240.945"/>
+ </g>
+ <g>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="453.543" y1="325.986" x2="453.546" y2="311.813"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="453.543" y1="325.984" x2="453.548" y2="311.811"/>
+ </g>
+ </g>
+ <g>
+ <g>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="425.197" y1="623.618" x2="411.025" y2="623.621"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="425.195" y1="623.618" x2="411.023" y2="623.619"/>
+ </g>
+ <g>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="496.064" y1="623.619" x2="481.892" y2="623.618"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="496.063" y1="623.619" x2="481.89" y2="623.616"/>
+ </g>
+ <g>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="453.546" y1="595.273" x2="453.541" y2="581.102"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="453.546" y1="595.271" x2="453.543" y2="581.1"/>
+ </g>
+ <g>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="453.543" y1="666.142" x2="453.546" y2="651.968"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="453.543" y1="666.14" x2="453.548" y2="651.966"/>
+ </g>
+ </g>
+ <g>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="70.866" y1="240.945" x2="63.78" y2="233.858"/>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="162.992" y1="333.07" x2="155.906" y2="325.984"/>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="70.866" y1="325.984" x2="63.779" y2="333.07"/>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="162.992" y1="233.858" x2="155.905" y2="240.945"/>
+ <circle fill="none" stroke="#000000" stroke-width="14.1732" stroke-miterlimit="10" cx="113.386" cy="283.464" r="56.693"/>
+ <g>
+ <path fill="#FFFFFF" d="M113.386,292.678c-5.08,0-9.212-4.133-9.212-9.213s4.133-9.213,9.212-9.213s9.212,4.133,9.212,9.213
+ S118.465,292.678,113.386,292.678z"/>
+ <path d="M113.386,276.378c3.914,0,7.086,3.173,7.086,7.087s-3.173,7.086-7.086,7.086s-7.086-3.172-7.086-7.086
+ S109.472,276.378,113.386,276.378 M113.386,272.126c-6.252,0-11.338,5.086-11.338,11.339c0,6.252,5.086,11.338,11.338,11.338
+ s11.338-5.086,11.338-11.338C124.724,277.212,119.638,272.126,113.386,272.126L113.386,272.126z"/>
+ </g>
+ <circle fill="none" stroke="#FFFFFF" stroke-width="5.6693" stroke-miterlimit="10" cx="113.386" cy="283.464" r="56.693"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="162.992" y1="233.858" x2="155.905" y2="240.945"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="70.866" y1="325.984" x2="63.779" y2="333.07"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="162.992" y1="333.07" x2="155.906" y2="325.984"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="70.866" y1="240.945" x2="63.78" y2="233.858"/>
+ </g>
+ <g>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="240.945" y1="240.945" x2="233.859" y2="233.858"/>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="333.071" y1="333.07" x2="325.984" y2="325.984"/>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="240.945" y1="325.984" x2="233.858" y2="333.07"/>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="333.071" y1="233.858" x2="325.984" y2="240.945"/>
+ <circle fill="none" stroke="#000000" stroke-width="14.1732" stroke-miterlimit="10" cx="283.464" cy="283.464" r="56.693"/>
+ <circle fill="none" stroke="#FFFFFF" stroke-width="5.6693" stroke-miterlimit="10" cx="283.464" cy="283.464" r="56.693"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="333.071" y1="233.858" x2="325.984" y2="240.945"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="240.945" y1="325.984" x2="233.858" y2="333.07"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="333.071" y1="333.07" x2="325.984" y2="325.984"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="240.945" y1="240.945" x2="233.859" y2="233.858"/>
+ </g>
+ <g>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="240.945" y1="581.102" x2="233.859" y2="574.016"/>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="333.071" y1="673.228" x2="325.984" y2="666.142"/>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="240.945" y1="666.142" x2="233.858" y2="673.228"/>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="333.071" y1="574.016" x2="325.984" y2="581.102"/>
+ <circle fill="none" stroke="#000000" stroke-width="14.1732" stroke-miterlimit="10" cx="283.464" cy="623.621" r="56.693"/>
+ <circle fill="none" stroke="#FFFFFF" stroke-width="5.6693" stroke-miterlimit="10" cx="283.464" cy="623.621" r="56.693"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="333.071" y1="574.016" x2="325.984" y2="581.102"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="240.945" y1="666.142" x2="233.858" y2="673.228"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="333.071" y1="673.228" x2="325.984" y2="666.142"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="240.945" y1="581.102" x2="233.859" y2="574.016"/>
+ </g>
+ <g>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="70.866" y1="581.102" x2="63.78" y2="574.016"/>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="162.992" y1="673.228" x2="155.906" y2="666.142"/>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="70.866" y1="666.142" x2="63.779" y2="673.228"/>
+
+ <line fill="none" stroke="#000000" stroke-width="17.0079" stroke-linecap="round" stroke-miterlimit="10" x1="162.992" y1="574.016" x2="155.905" y2="581.102"/>
+ <circle fill="none" stroke="#000000" stroke-width="14.1732" stroke-miterlimit="10" cx="113.386" cy="623.621" r="56.693"/>
+ <circle fill="none" stroke="#FFFFFF" stroke-width="5.6693" stroke-miterlimit="10" cx="113.386" cy="623.621" r="56.693"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="162.992" y1="574.016" x2="155.905" y2="581.102"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="70.866" y1="666.142" x2="63.779" y2="673.228"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="162.992" y1="673.228" x2="155.906" y2="666.142"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-width="8.5039" stroke-linecap="round" stroke-miterlimit="10" x1="70.866" y1="581.102" x2="63.78" y2="574.016"/>
+ </g>
+ </g>
+</switch>
+<i:pgf id="adobe_illustrator_pgf">
+ <![CDATA[
+ eJzsveuOXceRJvpfAN+hzg8DdmNYk/eLcTBA1a6qHvcptwXfxkajIbCpksw2ixQo0j6ep5+MiC8i
+c+21Ny+SusczENeMWxW1KjJXXiLj8kXkT/6fz3/z9OrL1//28DReuosnn/3kJ4c3D8/evn7z8wsm
+X/zi5ct33759Q6Sf/vpnFz5fOnrr6hftC7z5+4c33754/ern/LvLQL+9o7//6ecvHt4+vPnZxU9/
+RrTfvnj78mFQn795/e23f3r24s23l89e/MxaHBxunr0dL4T/GuJ/Dc6nC+9/HvPF57/kd569+suz
+b7998T/HG77EFol4/frdqy9fvPr6+vX///OL1C+eltYusssXT1On3//3F79++PbopcviCr1YLxO1
+kV26zKUl+hP6VaK/u3n9/N3jw6u3n795/fzh228Pr1++fvPtzy+uXz57/ufx+6tf5C/uXrx8GF/5
++Ozt6CYPydUvfPji+t2Ll1/+87vHf3sYAxB7Z3r8gjn87ttnX4/e838zvX7xi8dB+s3D27ejf6MB
+HtnDL//4/60Nj+/F89N/+fXD1y94MsZo/evPlPmb1988PnvzZ2Jw8bT2eFmdCxe5lMseer1weO+3
+D4/fvBxDzAMRe70c4xRaHP9n/UFfHt/HLz716dLHHC+eNl8vW3JjhJu7bC21i5Aune/6J3PUHv7y
+4uGvP7/459evHjBcV2/e/kbmLiXn5H/xq1+/e/nw5nevXrwd/fdM6zJev3z95cPLsR4mi7uXz3iY
++PHzf/HGb5+9+frh7Zjy1y/fveUV2ayVMSf3z/728GZp5FffPLz67evfc1ef+kKLoZYLN0bC5xYv
+eh5j3riRGsckF54Dt/1fcCdWxEibqDSRn4+5/dWbF1+/ePXz7seSqx2z/o9vXnw5J937eBlbbhfU
+wvrf1PRlW/5/1/+PDxjD8fbtwyv9orH8Dr9cFpO7/OVvqB+3r748vH6kmfmWN81YQ6/GAnv5+mv8
+dv7Avxss3n2DD2PCF2MiP3/z4hUxfvLZP8vv2hefv3w3fvmPb16/++YXr756/eSzn4rE+O2bZ8/H
+mxe/+rd/f3j+dmx/EOZ//ebdi7cPY/d/87MPsBpf+ObhQn47/px/HP/3K/q/H/P3Nw9fjT06GQj1
+9tVfHl6+/mZhbJRnr768+B/P3nzzMcw/f/ns1bM3F/wL433/4i/jN8/GYE3uk/ZRbMcK+mYMHP8R
+v3PUxHteWH71UU09e/unIdUeXn35rXGXH486L8SPYfmbvz3+2+uXL759NIYrxf77I3s3jo9Xv3ol
+3Xzz7ts/Xfz29euXcyDkBfxqTvKbt/I3fzeN2MunGhi//Ptlfnj28uWLr988++ZPL56f4n/i99bQ
+mb/9qFX0nEf9VIvbX1lj+7/4+2iHBvqrF6++HH/CUm+O3OvHb0gzufjNn559Q2R68255c/LNXwwh
+vQrhp0/fL569u7h+tb7yj2+effliHABD/bp79uXDxdvXoswM/keEceiEi+svn3z2L08+G2enu/jJ
+F9dv5Cect3QulaE3XXjHv6Uz5ouTv7z+dv0rP34R8sWpv7Ff0V9c38yP1n6f+ZZ/fPPw8Oq/XPzx
+4eXL13/9Lxe/evPs1dcP9E2nf0EnuX7b/zu65px3wUWXXHbFVddcd1fu2h3cjbt1d95574OPPvk8
+1IPqm+/+yl/7g7/xt/4uuOBDCDGkkEMJ48wPLfRwFa7DIdyE23AXXfQxxBjTUKBKrENt7fEqXsdD
+vIm38S655FNIMaWUU0k1tdTTVbpOh3STbtPdk8+GMutzyDGnnHPJNbfc81W+zod8k2/z3dBYfQkl
+llSGvldqaaWXq3JdDuWm3Ja76qqvocaa6lBu6uhjbbXXq3pdD/Wm3ta75ppvQ/Mb+lxuQy1urfV2
+1a7bod2023bXXfdDjYw99dxLr7313q/6dT/0m37bRx+v3JW/ClfxKl3lq3JVr9pVv7q6ur46XN1c
+3V7dXbtrfx2u43W6ztflul636359dX19fbi+ub69vju4gz+EQzykQz6Uw+jjoR364epwfTgcbg63
+h7sbd+Nvwk28STf5ptzUm3YzdKD/xrN4fTd43A5Oh2v6dzV4j86PVspoLY8242g7jB64q7vRm9vR
+p8Po2/XoYR89baO/ZfQ7j97H8RVDlRpf4/rd+Lbb8YWH8aXX43v7+O42vr6MURiTNMYjjHHx3bW7
+MUq3Y6wO1Oxg2McIjkEeY5nHmCayVMb4jsXTXL0bI347xv0wxv96zEIfL9K/MmZnTP+YpzDmy1dX
+7sbs3Y45PIy5HB0cs9rG7NYxx5lslDHfccz7WJbF5buxEsbAjDVxTR8yVkgbK6WO9ZLHuklj9YSx
+isYiT3djVY1BHOvreqyzq/EhjZpN5cln40X6F8d69GNdung3VugY8rFWr8eavRort40VXMc6zmM9
+078wVvfYPuFurPUxPWPVX4/VfzX2QOPdMDo4dkYaOySOfeLHfnH+buycMZljD12PvXTFs+hZ1HiI
+GsfT+r6N9l222fjA92y077LNxiS8Z6N9l2325LP3bbTvss3G9lg2mm6Zu4Annn3S2Sfvn8FR/quc
+eerZp51+BscxJGefq7PP9blncDycfW7OPrdnnzGad8s/HttlFY9hvulDTtUhr/LYcnFsEH/jRmu3
+Q6Ydhmy7GjKuHeqQeHlIvjgkoD84lmYiy0SSiRxjKTYmU6WYyDCRYCK/IL0guURuidRSmSUSS+SV
+SKux+yCtRFZFllMipURGqYQS+STSSWSTSiaRSyyVSCKNTTElksgjkUYiiyCJIIdECokMKix/IH0g
+e1jyPPkMkkflDksdyByROCxvTNawpIGcESnTh/CtQ1TmcZJHP/o4znXn7sYZPyZknPdj0MbZPz6M
+RCQJtKEXOJnQSy87Zv/v/MrQ5/yqGhoO/uv8mtTn7Iq2h1f+4Hh+V1y9Zy/pc3oPbp/z+1ifcxKA
+n8GR/u8JCXL0nJc++kBODY7nZZhKuXBib/6o+/2o+/2o+/2o+/2o+/2o+/0d6X5ntb8xmXGRZFs5
+phrgVgfcaoE7+TUWnOPxPpZfbZVf75VeqhmKbjj6KPrhkQQTLXGVYaIrrjJslWJTjo2lwJKMZJlo
+jyTNpjybEo1kmuiSJNUg16BTklwjyUayjUSByLcp4UjGqZQjOaeSrrC0I3mnEo9knkq9O5Z8Q/YN
+WUfSj+TftcnAznKQtNLKkpBkIUnDBIlIMpGkohfJyLKRpCM9gyOk5IEl5bVIS9ZjO+uyjfVZeXgI
+h46SWbuVh7vpwX7oMZ413qHzyjM0X3lu8dzYc8Bzbc+VPd2eIc/Gem946vKUzZM3Tzp64vYZHKML
+Zx7/Ec/uH2t5H/j3/bX89+j5puV/nKb/Efr+4LjT/D/yOSNPB8ePtAc+4mG5Pjh+2E74JMsBdsOH
+ng/bFftT6/vYIJtncPzEv5hWzOnnvbbNd3q+I8dw/ln0iR/o+RiOx+ctBScuW74Y+9hi8/sIxdk3
+EKa4rHn7uzbe9nUNV5x7RTl4Cs7n9YWSNn9/8gX+65O9S/UD3U/1bO+je2/Po3tPr33+QK/HC2d6
+HdrFe8ecf/+JYZ7P37355uXDxa8H4dlLCu9sCYNvOA7riHEv5r0Y+GLii5F/zYfcDR9+d3x6eD4q
+Iwx+MfkrH7Sd7ZErPoYPfDDfwi5xfL4GPs4T7JPCR36DlXLFKsEBtsotq92jU08+4xM6sFqR2HLJ
+rG5U2C+d1ZFrtmIOrKbcki3D1ozjMz6wRRNZvRma0VBrCts2ldWfzhbOFStFB7ZzyNK5ZRXesb3j
+2eYJrFIltnwyK1qFjUdRvTrbQVdsC5E1dGAVjWyiW6j8jm0jLxoOa0zcDWYk/yo/DTZTZwfFFSuF
+ZD0d2IK6YSvqFuaCaBKi3fBgVh4WNpETK5tZmLJDo7K11dji6mx1XbHlJc+Bnxt+bvGo8SHaC7Sp
+FuQZ5jprgKz8JrbX5Cl4qj36r9tzhefanqHjD44Hfm7subVnOTr7ol91vzxh84ylMRT3aE86evLu
+KSeeun0GR/3v9hHPR/wbHDc//bfv4nT7kNsts5th5xE44RM49gqs7reNX2Dso+kbWL0D0z8wPQTq
+I5heAvUTqKdgrHxe9VfmLVB/gcPqjljTBSu5m+fggDV7h3Ua4EEYmgbWY8X60zV3wOrS1eSxYnRd
+FJvhDu8C+RcOfQhiNhfv2M/g2NYgX0NkkzKzx6HwxiKvA/kdrtj4PLD34YYda3fsg3BsrQQOVUT2
+RiR2xGXe8JX9EuQAJBfgFXsnyD9BHoobduTdklILG8SzY5Bcg/SMr2YXYWY3IT00RLK1+CMO3B1i
+dpB/N/zc8iOGvlo5LMRvRh/Jb3XD4vUm4RERB6F0A9FhW7fjucJzbQ83Njgebua/2+WZTgW3PH7z
+hKNnLNMnn93GzZNOPvnjn8Fx/lSWnfmD/vuR448cf+T4fTj+uDN/5Pgjx79HjhK2OsZFqn077OoS
+L32u/QjneOIFMaELUP3EO/r5H2e8GB/1+ica2L959w2hTl9/9VZQoBe/f/H1q4e3bxlLef6Xo8Vo
+WFFK/Jn/45eY3tnfyJ9d6P839Gi5dDX0i1wvyXm/fPuH35UhPXrvsmQfUqbB95etuHhR+2Wt/j2s
+z//J6RZ6PjVX73vrE6fod69ePXt8+PLia5AuPM3NCeopb8iPQIf/Q4EObGMc2Ja4Y3shsA0wNPdh
+GrZhtF0No+kwDIzbW4pJjunkyG7ieGzlOCrFRQ8czbxbYBNqZbnF2tInbJ64edLyZH3Gt0y7rCz2
+mT5t8/TNc7U81/oMjtOSO2wsutWuu13tOwvoLvEs2HrjGbYZW32bJy5P2jx585TlUZtwzODGNtxa
+iKuVeGwrmr2Ix/4Njsd24+0mIO0+0no0exH243lr0SxAjnXdcPzpiqM/lSMqif3//s7d3o01djMG
++3qsuT7WXh1rMA9ucbTnb93o3+3o+2F82xUFv3l0fjDoIwW+xx78AaGPFOp+8tkPCX2kUPaQZT8g
+9JHC0U8++yGhjxQEHmfCR0Efj5WcXQjh/QEGOeG8aCvngjJnfv19z8aQTh6Og7xJb7mM2wSXy8hd
+OXGQH/1CdIDI3T4eii35e39JOf0lhb4kbs95+beGxLdB9KOA+y4gvwnXD44SOdk/9czTzjxwag+O
+/cxz9RHP9f4ZHE9Ql+fwqc/g+P43bj71GRw/+W9+5Pj3wHEXtVh16KlFQ482TVp06TWCIRq16NQH
+wHuOY4gaRcxLFFHjiNtI4oFVF0QTLZ7oEFEMiCpKXFEiixlgJgTSJMBlIaQrPNd4WM0bHA+mGk11
+YgUJTsHhlydsnjifJ59ZvHL9l0885cxTt8/guKW0T3h2gTN6OPrzfZ+r9Rkcr37Y5/8GjsvOCmMB
+lbGbrsY+uh07KIxFVMaOuRo7hXaIHws680644pV/x6s88WqmtUurlNYirTWJgleeAw==
+ ]]>
+ <![CDATA[
+ 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
+ ]]>
+ <![CDATA[
+ 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
+ ]]>
+ <![CDATA[
+ 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
+ ]]>
+ <![CDATA[
+ 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
+ ]]>
+ <![CDATA[
+ 92gn3i/yumFPd9mM5ovkwi5CDyYru5svu6jEIKKC8+P8oiFBNG84qJNnw+GoDyJD5o017DUqVS0u
+R264R6W3WmHg8QTBY0OcOnRanhghJrAwSW/eyxjnBd1M54gw0yWjRl4W5xdZxBGy3JmSG+VaJ3N7
+O/gvIirqsIhWYyNKQZWNgCfbIKyCv4nbJiYZWSikPatVHu28CqWjLbvWE0pxR9/Y5hFilvg09SHo
+FBQJFNKLPYXJoBQ1Q+QaN+EK5SEKOkuJHqMbYloUZcbCCZ1wVCBKBJN0Uhho3K8EtiGHtHwEbF3U
++UfHcFjyrazm/oaQDFJAaHqYWoRm29XqibYHA10FqBp8gNkW5yVQolLYqKtzgfUJ9URIOSghuoje
+sitvnuKwDfR6Ycy8KsxSnE+IPcdTfcjiWSL9PBb9ZARBVbuXpQdLgt500+whSFgHBwtWURVqHfak
+GqaXa5yFaOEP5mBzkRf/mJO7jMAZl+HwjpteLKkjxy8TUA0HH6PZNm8y1Fg9st10zxBl8VCxRnhk
+PGp+RU46lSAfr4cY59+7KgdcwC1o0lZNUXtbNb7hxONNXZ1HYeVcXmwBD6cORctcV+9/yUpUTYOK
+XeUljsG4K5llxt8y24bjOKj5wyn2Tk01b3FD6kLJul3aKuR80fdDlfnUWqfMWNWHiiqa6ciMo8x6
+rz5CPppBJKCkdA0uL74huOsOmGo5CeCWdLV60QpZWiczJVsx4kaEH5YKS9JHOF0gKR6VDo85tRy6
+ugEopbj4vJVNlaJ10Ssx2ddvOR8MHDV+rV4EjlSz6Ho0utPA+hALPLzkisgalw/NGVF8dGGp0SV0
+Q7lob4jYwxEWZd8H06OpqqHoJmHjNi4EFvEIsPXpwy5c/F3pTrQeYhJTUqJImj1na5Rvau2IpXAy
+oTRKNwSKquW7qL33+r4TvxBHToQ/3WwHzAwudjjJ2RqlE80ppIdv43k0uphLTHcqXfgEdIBD6OYm
+ooQTaCSxpIkogR0iakmTUy2aZpS6gUYIEB5VM0qcUgOkBFzlXDdOh1xOVCJZ8JLXyUH/PAXFSvhe
+7GUAAChZLivxqAPr7CjCxAm89tHoskmDM62HiRqaY5cuiIj7Ihv0YPMugiJoLUIhwiR3klBzbh5P
+9s2GlOtHRvyKD99HoxurBAFJZbO8VyKsDSIW2ZLOQv7gYN1GDJ+JYlMShyorYd+HudGyJHUkAcw4
+XX5Eh2MuoNwh83HkgRViE9+3wudlQwXTBfecbUy4TG1FMNP3KfU4OT8I3ardMx1aUoDtK8QE/lTU
+GoHWHefDMhHF1htbUTYR8IsOOp9gIGIVSnE9ISF+ikIYNg2lKx2nfSmGndzwPOrARAd1C9hmubL2
+UekKSgAdRCwSIooEYGIOC/FgHIIs4yyBpfszLdrshIkNQeT00ejeKR0qMCNFEqK4sJkDp1AqbQKV
+gJABGR/DefNKrE2ZHvXARoruqRMdmGCRWQeKyBioKEgzIU4AZEUgjDJKnJ5l7EU6KAcnJ6sCD0EE
+QozOMjn4dl2YspxrvsIPwibuo9LVMeoMvMhe+Gzmt0QV2POgngVWrw/GwSxt9W7QK6lrrABHzb4P
+a/eOmFv31Lwi275qT6a5XgCkosi2APfYdWKe+YiChfIyKUrK1lwGcACd/EBMbaUSeHif87QejZ6d
+0hFhICKsPM5NiCBCJBCRCkIelENCpHeKVeZQQMzeKYejPhyWbTFxpZkcSLYtnIGneXSenoerdhyP
+UTREbAyy54sCeH1XXKlu6DiBgdUC7XTNmxl7oRrcL5osZChthQiHLU4MYoCwshw9Ac3K+gq4cQld
+cLol1HERzMdFXKfJECbeIuACd+lX6zgwshPfF/UhKXCpzEM04HYDkY8wLcMqSbkiBjhAm/TzLkcZ
+4O7wxayayfyUoJDQ6KqKS65DKQMWDBFIzvOkSq1TGGtTUAAfe1UnswJMSbaBWyZTnf5RbsG7N+kn
+IWJW0Yr1rRcQM/CuXXQToWmyv/TCK2q+TQdw4MvaAPW0ua8aKmOwMyCrZ+VygPK4IO+pPFMFZGes
+h6LE7RZYd0dLDh5GrpNhu6Ph/OnzOjyhAwrdJScVo9+aEnUVNoV08FlWlm4ftbjRL+Q04ECdHadE
+72qiJVfr1C+mj0AqszBxmo/qO95zXs/wBBOkiLn5OOkCMgXdTmBFABYzyJkYy5645TzRdCTj1fPC
+wd7HSVcfRFDQmzdfdpBrMkGs6t2YgXB+Vx0v67uTuHLddGH2jjVb6J2Z7OTHSW+m5sKGJ2JXNJ16
+DEiJ7QCtpWSygqo3msKtoWC+aSNCIdY1u+/DdvDUHbGqoStd3F51xU4qpubkl+/+fnnZYJJBfHf7
+Dkxt1UlCg7j3e9Gzmuhdj2V1yhUKbgSoEhzE+72+HKqizwCt2bzrgzE4am12JNg51OV4ezxDvzc6
+kPYdRXuFSM47ISL+QETAJ/u8B/cMZ9P+4OxkFKQZy5ST3dXq6Qzra3Qjd82wDxzgronyJyJODjeR
+rYnvyFJ4JYKTKdsh7uWak5Nd2KynzVaay0kQoRH3sQsRsHgVRSBKek9Esa/nygGKbATQSNkqcjem
+STzezTCfi/qsKGuGIi2PSmcwqNCLKB955qRU26B867pgM0kHsFgN0WMFZ4UQMwfZdhVXqAjReyVG
+cxbu+2YznmGd8K9YZ3pUehOipF4LBUk3lXKIvBJx5DVRYQ7659Buia2TNLicFmyjLoJMkJ+s41Mt
+UkcvCxKDh0h0SmIL67tOTwKuNmTxzdFR64NyLoLqkKEASiYUi15wtXzpLW6RNQ7V/r7qm9h9FRdC
+MnF+LAdqbdh14s1vYlhp6iv0hlwU8kbnT7ZUIsqAr+LCGC9Pc534ej3ZWjfc2slpBh0Y5mohyzyT
+sEir168DWok+ZKZ20SwDU1HNlZSLqXINUny/mA7LOjtaKHOdGdjCFZtm1a4a1UHvSuxBiaamcC1/
+BRB4JP1xhxVqwPdyn1ur6B2jhfB+XzbvTM9pgt0G0WtOigKKqAABLAQuetYhWoiOOWxynxo45Ggc
+RDjt+zDxIWQhtjQ/3fIsFJrdRMALESFCThFpGh1RhZ6UUbfkWRzRLfQS4JBuMwLkFLbGIx01wjET
+XVbQw3GX5xnjLc+qCPLh0ehdt7EiZZO3zIxiSFlKjIe7k26uNKAR0WPCflGlhetmVCV2gcoSMSuR
+cYyTg+/Y8ubmWDumfpn9V6xLXQ0Mumopz5UeTMssAMeR7IKvqQim5/0CDRjFUHCrhRDhbynmXNh1
+4bCMPvQbFrfmLiU6vLzV0sWoGICEqcgaaxJVoJtl4JeuK8yLLpcRkArTk74MbwlxAHiYqxREiB6G
+NBsHdb1XkXBoTlwfodp63n/F/EBGSmRl7vVAY7qeMwVHBxN7U2L9UPfUSV8NiX3EdtI2XdhjDyjY
+1/V46zNNhyL8UeWFxee93K6Dg7NqatxRWsHECCAsUQVnNtMQZotAD8/oLTtJquYg6JapUn3IOCMr
+iOg4vCiqa6PFx48Q4XsjYm9pcsjNtd3LiLlxc60b245VVvvycRm5sYNci3ZB0TfkNLB8Sc3ywS1W
+xqFXPXDGKCi6ryZF92XK+nr6XsgfNPzQ5EIegQ441coNmXQKg4KXgyrgCCYRIEGccMzUTziBHnl1
+xTC3HPGugZiS2j+8eRB/ntUImqjG4JDMjU8nR1OvAdVE82oyhAU5ni3BiEppAHSdBDEgRFj11OLM
+ZazmXWkrKNCSSYu52+qEXxYLcrXVP9NYzqIPLiTloFUNKpSQCTMjUm4LgK1UU0m1u1WRddQDn6tx
+0MTX4Cfkg8raRf227o/A66xVGHisOD3Ll1hGq7bU26xKJ7A0gWewhlYUpluKDllRSHq3qHBfDSzC
+j+FDusR6hQhIDA26JgzM46zLXeEG6EIGCzVXk0Iol20INwXhxOBPrVJGx0Blqls38+jwFbaqJrLy
+LsTpW3Iz5EawNOj33fAzdNdmmRBRkX5cJ1U3YVo/ogb5Yvq4rh/RLRXawUtKX9bMjs5twbUBhUGO
+QqTqc2qM+sj0EKK6rk0zr5dgZY920Pd5xwDTVbtuqMErSTvQIyoblE85Y2dqnUPG2/jucLEGrA09
+6GoDFKlncw2PxYXwR88KWiCit1IWdGu3mzOXFJrbkABbLaGhz8IJTRI4niuHnLUP6homIqQ1HWbi
+MCIiVgnZkW3pg2aWU5Jil6+gChROtyKc7J1OhGqJdpYU3htN+Xry4WU7zLQYCl0O7nUFl1Dy5JDM
+qrbErBm+XganL32YZyTVQdb6H03QfvdK1741cxj3vhxcbDSAc1CFh+9fN8664qci1Bm9rUe1AHO4
+D9gwdcmz5Xtzuwq7hORMTo+MKkDl2CCuOHfKkiDCFaUFdxqKGhzCwel8CjSE30S9miJXOBuHbios
+Eteo0LQP2l8xRZmW1ZXBMH4w8GYrV0HF3BsdQUMkDhExmMJcpQSlEBHqo9GxACWXdJ/eCTnCiThO
+Aj0oxY1ORNU+SYVQ2JLcbFy3goqbi3rUVo/hIbyMWm6MWTYOY42reiPuab71OWg2AcDFfGe0eWOq
+XgEYucK/0xNf3JeUgIssNeov37PGRGS6cIh4znHTpEte7ehC03QWCWZUEBUgUCWhDRzIL6luCGRg
+EHFNy+C0vO6dZu/yUa9mGNO7qgCxJ7yrnpMm3jEhqr22mQnvTV43KfojxJxUKdUl4oMCVzcOLKLP
+iYd3k4ga1CcVwiuHIMhDVrzm36sFTYq1L3i12ES4hEIPYbH7NeRB9EjpTnoKSKocvawgCQqLGofm
+9JDWzBKi0+28plU0mUpfFFQVmoKQR/tWqAOq7nPhQG4gW7yYSl/X5S/eICGqut3qnIm6GIAs4u6V
+juRgnTkpbzEl7UI8VzWjZLV/AFrhAhlexbIXI1veLDaXzeaoyyWdIkvkiOyBXB8408XxoYXBaLxK
+iPOPVamoUjMCVcScoYmo7nXW7+0KwGWPg5ZfoNeRLEGlh8RL2INhA1R6gthUpCbLUWY6HGBFff/8
+FaD0qhTf1WHhtcgb03NVYAsUcyIWp65TZKETUXdlWZRa5hwLOCSXo415AogmBUxEtfIlWZBxc5Fg
+VWfx5WOFILCU9VQgWtMyaHmZyWrFgvKsoFItrJdN+vtqpWry5TKb5GjxgPEEZ60psifOjaIVseCM
+sQ5MmA58grx7EJtNil/kDnQN/DbDUDAdUfusCkL32Ty3WcsqEXGINHRsJufSdo9WUM4GIWu6EwWq
+ZSl4BJeTlNQy0T/oQWD1ND3kIrlXSaRWS9KyMCzLmhbrUl3Akw9Ty0tMzxy9DMQ0h8BbVM5cAgpM
+qlMhq04nq7bFjIGwS4LPNkEfUacqa+qkHCtVKzlFlM5xFibOCwKeDyYAcpNCKOhoK12hVM5KZ/Ro
+aKdsi9fVpcxd6nLWuGYC1WrfUVPsY5UvS1Mva2ZkJXGA3Cu9Qz4lRTwTE4/Cd1kjEA==
+ ]]>
+ <![CDATA[
+ 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
+ ]]>
+ <![CDATA[
+ KCd5omS4FaECO9S6yobiYsnenKLBcvwzcJudGdpsGUA3UcSEmWhanjd4FRAtTG4pzpRnAaowcc8f
+HIM3EO2wuu+zjIjp8tR6S4dCoH3SZZg+TbK7WwfOsEJl37FrRWPjczei5n2HDcgoZ7HAgazVJ0p2
+JpKpcwPHNGsEoOEId/N9gom25ZBZxegmAQCpa50+csN5wz+3SM7Fe5WalYuJbO86MXqffrRaJl15
+wowITc04Y7C6eoMYtlYytVX+g3Zu3XbjraQTzs+JtYPKl3bpuYnu5zmYR8ZgAWakYtkXNUDBm7yY
+mlbxDJ5dt0IManxa9JtUzXPtOaDoROn6sHl2Txo9e33w5IFOlW01wuFZnEnIjFHf/hJRjg6CmgoW
+COJqJlUJZMUSG99f9JhUzT7j2brPxGnn1FDNVC2YVkwR0kNZ3EfqOU5ldbSLt+t7MA5ndKAaA4Fx
+aEa/Iv5+LIPFwRKigM1iogQrwhYGbPjvvhYjei29EGJbds7bOmgNESyknWA1c2HvowXKT8EhVa2D
+tjAfLLuZE52c9mo+3I3iPGkC9AaO+mCiZsUEtkfygk3fN2kVtpCa5Rk5y/NE6RrNGFkSnXQDDCff
+ttFV8khc4oQ3RFFVIrvnXnwPaHlakKPVZZaiOv4o10PuVzITz4aBMEVLl4pqa0gwyVpujCirKZgb
+JHCqnnUwI+vJTy2TCwb8661ue4pm2VhqPgSLxvarvxP00ExUFmQtgIOqAC5ZJGjo1WyzmK+SZ6cG
+08V3mAz/lHgBn5XYLSdPIkC5h9hN1vaKbh+75X8GCyGNzRLiwmo9jTMpEz52a6zO5ClQxWqRk55z
+j6wHBdGTCBfpIWkEkdaSitXSZsPqWYh1EXCT1NiMZYHx1jDdOLEK/RrNiKK1TS2JXgrgooayQYk7
+MeuigHJS2StP4XvQV2tmlSHMO6cPVyxazpAsDHbMQDfxQoqeQJfzRmKxGe2sJond+WiBcou+EoGa
+ad9PcxssJ4TsP3Mbmh5/NeCh26aMq8ntwXJHy4Ex0Y/IRT0eEm4dBSeHbyU/m7Gy3MDXF47y2YHl
+Yio2GeYQdbmWvVXxoc6jXCxYO7JdWpdABZMgcNOYVVVmugQ8RisDi2StaIEN+FxV/wdZbie9a7IU
+OW9P9CyoQTWZzSBmc91DFGW2R6WRLepn+rpQ6NupYKopiFSbWd2sKv6hNrN4OOWqSQ+o3Z3kYgsP
+SFYpdRYZoSJ0+sYvhddx+E3+1HgQNK6qQlNNZ2lpyWUE9GsjaCYTalJHnG6xZNckmcNP8retAw3K
+mymX1Kt6SjRTChWuRZVEhqlbFkHxwqKx6JgUChq7JoG8INqL103tRJlAS0FUQyyIEruXFESkUcl4
+fYwXzEIU06vq0CA10qocaWpWstBYLQ3HV0jkpShLzT3MWJAYTNtbClkFAx6P5kEGUrIljC0YwahZ
+580XKc78OJ+1YPjbyyw24k9Ra7Dk+xxGkqP5lIhXGIUYvalUZdb9iCZDh9VhHeNirenNFlkHjFCh
+rsR7daRs86dyt8AwxrhozyrfY0+LPm9BnDP4nMV8LTa2uNoLuiCaUs1D1YirXA1ktqkq0aZ9Korr
+V96moBXEFKctTBb+UAUxpi85gKJno5JoMW9qsBpkyco1LEkE0RtWcWQMCvmc1eTQScCroELfYi5F
+eZOi954CMU6UrnHR0YrJR7fkWttNRNCAcuwlsBS1TSwBW9VRELNmoGp9eNROdpomvSQPUf1kzeJT
+OHbUlrUaIlYCpJu0nRYjPDqo6hQW/BUQNW04G1QygP2Koh0QIKb00MyWksyeR6UeDDJB4rXDQ8WA
+mK5W+GTBXsHq5oGoVVOaoa9It9aDymGJs3mtNoUK0NkgeRn0WFZCHReEQlkEkSTEtCzwvWpMVvNB
+wRizBeyHzh8n4rgvWjxHE/0LG3St58rEKAByQPwzGPEgqdFUREThfJaqiqEv3VLJHiZOVGFFINgu
+WzGnJq96YW+zTU0lXcyCjcrRYH66ipjOjl7ZuPPOAu+AJV71Big2fbGoX/TQdGAFj53dWIV/rpzV
+zMQuppti5jIG1xegLV+WF0NVi8LusRN7B0Qjq7yWzM80Hbia3hxnolNbI3FjsmReuPzMlgKu3xW2
+LAn2H17lbOiBsskxWfxB4xBE63kCYEVLf4PglBRfTEPhIImI5aZZNnnMxhQ3MGDjDDjr7LVhopqH
+u2X/kh7gFJN1GiwgegkKdjdAB0zOirmEKXLEib02/Wm0nApgqSn4VKtXMRsXmUPdq43vlT1FagNA
+1kbQxipGtFmLMlq6X+X6n/MtEhGnKf5lDAuevpQxBa3rl+KiOoUVLVaK9OFEGVacqzKxGVHfWEGw
+OQSbg6CfoLHCcjWrE0MCi/e6Z255yyZcPWFgy7vVdMk0CwxFr5wSlwINeIoktHLzAK8Arrq+odvL
+B+CzZkSvUMELHMnC/BoDni5so2nuR3SmJzV2Wdq41NfTLeAMn+oKTEcYyzoohXntfXlENAm2cWTR
+Uh5Pkd7otBhdHSoT35nx3RRwDnEcL7g+1IQknFF2YcZaGDpzmNANjUFKhFVPQMGUFwZcDMGziUua
+8XN1IVLQR0Cza/qCQYsWhkErC0xj0RrlWohqq3TTfHiLXuzFRUdQuVrN2AsAKCSFpFXunCr5by8j
+J24BKslW9CWU1aUqcyYbycMbJbdhHlSnhei0XFj0mgG9lLyJXpGZ0dfCtuAc1AFryTLIk/YxUZ0h
+C2r5uCUOcxbQpeFWHYGcX5pY0xFo/XHHFdOm8GoVejQKGcNloTp6BVbksXoh+hlAQo27lJA2Nccr
+LwRRSp5EAz4jkTktbE/CFKMzIyn4SNIyhsQVhVi1eGCe0Y/owXZIq1TGadLrs9tg1ZRleWcPUsHY
+0unBpjl6lqobNn2LdcEoZmdRT7XwPGDknZ/Prh4zz/qwvCtycqaCEtkdyx3kVcPR8+sVje+Br8nQ
++K5hHWeuA3rgyw264DhRvfomR8eMhbCpkAUDM14siwbSQ7XDY55P/yyM2FaJQHAMMGQGomP7SvK6
+EOwDieaZX0qc6TsfZDE08T3mpR6aGSKzOu1iWNMzQHdakt7PZP2YNc0IPQsmCexVVhtLvaKxLCXX
+F5YUSWCTxnbtk6qX0cLolg4cv5tmXBPTPdHNvCdlr+lIeDXvSYJkDKt3JVYNaMWNUGnXnEyY2Zjw
+f2rbeRW1+hDsfsI4gkKDwkAoYD+Y8MwyiZZIiyulNrRqFUXD8bRnShwKOphp9mjLckkMFvwKK3bS
+Cu/GIpp6LyBfBNMBMbQm45V2glwSJdSViYITEDdcyLFbnU3Lz4zAIwldzxLXbIa5niMVSLqx7MHk
+NDh/OTOzHggmJYU0k7fiq2G9xMkvB0wgEKmeC9vP4gyPTWZN0AJeNgaBgojTqpy8xqVjxiLQJK9B
+AsT0DY0keU2Gid6QEahx63rRmk5NGYnnNGAbg0TikIGElUcUKmFsdXrlqhYq0ZfYr8n4+JyxX2LE
+J0qXlB5l4ObYER8OXlM4TiedTVJ4EMXghtXgICYq02qL3K1M6+JtgctIDrVT4Ea4jER4jZJg+YK8
+WRLzpSVhzR/WWTKnU8EGhFQ0hRAcVL3vVcMIydLTF/eiMgJvdn5y1MpCSF7Eg4ViX6wOThpZUEdi
+q1pQQ/AdQVQTXl/BJ+DTbfpkBJ2BWNTQqVTohFeRq3dgWMGiP1GeuOt+ZgnYTxZMRoaFqj2oCbAz
+OobNYQqIimyQqnpboiW0praINWRtNQ+/FGLUyr9LTIEVLF4cpzDxJJVjRMNOTaNVo7cyVqlrfggu
+0gznHvQpx5BEeaJ0ibyIs0g4QjfkffIz3BlvRJKx5W4KSnZsVeb7PNMl88IUjuTvHIyLOaQZ08KB
+8hDx4iwKFmwacOYzwl4OmqKFsdasEV/iU1BZRXqIaqwgacMCU/WB9QbikaOmAdDxdUtEqLhdSWSt
+GlEnIclxQsChql3VW0UxUtJDVg0lbsbwFbWrxZloTzHUKiloCZFsmhMWN5nwmA3lAWOWOhsIX5bX
+yZnOi8BxcY9K6dQz7qEvpWQ1UrlMjOluFpDt4pk8BuSMWM9an5tyRnrWqyEJQM7gDvsaCV4kIY1v
+stQ8oRwDXXaN5C5O7disaYfZg0AW0Elli35Zy7haXprXYkAkeM8evKY0YC+gWloKR7BhzBJ9SKwQ
+5u5nro5TL2EUfAImSkBx9KtFqgRNUSFFxWuqjYC1gv2kqNk+gtoRN/B70INTFqq+NSQXsSMOLFAs
+Dcj4KHq9JqwwZRw5VdhytMwXL+KFo4pvTEtRGdgCgUaZq17vZ5vFTeNiAFOJEPPwWpvdSXGm7SKm
+th/TOGE5sW4pMlhF/y9Wwpeg9JfUGUlhXKpRFcgEqulrLdAyE9z7vXwsjdlunPA7J2eGhS62YRCL
+amxJSm0iLVcqFXbOk3mpPcyKrnZ6Ir/Q3IPAxiEtV1KnNqrblKQh4lhLiSIsBvKxGBaQptp1O/v0
+qyKH1/beSs1GLdpKVuKgGW/KbzfgtbBuUjt5cnLqViU1dTmXqKBJm7oA6EnfOaoFYTmF3liuZVha
+LgA9MFHzI3Ud/AqPidxak2WyueCLec/J1uc0ddMZ+1nyOedTW5YTD2d9lBUS9RfpnFHVFNWTkW/r
+dHUK3uoz7SAxACNGLHgVSCkVi8GSoow679rDLA2CfHhvigZFuJ0YndMJyEIvnTTb5mAxNIMoheHu
+rVpXVzm2vzaFAFAJbsmE65oIHDfCRQm6Q/miqhvFoM6hsGhOdVcrO75l2nOxkjU4VGKUJKAS1YKi
+GFSq10j36FlYlCF4DSAhk0uaVaWDnkDxuT1YVlroTZUbjdip5gAlPdspwkOxguiL2lYlb+9e+fSw
+lAXXCEAQgyr1y3CrWWrqApMUNKd1eecqRQqp6qpoO0EjtaKUObUeJMkUyy4ABNVr8C8pR17BTiQm
+mS6n+exq0HAkOsBBZxGrWirVGQMkj6Qspi2HJDKWjggoXhtLpfLl4SIQH9Me3ApblEzu0RTGGrUS
+TvQWfVWB/R5ktOSjtDGUaqYpRYaKZrPwVhgOSClTqttAL7lX4n7CjIRofKrqRJaDkgxIqJoprS9w
+UdG0NtgnVgCTOq+tmCsrEkGcqqsSkVmtMgTOyYQdRGPOWYrBkpQBIiWqXDAYaW6pdo8clh4EVAIh
+F8EgqyTvj3R5uTDQr4J8i4w30kM2tX2ivNbVmKalEGvWusnKu6yHYvxEk3iqJUjFBaopK8RC5Nxn
+60BtguBectYyax48CZcU5ksQ6qNf3VXVgo1YrdDGEptNbMrrzJKp2kvyak1aFILU0gnYk9Q9Gxck
+GaBvqc3AB6OZP3ExmQKZTEDe+hxFNsM8Ja3p2pgBv5pmX8siY2v2Rs2LjdmgdbO6bqJfA4JqWTwR
+WkEWnzO2Yee0HCuDWTDJ1ieWZJ4TpQs0ZZxl5gmYTy6sojRVBeIk08RcGJSBUS5Xkg==
+ ]]>
+ <![CDATA[
+ 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
+ ]]>
+ <![CDATA[
+ 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
+ ]]>
+ <![CDATA[
+ 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
+vpGmf//+loiiooYYCI/tI5/Qd4+f0HdPNyHvdpjS3y5e3X39+GlJ872Y2tfnF199fff4uWn7p5rc
+L//j819efvP16ef+0VO8eDWavmteaPRUc7r54v+en919evPm+tUY46c372AJy9S+JA442t69fvwW
+bvzoXx43sY+Nwd69uf3izeX59dn5o9eKf/zYRbJPPdn0Hj2x2/PXby53uMLa/qkmd33z2d3F3dk7
+GOoywdfU/E8Xl+c7nPKNHz3VVMOj53j95ur3Z3en3+4yxfU3TyYYDJ3j0ZP84vT1+W9uz//fm3Fx
+dxAT7v3skSzrbfPx3zefhx+KleOe/2llPe8Y+vfvysfPWi6u33GCN55QNH6qc/jZzZvbs/N/vz39
+5uuLsx3mt8v0nm527xrnMqWbb85vT+9ubh8/sfmLJ75ZL2+uvrl5fXH3uIv1gUZBwtG7B/Cvvzr/
+8ugXBz30453QQQ896KH/BD00HfTQH7Ee+uXt6ZDAL393c/H6oIkeNNEHZ/lRaKKPZ1P7q4k+3iR4
+UESfnnUeFNGDInpQRH8kiuiL8OxU0Z2mtCfKaHq+yuguU9tDZfTT82/PLz/7+vTVzd8+kGt0H9Uz
+foxJUX92T/EXl2/e8bbusWb2eHXl9d2rX51/e3GKYe2ik62/emJx499P37x+fXF6/Snv6P6J8o/f
+rVc7PISvnvAl3GFGO0grr55QXNmJXewLD7z58svX53ef/pM44VPyiN/TTPeSO1xCOEKg59nN5c3t
+v/3ta1asHsvev7vcwVgqzQ+X7Aec1Otvzs9+/+YdV2aPZY3Hx6+8fnP75enZ+WdnpzudyY1fPZkC
+9PhZjv1+c3l6+/Lm+vXd6fUOO7n9yyebrdt5ur/++zc31+fvM935yz1Vk15k5x6/YHtinvFul0nt
+h4HmRdhpUv/9+En995NLOH+4ubi+OxHDy5NZXc8/k0t9IlLLXopc72f32BcXy64CyUHQ+jgErYPz
+6OPnHI9/XP76DhvJujlo+/ELvn+NO8wo7sWMdmDpf31Cjr7DqXvH5Ddm5PeHl+/P6/u8AxwuL+7+
+cHrxLi1wjx/h09uLu6+vzu922LvDY7yfav17WMff45o+5fb+9vz2q3Os617KWjvzmme9Ox90FIdA
+rh/MVPjT52Yo3CUyaD/MhN4f4rj+ZT/juF7e3Fx+ent+/t+Pd5Ee8oqeX16RP348dMDt6auLNzus
+j7Z/WgXyeQblPX5Ge6c37saPHrtXT8iWXl1cnu4QibLHWvBvb26/+frm8uar7/ZST3rOzPD5scDn
+my66Q7ragQUeWOAPq6Q+uxDrXZI/94TzPd4xt3esb8ecot1431Myhj0OrH724BO7nLp94RE7iLL7
+xiMeP7V9kY9+RAAhj4+C31+AkMcf0ANAyNM/b++Ixlpv3Y4JGU+bibELn9ybqKDn+FQ//gDu3VP9
++Knty1P9x8e7pV9+fXp9fX752fnl+dlO1oztXz7VbH/5eI/1e892+5dP/J796uL1N5enZ+dX59d3
+vz39Zi8ftavT0d3jHaD7pK25I/3P0dYf/cYfHz19+uMOYqa23we+ui+v4OMtj3v3Cu6I3bo/Rq2X
+yLT/rbKa/eOSu+zMvtyjxyvYe3ePHj+1fZEmd8iW/+fhD31st/TL3eLUvry4vNwpiuvy6fb/8Sf6
+7mYH+ezm6WZ0evm30+/eIUpt8qC709vdmBD/4Mm27PGTe/WujIgNH+mbJ9Tz3OMn9QUqJO5gquTm
+Hz+D/fL25moHtkGtn2pWlxfX56ePz7Y5O708++3Nqx00vPmLp5ri9c3141n+6dnZmw==
+ ]]>
+ <![CDATA[
+ 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
+ ]]>
+ <![CDATA[
+ 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
+ ]]>
+ <![CDATA[
+ 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
+ ]]>
+ <![CDATA[
+ 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
+ ]]>
+ <![CDATA[
+ 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
+ ]]>
+ <![CDATA[
+ SHDeRtUv2MUAxsFdG7qC2Xjw7C+4sPDmXzMVqZcmXtvaVTO50j48HUIV1UppNvjAl0xQdhYr1XIE
+T/Hrp3rKXl44Bg418BZTG6whVA6DKIIVinlmhHYTKACyP2WPbqWtBxRTK64d7SZNE7rKCigwcbyN
+UT53USB5QZWVu6IDpeR6er+3VjHaYr4eVwZO0BlKkVau3MszVkUcHCdgmfffxmsv/OgKwUodGDKc
+k3rfnr8tIGRNJvh7xGT1jgVrLkoVmS7QkRelabwD2kEf1e+7+icsunr0EUFNaSJ9la6NuNU1xPor
+4wZc6bHEorRrJSGOnftPs+TS6DtbQQVALD9Pcb7C4TysaaQ/ODMVU6RGRSoCdmM9dX6o2iMYcOBd
+VlS1h4gwmBzAl3Yh79u+nrWCcuIVLiAa5hKa0T9CTQNtO7byl2LFt8YbHWD96y4yG1c9kDXGyNl/
+cixwNG1s3x9DwC++RLUZ/tSWF/XJW3DKfsC5SjtG8UrQlCpiY0e0l2L63T94VdIKu/IIFUambIpl
+vHv5G+zkH17UUwXkRxlg3NUe8mfP3Kz3AlWzX011716w8Vre9Fyk9+sawXJ518kHbHC1fL/d8sgB
+UD7f2XCMWUU8+tJDkDh6hpfwUo8ge90sGxjmhYYpACZdDo/03zVjuMP0sq+XWkegu97JwQEXGYYF
+MCIDoZ+unigzrQVbqXT+zDaY7mLYlUE/MhARDSyY90N08eG7sAh1rl5ETJjtM6tGOjrrU4p3rtKm
+M6EUxdeWfJIQTWVtImoZZ9SwqvLFeqRwb62Vr3od9bQsiQ3D6DCAVXZJ84tAOqoIpQdClMD2I82f
+lh4tM68KwWVX4B5izKKcEvFrPYtfEYhRs9wi24s7UFC+UcIIlM0izRzNxGGC3bVQ5sec35wDpacT
+hLzn0pWmuKhDSmFq3Bq7yrwu/TZskJknI7WFCJnT6G4eUh+TaNkQz7mwlRFzxg224HEHMXkIFbbU
+WIV1VWL2c0YXMfD1tNGBEgYWEDembs/lmmltXQ/lmX65HUqxiG4/29isefZ5CpOnXGUeWCJzr/ax
+8j5th4JdW/lvNnlUHoa6BHe8M+tc93TsT+RPAmHxnuANlxMDCUrqjLzX7LcIpMvy7tWK1G224pQp
+tHck0DUeWNW6YrCGpmKwRlRxAL9jr0nXMbyAfsRbgpHdauScUZ2ije9ZK/bzkGoCsqonJhEI6Vu1
+ilIkfXshcIfZK5jZ6XMC+8yID/d3cd4PyQ30Wb8qqPoGHBtndHJDxr1T3K748oycnWd8WxWG9VUh
++CtAyig+HJ6t3O1HZiKsIdq2aQlGVL+u1ObB2X27PXVz+RO5gSWuC8cjgaVs7x9NrzQqaaualJ47
+e/ZLBGdS/Exm08dZl0G3ly4E6sKdpRX8nD1+HdbPujwIxRLO8QdG/vt7Nn0tlSXWrGKeP3tY0HJz
+pR5UCi+NCLNAlT6cz4+FzdgS9c/xzUVUsU4kf7OrigSy4x0wt887NBgwJJ4FbIzQy2Z5xrDvq3Cw
+HpjMOOP6nqMzMgiafXet6kK3xSCEwguULIGB9AxmxT1HcAaKJxxxQMs2r5LpGYM7CSNwDkr6Qv1T
+NzNKrFQ4+wNmKLl9M8EHpNDzu9aVcxUog5KigATMTOaO4j8ibdTEXvObCcVWbyWHMB2YXcQF0SRE
+ilLuWPjrSjE3tUhzW87yi8Od4qMcERXEKbHp51rH/ZpBV0seCjZmBqVts2KKjcFovSWVjcqIMJiy
+fsLF4IHQWI20LPmAV8RPUXuLwAUU1PORTSC09otBG6L9SjdEHowKtGecBjaKCqJCzqhtN20Mibkg
+uHbOxMNKdKAiuvAoDStmfpbEUX3VenhnxHilLjGLBPOrGkw6MYPuf9AbkopOWSkWgZoMnh2sVOEY
+jgpHEN6+qh/wCMUwM65Hz5W9H9UMeIQqWS+/o/kmF40KdFC/XrFfO3dNDCWK0JEZQnqg7++qU84C
+ThleawR4BnbUmZy8ILf6GxNF2q5kniuJCG8spZMZgFovss+nTw1KXpVEH/IaUTo676hzqxGge0dT
+VVC25+sR/c2t8GCSznTbtyl/MDKc87qL0+Bufx/RJKqSdwC8pDmgQXiwiR8tupd9SwItvspTIn4W
+PErzl+2l5j++UD1rLRa+KavpkdD2Uy6PuA6LZMNfbKby5wyRTESY72VMxJfeo6Yl4JYoRlFJgujS
+WllxvTLZjyyFkjYSgzMKjLTjsfBSvhgUGD89i6E90GjhueIRReut9pEfea5dMTBlwuqS7dA94VIf
+5Tf3SjG/Kv3HU2xs5fDLg8mjojT/nnl3cUsMXtS/eZbvRwGqaxbRquGpWBUevWc5Syi/7pCtta/B
+XpXyEeXrUZvSiGRj75E9VQ95RjSrp6jmtZ9HRPloHVmPZzyyieu73iolwetQUBaO2RC366CrK7ue
+z0cvcvohdALrKKdXVc1KdgC5pfY2r5YeonxO73FKk8yGFoE1Gp6lA8muGRUUAVM+252GhY+71ySO
+zJOT67o/0zhMPfc8bDSVkhYl6cY7AVy2ghlkOlY5XpvrMD6OcsaDn9N2UUqDKmRyZ53cfy4Jfd5O
+nwKWyk775yjgSbwcMovFeJKUj7IsPQq4Z4YdQetVXL27KKx8QY8S8tWH+pXHN8J6V0MZS5BdXDDD
+EC2PCTlouc983uMNKKkLZVm2Tos6cIQpCZNd1/alwHlOxwg+semReavKVYzGHUF/BXBeGgkkJGbP
+szgExp7OBqjbHNYrerj6eLFCOH/GR2ZTqJ00O6SDNDUhPbVLBHT2KAM8RlwudTf0d+AosTjO5Etu
+9R65bQ5etZZxsFhlv07jW0TUhPDODocXpxJws5zcGRGOwXFqN7iem8km5/AJNzxHOnVFClnbc3hG
+5hLU6vVZEjmaYWFEcZ9SfN1b+sduEXSeGJktFQtEZiwLURCjDkrhpJ8VxFDpoZThJ70f/dOPjprD
+UjzPPpxbqOrG20a1gGF+1jiDhITSahBCnMnX4vNGy/3Rjs2gaeUmVgtf/zaKh2jd0i9eT8dmHqJf
+AoRge7xKhuKLlmTHukuHlI9fZQb/0eWS8pHoc+/HxoyNUgc7LzhHQU/1uOAtnYa6DMaQYD1qq/St
+AJrwvM4z2LLTouAulUGS2JnJK0JdtbSCA2n+dIUTY3MS2QGllFrpMKYA6dJH2cbGNK0UcWzxfVH6
+/QoPF9mM/KirRQvxMmS59CBsUTJRu5PtCNg9gI3XVVpL1xHvTWV4WxB73Le66hZ3wovUfKOrYg/1
+t5nKj0hd+TGCyi+t2KutxVwJH65Mk3wuR9oUk3lApKYcAzJw5yNMxENHToPSmAAXZmoqJmgAnvbo
+qy7XI2yR3hFkUUOwK1q/bCxqDqyVypVC1orFrSt8yupwEZj3LK4IpVBbkWSAs4cqU7Sr1GWhy7XG
+pzn2/AT9xbcy0Fk9KxWZx6b4FUOI+sj7UUHcVqCfTYKpv9Wz32WDxsal5dXzXYlloi186C1bgV6O
+ecK0eSREkDn1in1D/yMT5jvT4K84xe5nav0Oc+jZ5J7T14M5lNXFEUBuylQ6xyWYIn9Tqn6vHmW0
+dvWud4r0EnTtIO+Iw8nHl4pceB0NCRLrUONSTBPoGPHdsEB/mvcfM2m2SHc1SO5qSa1Uq6+rWNXv
+7yc4CGUj6Rq0s1Emu0bwjl/SXBdhD21f6nW/YzB9tSD+qNS9f3bPeq/yGtVcLOos7/b59OJOyrvT
+CheglhEB7XeammIec4acFbWYqQ6OZ65en0Zlr1POXfvT07PhKpY0okS0bYQhlBrYdUXn5OnYpSiS
+wARp3GlZRByYhDs2XoAxUa6izUFiuhMqIJ9N6sTxxTlNSVC8DUVuRAme9s2IKssXUSBW4ykYvV/5
+F50MboiX2nk1ARNCRqD5ITdK5Zya2C5JVcrRLWJEgJShIY0e5wd61/A6gCnsWGXvuyRwY9BGG4pN
+Gw9IKsd3SXaNM/GkwhTX55IWT8R3xK5thNi7uyofoC+YsNpQlNj6EcK7u87V48ogHxsSI9L3wMmu
+0N7VB+aOlImSwS3FzC4b37+VaqD3q87XUX18LmolDGg2I9PbvoCh2aVB8p9tlWJjB0siFXlZ+Opn
+HyJuzI5JfBEz4e8jJkmP9x7KY1d804lIycBomND9J5XAhGiNYBhLLLXaG7pH3Ve8OsQFpHZ/hatB
+On0+lk/lKgfGaJcV8vISgTTCeAHNcQSVBd4dU+F9BT04io2h/MQWTXPraCgaofRwY8DE96LIRU91
+CkCju4sUQ37HsRKFAfJVLh9g49IP1BMRozIRGbRRegoUuyBRPSVQom70PWBy6flUfDjK2DRX8dg8
+A9IB+7FXElA/Thn5NSqbK6THmin4rCKlobIkCeC4ExBiPEQZhlPxosF2rnJMpLBZboOgvywCPYS5
+v2Rs7JhwjHP1GJY6sFMG/dhkgpU9U6k7a96IpmsBoilQH3/PcQXjpcLZEaTxVz9L6VWRuNedb+3i
+4EVEvCKUW97X3DtXtTgR+QBEJSsxZd4PWJKrsNDxG367Kppz/AyqL/p2nvmdFEf4m3npzbjD5uT7
+aJRrNfgYdYPa1hCnBdMBKLq1nOm2YS3MjqjArZlwElx1xuhTwB29AiNOuY37PD7Oj/aMMn3Mj1XQ
+HfpwWz8jaiJdwTOIkoyWnqUjfkZ1d5f1OaClAQJ0JVQZkTV6vLi+6DyjdD6oyh5jmYPuqysHUN6l
+LBgLJ9iGkUSP1+9YD09UqE14EZWLcB7o4/Mu9/R4c6iFpgcwQAr32R5WvMcse0wF34DrAETdV85U
+d5X3l9Apc0UGQyPBnaQpu4yqG1hHoS1J5QX8m+uIRBe5StL7GKcdzz4LGTaASRj+KLIDOmZgKun5
+FAmOeOt8KZudUZh4dYnv+Cz6UTMMXhselApXnRzii6xg26Efdsb9hdY7Ro+OFKaB53z2p7j9dUGj
+HGiElDx8QnTiDe6qMO/5qISAeNeLJcK3AQhfUSFTG3cJjxW4XL+Fji+4bBV3kR88hSHEdeiKHNa6
+Y2KaGy1LlIgdYdK/RGmXijM5rSBWcgqSgBCXtJCm1mf6msCCz9VtSSYpuT3pk7qARUkeMW1/Z/9B
+Qu2Upwm5eknGK1iKhl4TgDcDQybkOVsJjchbNgZLFQahWtRsiNIkk8JIhtbK+45ZQdkdBcKLVb8D
+zToABxEAqmDP2cH9usq10wDwjIQIgkUct7Ci2kIQhmydmhZxrd4ndIzv8wk2fSgX21LCWok46Ecp
+7MfAoSbyXfTqDJVupqKxy0UNqzLuFisnlFZiuWIG7BqbzBhgqM5AIKe0HdEPYoa8omwoCHN5MX2A
++74Kxfme8LwvxF0Rm9T+eJD30Z6LWqOT1goDRZAEOUYDdJrDRk1e9Gi+O7S6Jukk/74JZa5pcbXw
+okSVhwo5dYmUUZX/jnxOCB9H4dV4kx74tWoWXyv3IJsE1iHVVXTn4YuW+DHWGfpFvA==
+ ]]>
+ <![CDATA[
+ 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
+ ]]>
+ <![CDATA[
+ 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
+ ]]>
+ <![CDATA[
+ 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
+ ]]>
+ <![CDATA[
+ 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
+ ]]>
+ <![CDATA[
+ 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
+ ]]>
+ <![CDATA[
+ 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
+ ]]>
+ <![CDATA[
+ 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
+ ]]>
+ <![CDATA[
+ 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
+ ]]>
+ <![CDATA[
+ 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
+ ]]>
+ <![CDATA[
+ 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
+ ]]>
+ <![CDATA[
+ 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
+ ]]>
+ <![CDATA[
+ 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
+ ]]>
+ <![CDATA[
+ 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
+ ]]>
+ <![CDATA[
+ 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
+ ]]>
+ <![CDATA[
+ MqwonUctmrJMZRRHtDhOkzjzMsh9ToHF8jIW/JyHziiD4Oe64+gFv5hkY9Odp/q96CRLOd6x+G5e
+97e201TS6Aw4RQuKTooTLPjeQYOtxEXHz89C2Mvd4935CR8RGKz02DsBnxb+4E08jbDIMkh+ESmZ
+hY5a6uSLSy5iXU5xglIWB/QPLcvsD5q3AyVrqZddctBQd2B5I1QUdFN27QQSaJlK5T26ApzknMYX
+Bbqjd290oyB5Wm8UvXjC5He3U0zqrrGYqvedU8d3dCsq7mPv+nQKzhfds05DbaLb2GlcUnqZh/OU
+XOZOg/KTx8UpEUkMTvATe6KF08CaSAZxClnXCSpObbX9SUiln7vLNjFjo9X1JjGR4KOtkStiVrSB
+oHd7QLnYhMK033hLWvUId/s2psQmlED1HpTobYKbmHyW8ZDBDuL7J1DJMgplbJEVxGTRFdmJ1lXU
+sBPWs7z3eC1AifFHwsFKeiOop1G3cw2AiwYXkdIY1kD1wb7hbV1EsL+5kshhRUIs4xjWrCl7K6mo
+f8khV3NCeso7Im2IntjoRuZeDTqfVG/rU2l+8FSSjNFtKheMqIF6BHkgOp0714Yh5UK0NMLte7Gs
+I7ko4Kaj1j48VVT4RCAW9bMvORsCwiYitjgDE0FccALTo99NTaL0CRjfEtUqvFOnCjrebRE/yPVG
+T/lBrljNET/IVRrgiH3gREfqpiamhu0laXPRTPv0o3RJcjVxRmvnrTnRCuedBEZSd8b62yNn4R1s
+L4K9BLtdsmc6i6a/bxIq45eTr4sUkvTRUk3uD8bq7dANuiv2GKamI8VzGFWF9EdZBa5K0MT0s/52
+yGPzqrVVb5HDKLqtILBn/e0l3oZ0J1kPwdyjAmgpfqcVXLb4y96twC5mHRuuMj8UcbZ403O0u2JS
+NzMxNbB6/zY/z9FXo/WIuucXTnGb4uW1XmhJNlc0BcnuyGltAfuCp3iJmnC65BqM41R6Qap5lIic
+R4nIJko+jn/OXzXj+dU+9OpxKtatiFOxbilOxbqlOBXrVsWpWNePU7FuKU7FulVxKmnDzHcvjVOx
+blWcinVLcSrWLcWpWLcqTsW6fpyKdf04FehWTRT0IXEqtkt+9uEn1i3FqVi3Kk7FuqU4Fev6cSpU
+JeMIbylq4pbiVKxbilOxblWcStKw1Cnux6kwQsL141SsW4pTsW4pTsW6VXEq1i3FqVi3FKdi3ao4
+FeuW4lSsW4pTsW5VnErSUOJUrFuKU7FuVZyKdUtxKtYtxanYYlWcii36cSq26Mep2GJVnIotluJU
+bLEUp+JJSZxK1M7HqdhiKU7FJtnPGqdii6U4FVssxanYYlWcSjB1yZbiLiuW4lRssSJOxRZLcSq2
+WIpT8aQ0TiVpKHEqwRTZ2RBtsSJOxRZLcSq26Mep2GJVnIotluJUbLEUp2J7ycASp2KLpTgVCJ5V
+CCxnIIotVsWp2GIpTsUWS3EqtlgVp2KLpTgVmy/Fqdh8VZxK0lD8lrZYilNJx+vjVGyxFKdii6U4
+FVusilOxrh+nYt1SnIp1q+JUrFuKU7FuKU7FulVxKtYtxalYtxSnYt2qOBXrluJUrFuKU7FL2c+p
+Ts6pXNLJPfVyp/PyaKc6ecoVvBaNDdXTyakrlX3Ksk5ufWJ88ra+Tm6LVTo5qD2dnNsz1ck9KdXJ
+PTXVyZPHRSdPPiI6eb83WomkWNLJo8FFpBU6eTdb0dt6Onk69V4nj9bI6+TJSmotiWKFTu6Jkx6R
+uyjRyb39KNXJl6iVv2F7Orl1Szq5N1KlOjmoPZ0cl1tPJ6clbEknB7Wnk/OYpjo5SMs6OSW+VCfn
+UUt1ck/a7U3NCp18iaq1Cpd0cn451cnZxSWdnGNJdXKOONXJ06mJqT2dPJppr5OnS+J18mjtvE4e
+rbDXyT0p1snT7aE6OVjZsk7eb2p8pZYVOnnydZVe3JJO3h8MdfJk0KJqJ1PTkZZ1ck52qpNzSVKd
+3Ks1qU6eLHIYRV8n728v0cnTneQV0j61UlG5r5NHX/baMbvY18nDfdep2tHuiknLOnk0hd3b+jp5
+uh5R9/o6ebS8truoV+jk/d0h2reXipeoyzq5J6a5I4lObiLsDhNhd8RwHYnS/Goa+at85lUCFgRE
+FpC6nT7upOjeZY8bLSRqB3nQx51UACOp08ed8jCTe33caak9ovZ6n53zwL4khUcZjZY0FO+9yb0+
+7lTU9R0JMpjL9YWqjztfGSkP+nhM6vTxiFq48KggDnp9XBVElnnq9HGvUYGq+jhIRkid37EjNdE8
+dVTVxzEI6kK518edQqOYPNbHvSsHqN+qj2u5P5KCi8bpGCJ1XMq09dpJ3RyTB33cadwIxtXp46DK
+o14dD3aTPKjjzldQyWN13PnaVnlQx733zuRBHXdagAcL0anjThM+QaXIQ0ekn3evZZc+szeP1fHg
+wogbCuAJPyJ8upRbCD3ptHFfkpZzIJpsqTnDmDzVxgPJxtp4RPXaeBkS6bw6XkpCHVCpO228FHBn
+UL023jmwg5Zdany3sanXVSpMRQ2dwLgZG1kUhFGC1GnjTmotklp417gAj7Enua5tlckfY3XcqYJB
+dHh/Rn3KbVDHnWY+E4S7jswWTkvreH0cYQPiYA9qti/G6EndKZBoj6ihvyWCPg5vZuWnuXOLy4Lb
+oI47KcpCUr5E6dTxiOrVcbxM51i1cafVsDjHkXaqiOI2aONuTVqZji064VSxKu608g7g9lUVh0Nc
+35UF604lMx1r4lhtidEImrhTDA1jgoLtCz95kt+KeqbjhlIEznRQHqUantKxoiqL7hSviZdrNS/Y
+luQ18YgUaeKBmntN3AOMs8ZeoydA5a5ceKZ/tCj0uHtNvPSrkgcFO2IVkSbuBNg/boiYCi36WAZe
+LkhDvKKy7ghoTck8aOJOo31NHjTx/lW7pIkXGihibBo8KE51k6fBg5nMex6humkMWK55Baaz1PTw
+NQQw3cRgXYLuaGK0rUbSdXtgXYLq5alBl6HUlzxeUqY1MViXIJaaHliXZjbHYF3hSurylDtSHGra
+UQNel9SPMxFelxgHTQ+vq6z1OhPzEsdm9SLoALu0jGUPsKvS/ZjgdUmNGtPHZbKes8ZUsa6ZGOyp
+VJbZae5lVkSMP6hvqtBGpgAfidXZCzpKojV6agfYpfdThNfFiqckxYBdUo7dxHBaKiPGoFvej5LG
+D0qRNNNDFGI9oPjxwpdyiCGFjJ+oJH5QsjpMDIQk6SUmhksKpCR+sKP6+EHRvoyN4gclMNzYNH7Q
+eEbcxQ9mHfsLtgLGvRmbWlca3VLpPmj0eCbhg6HeXBI+6C+cCLXLNroVXDDIBvkhQe1itR1SA9AW
+q9cIyXtSpOi06aF2BZ4fNax0QbvXCQCk6eF2BaGn66D43EwM3OVjC1PgrtrLacncCNSH6YMzObuC
+GKSVsDQq18a4XcpBesBdXoePvGql36+SxZCS4g0WqN1O9Hp0tF/9tZBubCmTmJyAMmzscE7Eypse
+s+DES4MHjdM17YIHu8MTggdN49lAHDzod3lkd/d6ThQ8GEhJ8GBH9TKhn/IoeNDoTZuKsSwSFJ8y
+eArz9JQh/DVec/+sVH1Ld4KTwmc9fu26WzClVnoRduGDRu6l7qZwAvPTu1Kc1mXvrp4w/XkUPtiR
+ksi5QA3hg8Zl6b3otEZ9eoGiM0av1RA+mInK293HcLcEbT0+ZXKeeuBdkiwZPe6r70YyQ6GFaHuy
+RcUEpEQIEbUkllQE/jqdg774sxQ9aDtJu/NUWHWvRnvDKv5OtIOsFgZNtxpUm6JM9iSkeN1BwXzV
+UWJPRaB2norwts5TET4b+Qai/nkngtVg4uicWoUZTU+5d2mkx9x7NZK72ChgTOSpkCJ/aW9yX4ja
+Rp4K03iuETwVgZRIFB3VSx7hbZ14YrwEFIsxpvDCTZB3JOM5EYoyf1skKZgSJ52e8oia+CrEn0hF
+ITYMGt3NKVXuxDwyJqtu6UFqSWJ6E9lBZEzWazKPrMnBJtVZkztSbE3uqLXPrhRor0QoLog41Jee
+BRM3EbOlQHMijAu+U1+WD3OT2I0bb11KqVZNPZ05WcAFI5Zgvb6Z8ARU9GlSnuCtuByytyd3pNie
+3FHDgZQSV9FUW3GGpUtipRB6vHZWfavRCsOZWEQbJByzor89pB6zsbGvwva2jKeyaN0ytVITavdx
+KZyQdFFvit5YXOGvsDBmgTFPZqYjxVPYUQOrEgAmrkjtXxeUws5ZAQnP9tc4DKPbCQIXlW4vWFyy
+FdtL0lH61KBph3f6yy98NzPeFNy5Kgwr/MhARMQy6h2OtlZM6uYlpuoEdm/rZjl8NVkOvz3CqnVi
+Q1hbI5boPHVUhOEnWyPIm5GjIqImfC65Be8mCJcIH+zQzCOM8eA/QMQBALy856D/++VXhbn8N772
+KmGEwvYyTkKeB1uJGHcDudOoIA4FstCINCwIiz7Mi8cWUIwGu6nTNsFHskgXkPLRGVUB/75As02a
+TCzkVhkIT9eO78vKEIknFluUumd7/7BchMCoFKha0lCVETTb2EYVMimOF2hBFqNZKpC7zD3j+m+o
+c9f/kGTzZdQJTJRER46XsVyk98HXlXSzCTGYSulNhqdG0+Zf102u4AUsrULNgoLpekkJwHRdJV82
+0MJcUP1Y2hmljHEVFTh0kJMmyRuWqPRQeqr0VIze4A6hBgNrRBApz0UxcHJbElIvj+ZNYPd6FGer
+3kQCxq/wYWwyjwYoIF7rlAU0RAGJHs2FKOh93X4w5L1+YsWgqaQgoHObeWo4XNyQyeMqwJF5Jzuc
+CIV1bMhx8kYTQDrlwBCT0c9eICVzEKhdKIjsIXJvj4cghnJy724gUsI7WSFb5/11VKFJScEeIgJX
+bxt4flQ3VM5DBJGoV0njXBPDlqhaFTqlNnleJv2CKamsk97nmluKYULhCIY3kS6AwGi8cUosMmtO
+Zy8mJbMbqBLeJK/ThTbBRNzoNokWNfcCZLf6sCXr6vs9ohWG0h0WbuJkh+U+Djd+WkMEum2cezdu
+st0hNctklR2Ih1yg3eHpKNEMdMROeBcBHIUZfN2Ywhnb314B4zteIKdzFy2jxKSn2yv3QLe97SWZ
+vRkcn3mEa8wSnyBbtVNzqiupJV6FmLU6J+urmgwOdv8lQSnPULs28+ZuUcwzDtqDo9AN0OOnfqV6
+nDMX6O6YIWPajNCM84ExRaZ3b5YUu5KyHQRHDjtHAO4JoZx5DSzQ4tulI4drCG+UG727rNSe2L/X
+8nCCuyvQ4+jEN2WucfS9uxaydVMu3bW5RE2kLxB/Bz5UhOpuxJABiaF/weheyZ2VFV0hHPkJwoOE
+aNLHkMkSZTXHFrwU/dmotDfx/ErKa8ZS11mnzko6ccZzlkfcqJQeuVLw8MXeLXdoWXi7JIKGMyN7
+i/JzZ0CXqx1QWpln2rQ9ZgTFDbIZw6sy1h8qXI/1AgmWlvg+79VNF4vEp5Fh88G/Bg==
+ ]]>
+ <![CDATA[
+ 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
+ ]]>
+ <![CDATA[
+ 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
+b0act/C2Fzb8/aTus9XBZPfPEzaPNNqdHp44t22jxXiSGNKWt+HT/edrhyGR7IRGO9BFXtRodz47
+OKHfT6aLtb1JujorGx0e7YSx5as+drg2iTTHlf05XNthDuXJbaajp8PIEH9Mq1YaWzBC7qRGE4N7
+Y7hY5ji9hofPhu3FO4p47cpmUFQDLn7EauNmfxys9fXWlY2g05/Q+7bF7GB39qIWhyfNAFvsHZ3M
+6k842+3zLzjarSjRzsrRdPd0zILNh9NpMLyvFpzY7IX8enc/5ioXvl3bXht8P9ppr89Wztsb/Hxh
++/v7D36+OPjdntyp9j0H89mTcThwdvXHWklkNI4cVlGC5klvb+XOES+sVNRZ+sLhYuKvH0o9QQ58
+wZziOX0gWqzTPHSwh/mbTE/fr4O9079e1q97ZPXRay+b8X4rI7fM40lgnWvm2FtXGi8CT8MVnb2g
+9Ty68k6+qaW9+MNffOHOYsvkCVduv91KqX5vdDh+Oo19YKu2YZD/d9QbfuI72TLe2Sc2HB7ujBf7
+w5OYEtpKo3lfLDvu4m/5NICz4Gw7qbtoGgT+HUnNEh5rj7tJZ3MImMMX9aFt+aRltQHhq3Pi9Zsd
+qMPzhSJI28/J8OAUsoo2PEm64CU9msKQd8rDJdc6T1e0tKd5qF2+BcAPwjkLJb2X27ZHHspFT6pc
+3X0oueNWa3xRu3mU4v1CuQVes53h/PBE9hHEoPaMJSzkxa07HnKKxvNUan5R84SDlMe230feSq/n
+p2jd9fwUjeOen6J50vOVWlIy0KPD0dZsl0bxk063SJkH8yez6YlcgHLdPpjL4Qu2SCuyjRY9cazz
+2PeEmPkSt6LKuqrp01MxNohvwtcWy6ar1Q3FVfIiUSplBCvFUBG5VB0/PJGnQrARV9Ns8exEu1LU
+dHf/T897U9PQum9+nHHIda7pB+M/RpMHo/mTUWj5Sk5sefeSIfjZ7F9fjpdUln4zieeh9XXJutj0
+e3DQtvLKi6JpPti6qdYOcM7ZwUKsMalR685sZ3Bf/hTbRE5Eiym+uP/hT5c++/7aR1eHP3xyJ//w
+/uWN6/Nb+88+fTp9987Ndz+58NHmeLh2+H757Zc3yvc+vf7trc/vFV98evfnj+5dnx/tVjdv2Hv1
+B6Yo3suyw63ftp5+kr1//eqvax9f/+yTg8Prh1/ZK+1nrl+9++7ct7qz2Hj65Td3r39WjLY3x9c+
+391aW/vo6dK37u792H6w2rr5wafV328ttn77ZaP4++VP1vdndw/Xb28vnl36vHzv6OZW8f73G79N
+Pvq+/czWk+zOzsq3vV81T6rvvvnp5/VHm2vfHf/VuN2nv1z/7PnNX65/eri2f2nrkw+Obl64tfek
+/Qzn6+Y/Ht8/2nryy/fVxuT65IdPn2w8W2w+q/5ukhn5x4dbu+buP69/9sVH38uL2k4fbv769NdZ
++9OH/9y6vXf73Y3L9W/vr29ffm8qnfhhuHfUfqb57cKl3Ru77psLm8+Kx1c/W/8g//DSxtef/OPS
+9c2Pvr25OTr6+PPv7rz37Oru7vA5fhpfuvHk7jP5tMmuDKv5+P1/fDr+9c7exuSDLz66PL/089H6
+3e0P/4kBXLx+9c6zvP1MefW7X66vT3c/2r907d7VK9X+z9fGVXXl8Em+Pt+9bS49/9SEV+5u3Tn8
+rp256qNR9X2e7X063rwybBfZ3Lt24fIno41J9WBfxvDj3Q+ub97+7L3vb3zSOOC0bN3+qXzv82pz
+9uulz77b++lTu/PeL3zv59MP2iF9Xn78Hpblp/L78psppurzjecXy8u6Qb/bu5uZXw==
+ ]]>
+ <![CDATA[
+ 3ru3dWX42Yc337309zk+U+IPv/ItbNJ+Jtv5n9sFf7n0+c3P9KfPvr/xlbTf/OTGP+Rt9kd7u93B
+P2SXPv/8xid264un1/RF31/77Oreb1//ytUMPW7fd3/D+c+0rTbuhC780nXBXLj2EK1GBWnu3Y2t
+x5zurdHhF0X59/K33fVHW79d2npy5at/3hgOP3p/o9z59pvPvtx6/Pn6o2e7i/UH7+/eW39kc2yB
+9eqXH99rH9r7+40f/vHFUZgl2bzJbv31efe2erI2/9Iv2o+zrSfbN/Y4pe17hxcvff7e1e9llfDm
+9jM3HptL320UP9y5eX0+f/Zt8em977/gKtVuPC/bFfz4k0sbs+bX/mymQ4+n3k+VLC5e1X7m6qVr
+Rxdubk3MRnbHfdr+61Y2lhd9Xu7Mrl99tPif9Ud3FkfLs9lbzWjq/er/MH8XtEfgaf9cG6/3p+ro
+YTO6eeHDg4ubz8qHf7+xk3328dZoPv8kGz24djX0RGYkTMfdW+uP7xjuuc8u/+MmjuxXa1u3f6uG
+ygVkVevtf+5/tX7/1417Nzef3Kkz89XO3s3Nvf0fyUlXrMOtjUl57fvu5eXi7rW/b3z56L1rvU60
+n2n7Mbq/dev5B6P2W998BmaTZ08+/X623N9+u932p08Wtw7+Z6dpLl0tvu7NydXbrZy1OT4cl2Sd
+l396YC++d/vLblxXR59+uN+e6YcXscnuXbp25+93/Fef/tzytLz96wd3P761eLy3v779jztbV8bX
+LtyUFzz56Mty/dG92dPr3z26Pbx5o/7mh/Yzn13KbvwcZuTgxiezr+3ND8tPf2gX/qi5sfv8nx/6
+L/CgTIbCpj/86aO7La+89tH6w8nBx3G7b4Zftqzwo6J6+OzjtfWvftxGzGjE0X2Dx9cfVR/e37z7
+z0cmuUI+/nDryfpHvyZXwsObNx9ffPcZB9Iy4OmoPVpup/dXvwXQ4Hly80SPf9xeq7dmNz55tHut
+nchvvm+P+A/vX/r8Wpnzr+vbn1yfbo7H3+xhcO+iyaOtr7768vLNz264i/wrR/P046m0f3Tv+gcb
+kzvZGtbrp+6gVvUX44+L69/tXKkefHnvodn59dv1/MN3379hL77/66a5tXn3On76vN3p5lo22vn0
+C/PJhc0vAu3z9jPpQ9KUNPy6AQ65ySf5a7l9136Dv17j4+ELm6BtyKvWP7t8s3KXtx7ax38/uIEm
+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
+ ]]>
+ <![CDATA[
+ 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
+ ]]>
+ <![CDATA[
+ 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
+ ]]>
+ <![CDATA[
+ dpPGWGuX3gcWVhe6Cy9dV5V6arFemd2w2Lw1xlqp3FTViWMA8S58IYx/yVWhq+BRTC0CBu+JJc7w
+PRdd78m9BrMFGyBD2cmyQhZO0OtOXGuO4mCP4hpSr6clE/8yXvlsZmcCviYCKJxEWzZlGwmaNpZr
+APxIW1xl7UwxLovSJ24Z0oQE2piskp36KuviqoVrWxfTID+w1cU0dv1OZfPELcPhUywbFVnXTnLc
+zAoAtQdpblAeZ5EJKvHJ9ceeVGkCZ057SNzdsAbQ8RWUBjTpcsB088Y24x3lgAE0ZmQZ+5ed0QRV
+p3EamEyRLg9Xo7oqT7mgOhJeYdwYs95OAwBv2Dje28pz+1LZ1kmUnYhbq2zWr4gydUvbDhO9VDY5
+YtdFKiR1596tVXbHjn/TKYq2ShLX80irs1RRSeKmp+uyzrtzGdatWe1q9OfdmWyQDPxp6lQURrC2
+V3V0xYOJsqlubSfdq+qUzboxdKn2z2hCS0Ev60v9VLRpYwTWPj4XuqfQ0AMTn+kyEkbpuXMjxWDD
+Dvp1bxxjdFbQpr/HY4Ob6syrqVyOKr0yjo5ioGjS1t8MamY+Z0tTXUUTVSGghL6p+euwLnG0a6O2
+1EWf0WVSl2h1A7TFGFKB/EHNulTItkRoroF2Ma/ZcQDN6iIhn67k1wSaZpXZkGmW1UT2u6mOgG7K
+NMsrhZwxrRV/MoCmq2JmmY0K09YsSbRbj2hVf2NdqGarHtEsJd5GSaLdekSGH9pJSaLdekSSDLtW
+SaLdekTJ3b12SaJKXkx2obqcW2cliXbrERHT1i9JJCw11yAudaWX05JEu/WIZCe9VkmiAU26ekRV
+3FOiSN+vzS8rdNm/pG6Tywrp3vzFywr17oe/clmhy+qSuu1cVihXrJibLZtfVuj6s8ewF7d+WaHe
+bfdXLitkpihu/7JCl637PTe5rFDlfoBkJQ3JkrlkVbFsfNuheWGMgwsPzV0S1tl2Ni88tHeq1cYX
+HlKd28apVkYXHjrMgVr3wkPz2w5ZTsi1Ljw0dyEZbNidX3jIFkHzU63WuPDQhkBv48JD83QT4uja
+8MJDy4KyLfmBTW87VNabjS88NO+c1sux9oWHKkp0tx2qfJ2bXHho3iVmMuw6Fx4yiyNNj2+3zxvb
+1buKP23jCw/Nzy0jEfYNLzw0XflK0rK2hQsPzb3JLkeHZ5lceGi+H2anXa9x4SGrapNMwfUlTXPh
+oTkUM/eDowsPzaGgGME2Ljw0j8cQ98OGFx6aF/O6tEWy6154yDBCqdsO6d0a1BprX3iomY+c+rZD
+2rhdozqGwxceWtfibuXCQ/PbDolAb3jhoXmKN2XcbnbhISkjY0kkcaY4K7nQXXhozkPJuN3ChYcm
+c24xEm2Gvq0vPDSHgg2oTS88tH9P4UYXHmIozGnkuJREd+GhScmFdWrv0OmFh+ZmPuzNVi48NFrW
+bxkByfXKyGzY+jggaTUfrS48NI9da9IS1r/wUM1w7YZyHVOdeeGhORQ6z2ajCw+NoNi9ftfmhYcb
+HjGhTwBxdkWhrkh2swsPVR5x3W2HUmBlCxce4not07tXN77w0Nz4MZI0xxcemt926Nr4uCn5wsNN
+vYM2Lzy0U4u7hQsPzW87dDm+p3Ct0mCt6tRfeLh+qT512yGNZqMLD/UuaPq2Q6yh152PyoWH5tlj
+2mVt7QsPzZOotB6otS88ZIwNdduhIdOcXni4ga9TzTTnhVdGe88NLjwkSox12+H6KYqaCw9NxYK+
+/GSzCw/NLUZ5i7v5hYfmRbrKIr3xhYfqbmpvO9TbabZP4VJfeGhsGsmWjcUpXDYvPLRn2Wx84SE9
+mvoAELtiZY0LD83XCuMkcocXHpqvFbItEGMsFw9mttv5DTuNRHsi1qd0OqR29QTNxh5h83x/TRGl
+SqSwpJHwT+5oSlfpS64sGZdftWZGJ4Q3XOx8mMQsPVPtVluwzGc+FxafbrDMnLhDj2e7XOx+lJLe
+glVd7t3TXCPK+cfu2NvjNC7OP0+quZ/nzOVN0B/5DfiKsyJX/zgreGerYtL91BuI4Ndrfi+RPqjv
+n57PrhKzUQfe45FKRONv6dPqfbQZnbsTrVr8tXg1ujkeXJ8m7z7bw7PE7NY/fN+9KwTi5W9P+6o5
+yv4c3k+Gx/7xrJua7c3z4+SZ++7s2Lcr+mvJvffHRiOw+vQ+xidPw6yiBVC1ae6mfX3rjoZe8m7h
+Y3YbOhR9ea5abBa56vvbCVdL7l/N568Z/3yRvmssvC/J/iLRf7zAlZ/t0FEschcVWxmPUoD3HZsv
+nibwBr6MVzIHGepEVfJ68NDqZgpvl1O47cYXZMLrNlev/F6wkG+dsPiF2AE6vNxHYyPuug27iwos
+/T3f8MJ7+9DO7Y7nseq+EP9YeX8G7gGsbT1RylXdq/A0fgYT4k7HqELSXai223vc7nAg+QUuJmqD
+fqqZRqBzFyWqfo94aanOARXH4kQuuVeCuYPlh+rwHl0xWnquXd0nz0oDTz62PDzJxxaDg2rGO7qo
+3OXFF8C5ca72c3v/VKgn3X0A6HamwJXuF/XzoVEKFlZ2XvIHLfcc9avwO0ECXWje3XVDldv7OvwF
++nzxE4WlxGFp+59LdOZoa8XFln6Y39BdSno5loj6lF+8H/mcAU9SY/DPVBDVIgPd05iCfx6FJWXj
+9YFl7XEOWkpR5ctqrFoRTtMAbp0LlcN7q6q/3mjwYd/nb+VtNMtwsVwqgEiF1D3zwRJ/UPrqxXjw
+4ChEPejtlo4AGuVZKUKeCcWHm2PlQQMjbNIII7uNT4U3ZwGgPCYjvtby9HBbiLwMQxG1l+gbfhah
+ANWmWQ62xWSzKXHGwUqnX76ebImAI7WIeHzjBsrxIh/EJHaRuwa0VcOQT0GwRx8WFQcxVIlpqPTS
+4PNzwL6L8xgs1wwDbs6AArq44dFH4m7mdwn++SjGTq9HIvi2HQrlvIde+DQEMER/uVinRRjzSqF5
+BRxJPkTKsd7hfvZj7LupHlbi35TClOS7dn9JW72sLZPQygA6xyUNUIBmY7hKrTuCGzhJX2bStWre
+N2yXG4Mjt7IQgE7e88ogtwUyNkLgp+uVparTi2M+9ACaZUYWkP55BEm/LMv9m5gs/f17ju+3GgHw
+65HHDuJY/0XIZRoCGLx+T1R+DeIIhjzSoysEMoJMVPDP+5j87eiRU3698JicPlj+WjlEDurNaCBS
+z17cYrfaDTw2hdfT2Z7cm9FvEs14sZgW0wfDl8B76TNZPS/+pL1pakOJbySVuoT/kMAKuQZ5eR/F
+WN9k4Vm+cHyNz/vBrx6v/BoI5D1gkV+BHi6/4zpyEstbgKYaDOQOUrcRz2n19XQvQ5tNSEOylnB5
+3S8C8y5Ukc0QRc9Sy8T8OOXL7k+EOEBTuSvOboGuDJZDmUT8UNGa02Pw4PSkvOpdnIMHR8fVzO7V
+oPR84q3nZru/Le1ZCvIMPvmVRwnwHZp8u0C+TwKyTgspb93OoA6MQq0JpfppAZ/GsGJ9Av9MzZGu
+RLXWqCZapSuv4wg43P3M5HFN5CNy+mgAJr0Dwyx8O1fGLXUoWc7vN9lHpgv4/SX/JCtx/Ac+gNoV
+2n3NgFqnhTNLeNBfM0Qr4lYIehSaEUklhj+OYuWTwwkHNGmVCMgz0D2jn+KPZ1zValI409HwQXUa
+hQkw5chjiIvV8iE4eKfImgOKKA/mTa2KJkpAFqNaK8Yl+s1jWYlC/ECJEuCKgOjFh6Ql0BKElEhC
+62Uhi7R6CUdrcejoujLgBnvj8nx+9LZPWy9A5pDJcdi8w+ZFXSi1+3FidaI2eMfzqQLjdU8DY77q
+X8yAnZReSQbk/oNwQhnS8rkcbvdRB+ZXXC2h/XmjOvSitYCnJVzQMBKTqgaGW2w8EgDX6nuME4i5
+UAQkpVft+oTAbzEFjWE/WOo+OGjmBuS23iwot408IeF50U9gIR+oJu9kJPUaHf+Bj7gAaIL5u2AP
+jHmoCp5FI8ie0h9/gYz2sJ/coo0Nzmdia4YOfm7OIJ0e+KCjOZdDWWDQONy7J7GKZOHNi51HxbgD
+NmF/9+oJTMB4TXubN9wbKExbuSFWt8TN+OJxH/LJ7ZLO5bhHli6hiN4K9cGSIPMhL4ZU96u/KkyI
+xwgTIDkj6t4seHgEXKQlPpQX15gPTzQfVo/nmA+as1jCNpgg5i/9MOdW5kPv+Fyf+Q75IGN108MC
++GDBBOmaDjQFioGmi1z3nqg/Rz3fNzaEQUrvk2Q5dT6SmSCseJoJb+enRBhc2ivFfdIpFxLlwscl
+W6BUMLQAUK25WiJd5GgWK6GUYAAjMOScCHon7ZNOFNmgI1LpE2NqSUyz1RGo9GOORkQ/PekRWUe0
+/fSI0AAkTuB5Y8YMP+GmcUeOs6OxAiCokSs4bwgzWHRYc9NP5Jurl6/7+BicsY5pAck6kc71aRfx
+6HeeNQNE3ltf0mgdvJ6kgRUiygKgkTQzGM7nvl7SaGasJWk0J/QAiKSZSis19w2lhAaglRIXuqcQ
+T911RsRvOCIEAOyNGYyAOTOsiQigiU+WtXU6EjCa+9ohRSLAHpEAGRHnooUAEOUBe7NeR+ghtZRN
+yuRQwcCjumZHNBoMMc3hHAnYmKhuX/npUgYgLF50i3Rw04kaJLJJiJA8tyZ0aGCsuS7RqjNIi+c6
+YhE0lE216jRbmoKbWAqy6gyCnTffoEA+L7Mn5J/ibrbUlHacw+9hTPYf4OPMpH3AvhCSts6UA6/a
+7aK9nOJSVXw211Owz/zISXtqyfky8kTR55KPi/NHY9Jeedjr+uVf30N4EEld8t3BpAG4l62H5H9m
+/REJTT0it7TiMgywf14q++0GR/a0XL3fuEeuFj7MjV+VbWczSG+PS3t9/CCMHkAvh/Tshh/gZ1H6
+o48jBWGuRSEUj2+nRZk3tSxa5YGe9fuzSlueODxfUD70S/ZQeVYlfr0XdGm4tH+WHBe1cw4KdEgq
+ApK3zmA73X/Zwx7Oy5Dkp+xPeWiEX0ZoEdgVfDk/rCi9jEpvvSVLAvwnBytg5/xb/Rz9U4b79vDI
+yyPXqYawOzKMngqBZBYzph3FaLjAbpoTfq73KuFM4CV/wN3u0j6e15B8x4rkzFD7OzSZagBuTBJQ
+NVCAZlO4HAWXj3kXh6Gbg3kydxM/K6SeB37k6oCLdODh2q34Gh+Ji+xV3D08fJUceIHVYKTw4S5M
++SnL9SPoab+LSvwqPzR4JKpC+e08If/6uYFxT/kfq8cXNAGFSqDXlX8JHwkIQ9rbC92HPAT5EEX7
+UaH70+Kkb7urKxn4a+Ae+1YeBJVrSHg9GHzjZ3G83+9TvXm9c5fgjD+Aa8BV8Sf6ESxcvL23ys2G
++5qEOHByegnnNO2rj2lTYipFcW/VGCpYn2OoI+K+cCP5ycT9g8eE/Kvc+8LvifJ7t78FLTnnpTa0
+OqvlH89b4ar95Kv0I/k7ZWhPx+qoiU9WWIU0MqQDiqPvYiLPqvuRpNPA6v2ykHTUlw==
+ ]]>
+ <![CDATA[
+ 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
+Fp+Tf8MW+BH+YG+vcl51/fm/+AjEjg==
+ ]]>
+</i:pgf>
+</svg>