From dac3d3127fc94231bdde0c0822bb12de01e9e836 Mon Sep 17 00:00:00 2001 From: enneract Date: Tue, 25 Feb 2014 13:03:43 +0100 Subject: 0.1.7 --- assets/configs/buildables/capbank.cfg | 5 + assets/configs/buildables/refinery.cfg | 5 + assets/configs/buildables/rtg.cfg | 5 + assets/credits.txt | 94 +- assets/default.cfg | 97 + assets/emoticons/1up_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/F1_1x1.tga | Bin 0 -> 2861 bytes assets/emoticons/F2_1x1.tga | Bin 0 -> 2754 bytes assets/emoticons/F3_1x1.tga | Bin 0 -> 2846 bytes assets/emoticons/FAP_1x1.tga | Bin 0 -> 16402 bytes assets/emoticons/Tremulous_1x1.tga | Bin 0 -> 18997 bytes assets/emoticons/aaron_4x1.tga | Bin 0 -> 14781 bytes assets/emoticons/acidtube_1x1.tga | Bin 0 -> 9773 bytes assets/emoticons/act-up_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/advbasilisk_1x1.tga | Bin 0 -> 6307 bytes assets/emoticons/advdragoon_1x1.tga | Bin 0 -> 4811 bytes assets/emoticons/advdretch_1x1.tga | Bin 0 -> 4544 bytes assets/emoticons/advgranger_1x1.tga | Bin 0 -> 6238 bytes assets/emoticons/advmarauder_1x1.tga | Bin 0 -> 3917 bytes assets/emoticons/advtyrant_1x1.tga | Bin 0 -> 4975 bytes assets/emoticons/ah_1x1.tga | Bin 0 -> 9425 bytes assets/emoticons/airplane_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/alien_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/angel_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/angry_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/anrere_1x1.tga | Bin 0 -> 7480 bytes assets/emoticons/apple_1x1.tga | Bin 0 -> 2822 bytes assets/emoticons/approved_2x1.tga | Bin 0 -> 4456 bytes assets/emoticons/armoury_1x1.tga | Bin 0 -> 11939 bytes assets/emoticons/arrogant_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/at-wits-end_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/bacon_2x1.tga | Bin 0 -> 4197 bytes assets/emoticons/bad_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/barricade_1x1.tga | Bin 0 -> 6110 bytes assets/emoticons/bashful_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/basilisk_1x1.tga | Bin 0 -> 6305 bytes assets/emoticons/beat-up_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/beauty_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/beer_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/bgranger_1x1.tga | Bin 0 -> 10716 bytes assets/emoticons/bheart_1x1.tga | Bin 0 -> 5889 bytes assets/emoticons/bigping_1x1.tga | Bin 0 -> 16279 bytes assets/emoticons/bigwimply_1x1.tga | Bin 0 -> 1430 bytes assets/emoticons/blaster_1x1.tga | Bin 0 -> 5634 bytes assets/emoticons/blastershot1_2x1.tga | Bin 0 -> 2603 bytes assets/emoticons/blastershot2_2x1.tga | Bin 0 -> 2490 bytes assets/emoticons/blowkiss_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/bomb_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/booster_1x1.tga | Bin 0 -> 4862 bytes assets/emoticons/bowl_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/boy_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/brb_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/bsuit_1x1.tga | Bin 0 -> 4458 bytes assets/emoticons/bulgy-eyes_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/bunny_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/bye_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/cake_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/call-me_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/camera_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/can_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/car_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/cat_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/chaingun_2x1.tga | Bin 0 -> 9847 bytes assets/emoticons/chaingunshot1_2x1.tga | Bin 0 -> 5346 bytes assets/emoticons/chicken_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/chrome_1x1.tga | Bin 0 -> 3557 bytes assets/emoticons/chronic_1x1.tga | Bin 0 -> 16402 bytes assets/emoticons/cigarette_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/ckit_2x1.tga | Bin 0 -> 14139 bytes assets/emoticons/clap_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/clock_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/cloudy_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/clover_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/clown_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/coffee_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/coins_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/colloquy_1x1.tga | Bin 0 -> 3387 bytes assets/emoticons/communist_1x1.tga | Bin 0 -> 3486 bytes assets/emoticons/computer_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/confused_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/console_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/cookiemonster_1x1.tga | Bin 0 -> 6793 bytes assets/emoticons/cork_1x1.tga | Bin 0 -> 9109 bytes assets/emoticons/cow_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/cowboy_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/crab_1x1.tga | Bin 0 -> 7378 bytes assets/emoticons/crying_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/curl-lip_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/curse_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/cute_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/cyclops_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/dance_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/dazed_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/defcomp_1x1.tga | Bin 0 -> 10338 bytes assets/emoticons/democrat_1x1.tga | Bin 0 -> 3300 bytes assets/emoticons/denied_2x1.tga | Bin 0 -> 4176 bytes assets/emoticons/desire_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/devil_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/disappointed_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/disdain_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/dkok_2x1.tga | Bin 0 -> 2676 bytes assets/emoticons/doctor_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/dog_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/doh_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/dont-know_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/dragoon_1x1.tga | Bin 0 -> 4827 bytes assets/emoticons/dretch_1x1.tga | Bin 0 -> 4544 bytes assets/emoticons/drink_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/drool_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/ds_1x1.tga | Bin 0 -> 4634 bytes assets/emoticons/eagle_1x1.tga | Bin 0 -> 10905 bytes assets/emoticons/earth_1x1.tga | Bin 0 -> 13648 bytes assets/emoticons/eat_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/egg_1x1.tga | Bin 0 -> 7436 bytes assets/emoticons/embarrassed_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/excruciating_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/eyeroll_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/f1b_1x1.tga | Bin 0 -> 2655 bytes assets/emoticons/f2b_1x1.tga | Bin 0 -> 2628 bytes assets/emoticons/f3b_1x1.tga | Bin 0 -> 2624 bytes assets/emoticons/female-fighter_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/film_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/fingers-crossed_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/firefox_1x1.tga | Bin 0 -> 3572 bytes assets/emoticons/flag_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/flags/a_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ad_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ae_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/af_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ai_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/al_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/am_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ao_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ar_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/as_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/at_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/au_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/aw_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ax_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/az_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/b_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ba_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/bb_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/bd_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/be_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/bf_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/bh_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/bi_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/bj_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/bm_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/bo_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/br_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/bs_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/bt_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/bv_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/bw_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/by_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/bz_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/c_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ca_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/catalonia_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/cc_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/cd_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/cf_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ch_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ci_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ck_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/cl_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/cm_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/co_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/cr_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/cs_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/cu_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/cv_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/cx_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/cy_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/cz_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/de_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/dj_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/dk_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/dm_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/do_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/dz_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/e_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ec_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ee_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/eh_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/england_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/er_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/es_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/et_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/eu_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/fam_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/fi_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/fj_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/fk_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/fm_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/fo_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/fr_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ga_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/gb_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/gd_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ge_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/gf_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/gh_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/gi_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/gl_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/gm_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/gq_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/gr_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/gs_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/gt_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/gu_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/gw_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/gy_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/h_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/hk_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/hm_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/hr_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ht_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/hu_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/i_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/id_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ie_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/il_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/io_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/iq_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ir_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/is_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/it_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/j_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/jm_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/jo_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/k_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ke_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/kh_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ki_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/km_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/kr_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/kw_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ky_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/kz_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/la_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/lb_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/lc_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/li_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/lk_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/lr_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ls_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/lt_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/lu_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/lv_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ly_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/m_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ma_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/mc_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/md_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/me_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/mh_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/mk_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ml_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/mm_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/mo_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/mq_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/mr_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ms_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/mt_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/mu_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/mv_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/mw_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/mx_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/my_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/mz_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/na_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/nc_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ne_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/nf_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ni_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/nl_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/no_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/nr_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/nu_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/nz_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/om_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/pa_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/pe_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/pf_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ph_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/pk_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/pl_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/pm_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/pr_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ps_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/pt_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/pw_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/py_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/qa_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/re_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ro_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/rs_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ru_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/rw_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/s_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/sa_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/sb_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/sc_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/scld_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/sd_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/se_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/sh_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/si_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/sj_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/sk_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/sl_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/sm_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/so_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/sr_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/st_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/sv_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/sy_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/sz_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/t_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/tc_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/td_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/tf_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/th_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/tj_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/tk_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/tl_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/tm_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/to_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/tr_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/tt_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/tv_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/tw_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/tz_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/u_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ua_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/um_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/us_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/uy_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/uz_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/v_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/va_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/vc_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ve_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/vi_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/vu_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/wa_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/wf_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ws_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/ye_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/yt_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/za_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/zm_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flags/zw_1x1.tga | Bin 0 -> 1042 bytes assets/emoticons/flamer_2x1.tga | Bin 0 -> 17303 bytes assets/emoticons/foot-in-mouth_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/forcefield_1x1.tga | Bin 0 -> 7615 bytes assets/emoticons/freaked-out_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/fry_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/ftrapper_1x1.tga | Bin 0 -> 10989 bytes assets/emoticons/ghost_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/giggle_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/girl_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/glameow_1x1.tga | Bin 0 -> 2875 bytes assets/emoticons/glasses-cool_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/glasses-nerdy_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/gleaf_1x1.tga | Bin 0 -> 9572 bytes assets/emoticons/go-away_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/goat_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/goldgunl_2x1.tga | Bin 0 -> 8210 bytes assets/emoticons/goldgunr_2x1.tga | Bin 0 -> 8210 bytes assets/emoticons/good_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/gotmilk_2x1.tga | Bin 0 -> 5632 bytes assets/emoticons/granger_1x1.tga | Bin 0 -> 6741 bytes assets/emoticons/greenparty_1x1.tga | Bin 0 -> 8042 bytes assets/emoticons/grenade_1x1.tga | Bin 0 -> 8975 bytes assets/emoticons/gxchat_1x1.tga | Bin 0 -> 3146 bytes assets/emoticons/hammer_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/handcuffs_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/handshake_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/hankhill_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/heart_1x1.tga | Bin 0 -> 11812 bytes assets/emoticons/highfive_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/hive_1x1.tga | Bin 0 -> 9506 bytes assets/emoticons/hl2_1x1.tga | Bin 0 -> 2024 bytes assets/emoticons/hovel_1x1.tga | Bin 0 -> 6692 bytes assets/emoticons/hug-left_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/hug-right_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/human_1x1.tga | Bin 0 -> 4878 bytes assets/emoticons/hypnotized_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/ie_1x1.tga | Bin 0 -> 2598 bytes assets/emoticons/ikusari_1x1.tga | Bin 0 -> 9578 bytes assets/emoticons/in-love_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/irssi_1x1.tga | Bin 0 -> 1749 bytes assets/emoticons/island_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/jump_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/jupiter_1x1.tga | Bin 0 -> 14294 bytes assets/emoticons/kiss2_1x1.tga | Bin 0 -> 12332 bytes assets/emoticons/kiss_1x1.tga | Bin 0 -> 12332 bytes assets/emoticons/kissed_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/kissing_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/knife_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/konversation_1x1.tga | Bin 0 -> 3926 bytes assets/emoticons/kor1_1x1.tga | Bin 0 -> 9470 bytes assets/emoticons/kor2_1x1.tga | Bin 0 -> 14824 bytes assets/emoticons/kor3_1x1.tga | Bin 0 -> 11036 bytes assets/emoticons/kor_1x1.tga | Bin 0 -> 10684 bytes assets/emoticons/korban1_8x1.tga | Bin 0 -> 10447 bytes assets/emoticons/korban2_8x1.tga | Bin 0 -> 11984 bytes assets/emoticons/korn_2x1.tga | Bin 0 -> 14383 bytes assets/emoticons/korx1_1x1.tga | Bin 0 -> 10545 bytes assets/emoticons/korx2_1x1.tga | Bin 0 -> 15699 bytes assets/emoticons/korx3_1x1.tga | Bin 0 -> 13205 bytes assets/emoticons/lambda_1x1.tga | Bin 0 -> 2200 bytes assets/emoticons/lamp_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/lasgun_2x1.tga | Bin 0 -> 12871 bytes assets/emoticons/lasgunshot2_2x1.tga | Bin 0 -> 5212 bytes assets/emoticons/lashes_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/laugh_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/lcannon_2x1.tga | Bin 0 -> 13825 bytes assets/emoticons/lcannonshot1_2x1.tga | Bin 0 -> 19675 bytes assets/emoticons/lcannonshot2_2x1.tga | Bin 0 -> 25142 bytes assets/emoticons/liquor_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/loser_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/love-over_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/love_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/lying_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/mad-tongue_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/magnum_2x1.tga | Bin 0 -> 7812 bytes assets/emoticons/mail_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/male-fighter1_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/male-fighter2_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/marauder_1x1.tga | Bin 0 -> 3833 bytes assets/emoticons/mars_1x1.tga | Bin 0 -> 13437 bytes assets/emoticons/mdriver_2x1.tga | Bin 0 -> 8518 bytes assets/emoticons/mdrivershot1_2x1.tga | Bin 0 -> 3612 bytes assets/emoticons/mdrivershot2_2x1.tga | Bin 0 -> 6465 bytes assets/emoticons/mean_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/meatwad_1x1.tga | Bin 0 -> 3300 bytes assets/emoticons/medstat_1x1.tga | Bin 0 -> 8355 bytes assets/emoticons/meeting_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/mercury_1x1.tga | Bin 0 -> 8053 bytes assets/emoticons/messed_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/mg_1x1.tga | Bin 0 -> 8696 bytes assets/emoticons/midori_1x1.tga | Bin 0 -> 3056 bytes assets/emoticons/milk_1x1.tga | Bin 0 -> 8572 bytes assets/emoticons/mirc_1x1.tga | Bin 0 -> 3887 bytes assets/emoticons/mobile_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/mohawk_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/moneymouth_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/monkey_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/moon_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/msn_1x1.tga | Bin 0 -> 3181 bytes assets/emoticons/music_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/musical-note_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/nailbiting_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/narwahl_1x1.tga | Bin 0 -> 3721 bytes assets/emoticons/neptune_1x1.tga | Bin 0 -> 13435 bytes assets/emoticons/neutral_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/nutella_1x1.tga | Bin 0 -> 10866 bytes assets/emoticons/on-the-phone_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/os/apple_1x1.tga | Bin 0 -> 16428 bytes assets/emoticons/os/arch2_1x1.tga | Bin 0 -> 16428 bytes assets/emoticons/os/arch3_1x1.tga | Bin 0 -> 16428 bytes assets/emoticons/os/arch_1x1.tga | Bin 0 -> 16428 bytes assets/emoticons/os/centos_1x1.tga | Bin 0 -> 8325 bytes assets/emoticons/os/debian_1x1.tga | Bin 0 -> 16428 bytes assets/emoticons/os/dsl_1x1.tga | Bin 0 -> 16428 bytes assets/emoticons/os/fedora_1x1.tga | Bin 0 -> 16428 bytes assets/emoticons/os/freebsd_1x1.tga | Bin 0 -> 14054 bytes assets/emoticons/os/gentoo_1x1.tga | Bin 0 -> 16428 bytes assets/emoticons/os/gnome_1x1.tga | Bin 0 -> 16428 bytes assets/emoticons/os/kanotix_1x1.tga | Bin 0 -> 16428 bytes assets/emoticons/os/kde_1x1.tga | Bin 0 -> 16428 bytes assets/emoticons/os/knoppix_1x1.tga | Bin 0 -> 16428 bytes assets/emoticons/os/kubuntu_1x1.tga | Bin 0 -> 16428 bytes assets/emoticons/os/linspire_1x1.tga | Bin 0 -> 16428 bytes assets/emoticons/os/linux_1x1.tga | Bin 0 -> 16428 bytes assets/emoticons/os/mac_1x1.tga | Bin 0 -> 16428 bytes assets/emoticons/os/mandriva_1x1.tga | Bin 0 -> 16428 bytes assets/emoticons/os/mint_1x1.tga | Bin 0 -> 11227 bytes assets/emoticons/os/netbsd_1x1.tga | Bin 0 -> 16428 bytes assets/emoticons/os/openbsd_1x1.tga | Bin 0 -> 16428 bytes assets/emoticons/os/pclinuxos_1x1.tga | Bin 0 -> 12354 bytes assets/emoticons/os/puppy_1x1.tga | Bin 0 -> 16428 bytes assets/emoticons/os/redhat_1x1.tga | Bin 0 -> 16428 bytes assets/emoticons/os/sabayon_1x1.tga | Bin 0 -> 12166 bytes assets/emoticons/os/slackware_1x1.tga | Bin 0 -> 9918 bytes assets/emoticons/os/slax_1x1.tga | Bin 0 -> 10564 bytes assets/emoticons/os/suse_1x1.tga | Bin 0 -> 16428 bytes assets/emoticons/os/symphony_1x1.tga | Bin 0 -> 16428 bytes assets/emoticons/os/ubuntu_1x1.tga | Bin 0 -> 16428 bytes assets/emoticons/os/windows_1x1.tga | Bin 0 -> 12276 bytes assets/emoticons/os/xfce_1x1.tga | Bin 0 -> 16428 bytes assets/emoticons/os/xubuntu_1x1.tga | Bin 0 -> 6697 bytes assets/emoticons/overmind_1x1.tga | Bin 0 -> 7880 bytes assets/emoticons/painsawShot1_2x1.tga | Bin 0 -> 6828 bytes assets/emoticons/painsaw_2x1.tga | Bin 0 -> 14135 bytes assets/emoticons/party_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/peace_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/phone_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/pidgin_1x1.tga | Bin 0 -> 3301 bytes assets/emoticons/pig_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/pikachu_1x1.tga | Bin 0 -> 2612 bytes assets/emoticons/pill_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/pirate_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/pirateparty_1x1.tga | Bin 0 -> 5958 bytes assets/emoticons/pissed-off_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/pizza_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/plate_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/poop_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/pray_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/present_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/prifle_2x1.tga | Bin 0 -> 14233 bytes assets/emoticons/prifleshot1_2x1.tga | Bin 0 -> 4549 bytes assets/emoticons/pumpkin_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/qq_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/question_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/quiet_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/rain_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/rainbow_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/reactor_1x1.tga | Bin 0 -> 10112 bytes assets/emoticons/repeater_1x1.tga | Bin 0 -> 9801 bytes assets/emoticons/republican_1x1.tga | Bin 0 -> 3389 bytes assets/emoticons/retard_1x1.tga | Bin 0 -> 16279 bytes assets/emoticons/rifle_2x1.tga | Bin 0 -> 15418 bytes assets/emoticons/rifleshot1_2x1.tga | Bin 0 -> 5207 bytes assets/emoticons/rifleshot2_2x1.tga | Bin 0 -> 6713 bytes assets/emoticons/rk_1x1.tga | Bin 0 -> 16402 bytes assets/emoticons/rose-dead_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/rose_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/rotfl_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/sad_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/safari_1x1.tga | Bin 0 -> 3434 bytes assets/emoticons/sarcastic_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/saturn_1x1.tga | Bin 0 -> 7057 bytes assets/emoticons/search_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/secret_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/shame_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/sheep_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/shock_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/shotgun_2x1.tga | Bin 0 -> 13558 bytes assets/emoticons/shotgunshot1_2x1.tga | Bin 0 -> 11786 bytes assets/emoticons/shout_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/shut-mouth_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/sick_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/sidefrown_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/silly_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/sinister_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/skeleton_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/skeletor_2x1.tga | Bin 0 -> 4979 bytes assets/emoticons/skywalker_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/sleepy_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/smile-big_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/smile_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/smirk_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/snail_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/snicker_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/snowman_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/soccerball_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/soda_1x1.tga | Bin 0 -> 5338 bytes assets/emoticons/soh2_1x1.tga | Bin 0 -> 16402 bytes assets/emoticons/soh_1x1.tga | Bin 0 -> 6966 bytes assets/emoticons/soldier_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/spam_1x1.tga | Bin 0 -> 4172 bytes assets/emoticons/squirrel_2x1.tga | Bin 0 -> 8210 bytes assets/emoticons/star_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/starving_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/stop_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/struggle_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/sun_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/swatter_1x1.tga | Bin 0 -> 3889 bytes assets/emoticons/sweat_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/talktohand_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/teamspeak_1x1.tga | Bin 0 -> 3981 bytes assets/emoticons/teeth_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/telenode_1x1.tga | Bin 0 -> 9795 bytes assets/emoticons/terror_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/tesla_1x1.tga | Bin 0 -> 6126 bytes assets/emoticons/thinking_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/thorn1_1x1.tga | Bin 0 -> 1280 bytes assets/emoticons/thorn2_1x1.tga | Bin 0 -> 1412 bytes assets/emoticons/thunder_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/time-out_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/tongue_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/trapper_1x1.tga | Bin 0 -> 9113 bytes assets/emoticons/tremble_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/turret_1x1.tga | Bin 0 -> 4648 bytes assets/emoticons/turtle_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/tv_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/tyrant_1x1.tga | Bin 0 -> 4959 bytes assets/emoticons/umbrella_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/uranus_1x1.tga | Bin 0 -> 12448 bytes assets/emoticons/vampire_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/venus_1x1.tga | Bin 0 -> 11971 bytes assets/emoticons/victory_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/waiting_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/watermelon_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/waving_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/weep_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/wilt_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/wink_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/worship_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/xael_2x1.tga | Bin 0 -> 14233 bytes assets/emoticons/xchat_1x1.tga | Bin 0 -> 2996 bytes assets/emoticons/yahoo_1x1.tga | Bin 0 -> 2023 bytes assets/emoticons/yawn_1x1.tga | Bin 0 -> 4114 bytes assets/emoticons/yin-yang_1x1.tga | Bin 0 -> 4114 bytes assets/gfx/2d/blip.tga | Bin 0 -> 1228 bytes assets/gfx/2d/ch_acircle.tga | Bin 0 -> 42268 bytes assets/gfx/2d/ch_adot.tga | Bin 0 -> 11675 bytes assets/gfx/2d/ch_afriendly.tga | Bin 0 -> 19331 bytes assets/gfx/2d/ch_aheadshot.tga | Bin 0 -> 39227 bytes assets/gfx/2d/ch_circle.tga | Bin 0 -> 34334 bytes assets/gfx/2d/ch_circlehit.tga | Bin 0 -> 38239 bytes assets/gfx/2d/ch_dot.tga | Bin 0 -> 4872 bytes assets/gfx/2d/ch_dothit.tga | Bin 0 -> 13194 bytes assets/gfx/2d/ch_friendly.tga | Bin 0 -> 10686 bytes assets/gfx/2d/digital/0.tga | Bin 0 -> 9386 bytes assets/gfx/2d/digital/1.tga | Bin 0 -> 3632 bytes assets/gfx/2d/digital/2.tga | Bin 0 -> 6359 bytes assets/gfx/2d/digital/3.tga | Bin 0 -> 6304 bytes assets/gfx/2d/digital/4.tga | Bin 0 -> 6305 bytes assets/gfx/2d/digital/5.tga | Bin 0 -> 6437 bytes assets/gfx/2d/digital/6.tga | Bin 0 -> 7512 bytes assets/gfx/2d/digital/7.tga | Bin 0 -> 4458 bytes assets/gfx/2d/digital/8.tga | Bin 0 -> 8466 bytes assets/gfx/2d/digital/9.tga | Bin 0 -> 7391 bytes assets/gfx/2d/digital/comma.tga | Bin 0 -> 2869 bytes assets/gfx/2d/digital/minus.tga | Bin 0 -> 4794 bytes assets/gfx/ckit/background.jpg | Bin 0 -> 21628 bytes assets/gfx/ckit/icon_bp.tga | Bin 0 -> 1944 bytes assets/gfx/ckit/icon_current.tga | Bin 0 -> 1784 bytes assets/gfx/ckit/icon_depth.tga | Bin 0 -> 1730 bytes assets/gfx/ckit/icon_health.tga | Bin 0 -> 3096 bytes assets/gfx/ckit/icon_height.tga | Bin 0 -> 2164 bytes assets/gfx/ckit/icon_network.tga | Bin 0 -> 2920 bytes assets/gfx/ckit/icon_nopower.tga | Bin 0 -> 4904 bytes assets/gfx/ckit/icon_nosurge.tga | Bin 0 -> 4582 bytes assets/gfx/ckit/icon_off.tga | Bin 0 -> 1568 bytes assets/gfx/ckit/icon_power.tga | Bin 0 -> 1654 bytes assets/gfx/ckit/icon_storedbp.tga | Bin 0 -> 4122 bytes assets/gfx/ckit/icon_surge.tga | Bin 0 -> 1370 bytes assets/gfx/ckit/icon_time.tga | Bin 0 -> 3358 bytes assets/gfx/ckit/icon_voltage.tga | Bin 0 -> 1924 bytes assets/gfx/ckit/icon_width.tga | Bin 0 -> 2540 bytes assets/gfx/ckit/noise.jpg | Bin 0 -> 23158 bytes assets/gfx/lightning/lightning01.jpg | Bin 0 -> 113809 bytes assets/models/buildables/capbank/animation.cfg | 14 + assets/models/buildables/capbank/capbank.jpg | Bin 0 -> 81251 bytes assets/models/buildables/capbank/capbank.md3 | Bin 0 -> 21428 bytes .../models/buildables/capbank/capbank_lights.jpg | Bin 0 -> 15703 bytes assets/models/buildables/medistat/animation.cfg | 18 + assets/models/buildables/refinery/animation.cfg | 15 + assets/models/buildables/refinery/refinery.jpg | Bin 0 -> 48604 bytes assets/models/buildables/refinery/refinery.md3 | Bin 0 -> 240204 bytes assets/models/buildables/rtg/animation.cfg | 14 + assets/models/buildables/rtg/rtg.jpg | Bin 0 -> 182743 bytes assets/models/buildables/rtg/rtg.md3 | Bin 0 -> 6404 bytes assets/models/cuboid/concrete/concrete.jpg | Bin 15999 -> 237950 bytes assets/models/cuboid/cracks.tga | Bin 0 -> 85188 bytes assets/models/cuboid/cracks_0.jpg | Bin 3196 -> 0 bytes assets/models/cuboid/cracks_1.jpg | Bin 10416 -> 0 bytes assets/models/cuboid/cracks_2.jpg | Bin 16116 -> 0 bytes assets/models/cuboid/glass/glass.jpg | Bin 4467 -> 59342 bytes assets/models/cuboid/ladder/test.tga | Bin 0 -> 114412 bytes assets/models/cuboid/organic/fragment.tga | Bin 65437 -> 42327 bytes assets/models/cuboid/organic/organic.jpg | Bin 4537 -> 305082 bytes assets/models/cuboid/organic/organic_fx.jpg | Bin 4467 -> 454502 bytes assets/models/cuboid/slime/fragment.tga | Bin 40464 -> 65482 bytes assets/models/cuboid/slime/slime.jpg | Bin 6958 -> 614949 bytes assets/models/players/builder/animation.cfg | 47 + assets/models/players/level0/animation.cfg | 47 + assets/models/players/level1/animation.cfg | 48 + assets/models/players/level2/animation.cfg | 48 + assets/models/players/level3/animation.cfg | 48 + assets/models/players/level4/animation.cfg | 48 + assets/models/weapons/abuild/weapon.cfg | 11 + assets/models/weapons/abuildupg/weapon.cfg | 2 +- assets/models/weapons/blaster/weapon.cfg | 2 +- assets/models/weapons/chaingun/weapon.cfg | 20 + assets/models/weapons/ckit/ckit_background.md3 | Bin 0 -> 428 bytes assets/models/weapons/ckit/ckit_bigicona.md3 | Bin 0 -> 428 bytes assets/models/weapons/ckit/ckit_bigiconb.md3 | Bin 0 -> 428 bytes assets/models/weapons/ckit/ckit_digit.md3 | Bin 0 -> 428 bytes assets/models/weapons/ckit/ckit_icon.md3 | Bin 0 -> 428 bytes assets/models/weapons/ckit/ckit_overlay.md3 | Bin 0 -> 428 bytes assets/models/weapons/ckit/weapon.cfg | 4 + assets/models/weapons/flamer/weapon.cfg | 2 +- assets/models/weapons/lcannon/weapon.cfg | 36 + assets/models/weapons/level0/weapon.cfg | 9 + assets/models/weapons/level1/weapon.cfg | 11 + assets/models/weapons/level1upg/weapon.cfg | 17 + assets/models/weapons/level2/weapon.cfg | 11 + assets/models/weapons/level2upg/weapon.cfg | 18 + assets/models/weapons/level3/weapon.cfg | 16 + assets/models/weapons/level3upg/weapon.cfg | 28 + assets/models/weapons/level4/weapon.cfg | 2 +- assets/models/weapons/lgun/weapon.cfg | 13 + assets/models/weapons/mdriver/weapon.cfg | 12 + assets/models/weapons/prifle/weapon.cfg | 17 + assets/models/weapons/psaw/weapon.cfg | 13 + assets/models/weapons/rifle/weapon.cfg | 20 + assets/models/weapons/shotgun/weapon.cfg | 14 + assets/scripts/conkit.shader | 300 ++ assets/scripts/cuboid.particle | 27 + assets/scripts/cuboid.shader | 100 +- assets/sound/buildables/capbank/sound.cfg | 14 + assets/sound/buildables/human/powerzap1.wav | Bin 0 -> 49884 bytes assets/sound/buildables/human/powerzap2.wav | Bin 0 -> 90060 bytes assets/sound/buildables/human/powerzap3.wav | Bin 0 -> 112692 bytes assets/sound/buildables/human/powerzap4.wav | Bin 0 -> 136594 bytes assets/sound/buildables/human/switch.wav | Bin 0 -> 40080 bytes .../buildables/human/unpowered_surge-old1.wav | Bin 0 -> 553998 bytes assets/sound/buildables/human/unpowered_surge.wav | Bin 0 -> 553998 bytes assets/sound/buildables/refinery/idle1.wav | Bin 0 -> 168580 bytes assets/sound/buildables/refinery/sound.cfg | 14 + assets/sound/buildables/rtg/idle1.wav | Bin 0 -> 325834 bytes assets/sound/buildables/rtg/sound.cfg | 14 + assets/sound/feedback/hit.wav | Bin 0 -> 22894 bytes assets/ui/assets/human/scanner.tga | Bin 0 -> 72695 bytes assets/video/ckit.roq | Bin 0 -> 515109 bytes src/cgame/cg_buildable.c | 682 +++-- src/cgame/cg_draw.c | 81 +- src/cgame/cg_ents.c | 3 +- src/cgame/cg_event.c | 19 + src/cgame/cg_local.h | 121 +- src/cgame/cg_main.c | 92 +- src/cgame/cg_playerstate.c | 6 + src/cgame/cg_servercmds.c | 11 +- src/cgame/cg_tutorial.c | 48 +- src/cgame/cg_weapons.c | 292 +- src/game/bg_misc.c | 244 +- src/game/bg_public.h | 41 +- src/game/g_active.c | 123 +- src/game/g_buildable.c | 2399 +++++++-------- src/game/g_client.c | 8 +- src/game/g_cmds.c | 108 +- src/game/g_combat.c | 26 +- src/game/g_local.h | 64 +- src/game/g_main.c | 141 +- src/game/g_weapon.c | 4 +- src/game/tremulous.h | 89 +- src/ui/ui_main.c | 35 +- src_assets/crosshairs.svg | 3149 ++++++++++++++++++++ 747 files changed, 6977 insertions(+), 2109 deletions(-) create mode 100644 assets/configs/buildables/capbank.cfg create mode 100644 assets/configs/buildables/refinery.cfg create mode 100644 assets/configs/buildables/rtg.cfg create mode 100644 assets/default.cfg create mode 100644 assets/emoticons/1up_1x1.tga create mode 100755 assets/emoticons/F1_1x1.tga create mode 100755 assets/emoticons/F2_1x1.tga create mode 100755 assets/emoticons/F3_1x1.tga create mode 100644 assets/emoticons/FAP_1x1.tga create mode 100644 assets/emoticons/Tremulous_1x1.tga create mode 100644 assets/emoticons/aaron_4x1.tga create mode 100755 assets/emoticons/acidtube_1x1.tga create mode 100755 assets/emoticons/act-up_1x1.tga create mode 100755 assets/emoticons/advbasilisk_1x1.tga create mode 100755 assets/emoticons/advdragoon_1x1.tga create mode 100755 assets/emoticons/advdretch_1x1.tga create mode 100755 assets/emoticons/advgranger_1x1.tga create mode 100755 assets/emoticons/advmarauder_1x1.tga create mode 100755 assets/emoticons/advtyrant_1x1.tga create mode 100755 assets/emoticons/ah_1x1.tga create mode 100755 assets/emoticons/airplane_1x1.tga create mode 100755 assets/emoticons/alien_1x1.tga create mode 100755 assets/emoticons/angel_1x1.tga create mode 100755 assets/emoticons/angry_1x1.tga create mode 100755 assets/emoticons/anrere_1x1.tga create mode 100644 assets/emoticons/apple_1x1.tga create mode 100644 assets/emoticons/approved_2x1.tga create mode 100755 assets/emoticons/armoury_1x1.tga create mode 100755 assets/emoticons/arrogant_1x1.tga create mode 100755 assets/emoticons/at-wits-end_1x1.tga create mode 100644 assets/emoticons/bacon_2x1.tga create mode 100755 assets/emoticons/bad_1x1.tga create mode 100755 assets/emoticons/barricade_1x1.tga create mode 100755 assets/emoticons/bashful_1x1.tga create mode 100755 assets/emoticons/basilisk_1x1.tga create mode 100755 assets/emoticons/beat-up_1x1.tga create mode 100755 assets/emoticons/beauty_1x1.tga create mode 100755 assets/emoticons/beer_1x1.tga create mode 100755 assets/emoticons/bgranger_1x1.tga create mode 100755 assets/emoticons/bheart_1x1.tga create mode 100755 assets/emoticons/bigping_1x1.tga create mode 100644 assets/emoticons/bigwimply_1x1.tga create mode 100755 assets/emoticons/blaster_1x1.tga create mode 100644 assets/emoticons/blastershot1_2x1.tga create mode 100644 assets/emoticons/blastershot2_2x1.tga create mode 100755 assets/emoticons/blowkiss_1x1.tga create mode 100755 assets/emoticons/bomb_1x1.tga create mode 100755 assets/emoticons/booster_1x1.tga create mode 100755 assets/emoticons/bowl_1x1.tga create mode 100755 assets/emoticons/boy_1x1.tga create mode 100755 assets/emoticons/brb_1x1.tga create mode 100755 assets/emoticons/bsuit_1x1.tga create mode 100755 assets/emoticons/bulgy-eyes_1x1.tga create mode 100755 assets/emoticons/bunny_1x1.tga create mode 100755 assets/emoticons/bye_1x1.tga create mode 100755 assets/emoticons/cake_1x1.tga create mode 100755 assets/emoticons/call-me_1x1.tga create mode 100755 assets/emoticons/camera_1x1.tga create mode 100755 assets/emoticons/can_1x1.tga create mode 100755 assets/emoticons/car_1x1.tga create mode 100755 assets/emoticons/cat_1x1.tga create mode 100755 assets/emoticons/chaingun_2x1.tga create mode 100644 assets/emoticons/chaingunshot1_2x1.tga create mode 100755 assets/emoticons/chicken_1x1.tga create mode 100644 assets/emoticons/chrome_1x1.tga create mode 100644 assets/emoticons/chronic_1x1.tga create mode 100755 assets/emoticons/cigarette_1x1.tga create mode 100755 assets/emoticons/ckit_2x1.tga create mode 100755 assets/emoticons/clap_1x1.tga create mode 100755 assets/emoticons/clock_1x1.tga create mode 100755 assets/emoticons/cloudy_1x1.tga create mode 100755 assets/emoticons/clover_1x1.tga create mode 100755 assets/emoticons/clown_1x1.tga create mode 100755 assets/emoticons/coffee_1x1.tga create mode 100755 assets/emoticons/coins_1x1.tga create mode 100644 assets/emoticons/colloquy_1x1.tga create mode 100644 assets/emoticons/communist_1x1.tga create mode 100755 assets/emoticons/computer_1x1.tga create mode 100755 assets/emoticons/confused_1x1.tga create mode 100755 assets/emoticons/console_1x1.tga create mode 100644 assets/emoticons/cookiemonster_1x1.tga create mode 100644 assets/emoticons/cork_1x1.tga create mode 100755 assets/emoticons/cow_1x1.tga create mode 100755 assets/emoticons/cowboy_1x1.tga create mode 100644 assets/emoticons/crab_1x1.tga create mode 100755 assets/emoticons/crying_1x1.tga create mode 100755 assets/emoticons/curl-lip_1x1.tga create mode 100755 assets/emoticons/curse_1x1.tga create mode 100755 assets/emoticons/cute_1x1.tga create mode 100755 assets/emoticons/cyclops_1x1.tga create mode 100755 assets/emoticons/dance_1x1.tga create mode 100755 assets/emoticons/dazed_1x1.tga create mode 100755 assets/emoticons/defcomp_1x1.tga create mode 100644 assets/emoticons/democrat_1x1.tga create mode 100644 assets/emoticons/denied_2x1.tga create mode 100755 assets/emoticons/desire_1x1.tga create mode 100755 assets/emoticons/devil_1x1.tga create mode 100755 assets/emoticons/disappointed_1x1.tga create mode 100755 assets/emoticons/disdain_1x1.tga create mode 100644 assets/emoticons/dkok_2x1.tga create mode 100755 assets/emoticons/doctor_1x1.tga create mode 100755 assets/emoticons/dog_1x1.tga create mode 100755 assets/emoticons/doh_1x1.tga create mode 100755 assets/emoticons/dont-know_1x1.tga create mode 100755 assets/emoticons/dragoon_1x1.tga create mode 100755 assets/emoticons/dretch_1x1.tga create mode 100755 assets/emoticons/drink_1x1.tga create mode 100755 assets/emoticons/drool_1x1.tga create mode 100755 assets/emoticons/ds_1x1.tga create mode 100644 assets/emoticons/eagle_1x1.tga create mode 100755 assets/emoticons/earth_1x1.tga create mode 100755 assets/emoticons/eat_1x1.tga create mode 100755 assets/emoticons/egg_1x1.tga create mode 100755 assets/emoticons/embarrassed_1x1.tga create mode 100755 assets/emoticons/excruciating_1x1.tga create mode 100755 assets/emoticons/eyeroll_1x1.tga create mode 100755 assets/emoticons/f1b_1x1.tga create mode 100755 assets/emoticons/f2b_1x1.tga create mode 100755 assets/emoticons/f3b_1x1.tga create mode 100755 assets/emoticons/female-fighter_1x1.tga create mode 100755 assets/emoticons/film_1x1.tga create mode 100755 assets/emoticons/fingers-crossed_1x1.tga create mode 100644 assets/emoticons/firefox_1x1.tga create mode 100755 assets/emoticons/flag_1x1.tga create mode 100755 assets/emoticons/flags/a_1x1.tga create mode 100755 assets/emoticons/flags/ad_1x1.tga create mode 100755 assets/emoticons/flags/ae_1x1.tga create mode 100755 assets/emoticons/flags/af_1x1.tga create mode 100755 assets/emoticons/flags/ai_1x1.tga create mode 100755 assets/emoticons/flags/al_1x1.tga create mode 100755 assets/emoticons/flags/am_1x1.tga create mode 100755 assets/emoticons/flags/ao_1x1.tga create mode 100755 assets/emoticons/flags/ar_1x1.tga create mode 100755 assets/emoticons/flags/as_1x1.tga create mode 100755 assets/emoticons/flags/at_1x1.tga create mode 100755 assets/emoticons/flags/au_1x1.tga create mode 100755 assets/emoticons/flags/aw_1x1.tga create mode 100755 assets/emoticons/flags/ax_1x1.tga create mode 100755 assets/emoticons/flags/az_1x1.tga create mode 100755 assets/emoticons/flags/b_1x1.tga create mode 100755 assets/emoticons/flags/ba_1x1.tga create mode 100755 assets/emoticons/flags/bb_1x1.tga create mode 100755 assets/emoticons/flags/bd_1x1.tga create mode 100755 assets/emoticons/flags/be_1x1.tga create mode 100755 assets/emoticons/flags/bf_1x1.tga create mode 100755 assets/emoticons/flags/bh_1x1.tga create mode 100755 assets/emoticons/flags/bi_1x1.tga create mode 100755 assets/emoticons/flags/bj_1x1.tga create mode 100755 assets/emoticons/flags/bm_1x1.tga create mode 100755 assets/emoticons/flags/bo_1x1.tga create mode 100755 assets/emoticons/flags/br_1x1.tga create mode 100755 assets/emoticons/flags/bs_1x1.tga create mode 100755 assets/emoticons/flags/bt_1x1.tga create mode 100755 assets/emoticons/flags/bv_1x1.tga create mode 100755 assets/emoticons/flags/bw_1x1.tga create mode 100755 assets/emoticons/flags/by_1x1.tga create mode 100755 assets/emoticons/flags/bz_1x1.tga create mode 100755 assets/emoticons/flags/c_1x1.tga create mode 100755 assets/emoticons/flags/ca_1x1.tga create mode 100755 assets/emoticons/flags/catalonia_1x1.tga create mode 100755 assets/emoticons/flags/cc_1x1.tga create mode 100755 assets/emoticons/flags/cd_1x1.tga create mode 100755 assets/emoticons/flags/cf_1x1.tga create mode 100755 assets/emoticons/flags/ch_1x1.tga create mode 100755 assets/emoticons/flags/ci_1x1.tga create mode 100755 assets/emoticons/flags/ck_1x1.tga create mode 100755 assets/emoticons/flags/cl_1x1.tga create mode 100755 assets/emoticons/flags/cm_1x1.tga create mode 100755 assets/emoticons/flags/co_1x1.tga create mode 100755 assets/emoticons/flags/cr_1x1.tga create mode 100755 assets/emoticons/flags/cs_1x1.tga create mode 100755 assets/emoticons/flags/cu_1x1.tga create mode 100755 assets/emoticons/flags/cv_1x1.tga create mode 100755 assets/emoticons/flags/cx_1x1.tga create mode 100755 assets/emoticons/flags/cy_1x1.tga create mode 100755 assets/emoticons/flags/cz_1x1.tga create mode 100755 assets/emoticons/flags/de_1x1.tga create mode 100755 assets/emoticons/flags/dj_1x1.tga create mode 100755 assets/emoticons/flags/dk_1x1.tga create mode 100755 assets/emoticons/flags/dm_1x1.tga create mode 100755 assets/emoticons/flags/do_1x1.tga create mode 100755 assets/emoticons/flags/dz_1x1.tga create mode 100755 assets/emoticons/flags/e_1x1.tga create mode 100755 assets/emoticons/flags/ec_1x1.tga create mode 100755 assets/emoticons/flags/ee_1x1.tga create mode 100755 assets/emoticons/flags/eh_1x1.tga create mode 100755 assets/emoticons/flags/england_1x1.tga create mode 100755 assets/emoticons/flags/er_1x1.tga create mode 100755 assets/emoticons/flags/es_1x1.tga create mode 100755 assets/emoticons/flags/et_1x1.tga create mode 100755 assets/emoticons/flags/eu_1x1.tga create mode 100755 assets/emoticons/flags/fam_1x1.tga create mode 100755 assets/emoticons/flags/fi_1x1.tga create mode 100755 assets/emoticons/flags/fj_1x1.tga create mode 100755 assets/emoticons/flags/fk_1x1.tga create mode 100755 assets/emoticons/flags/fm_1x1.tga create mode 100755 assets/emoticons/flags/fo_1x1.tga create mode 100755 assets/emoticons/flags/fr_1x1.tga create mode 100755 assets/emoticons/flags/ga_1x1.tga create mode 100755 assets/emoticons/flags/gb_1x1.tga create mode 100755 assets/emoticons/flags/gd_1x1.tga create mode 100755 assets/emoticons/flags/ge_1x1.tga create mode 100755 assets/emoticons/flags/gf_1x1.tga create mode 100755 assets/emoticons/flags/gh_1x1.tga create mode 100755 assets/emoticons/flags/gi_1x1.tga create mode 100755 assets/emoticons/flags/gl_1x1.tga create mode 100755 assets/emoticons/flags/gm_1x1.tga create mode 100755 assets/emoticons/flags/gq_1x1.tga create mode 100755 assets/emoticons/flags/gr_1x1.tga create mode 100755 assets/emoticons/flags/gs_1x1.tga create mode 100755 assets/emoticons/flags/gt_1x1.tga create mode 100755 assets/emoticons/flags/gu_1x1.tga create mode 100755 assets/emoticons/flags/gw_1x1.tga create mode 100755 assets/emoticons/flags/gy_1x1.tga create mode 100755 assets/emoticons/flags/h_1x1.tga create mode 100755 assets/emoticons/flags/hk_1x1.tga create mode 100755 assets/emoticons/flags/hm_1x1.tga create mode 100755 assets/emoticons/flags/hr_1x1.tga create mode 100755 assets/emoticons/flags/ht_1x1.tga create mode 100755 assets/emoticons/flags/hu_1x1.tga create mode 100755 assets/emoticons/flags/i_1x1.tga create mode 100755 assets/emoticons/flags/id_1x1.tga create mode 100755 assets/emoticons/flags/ie_1x1.tga create mode 100755 assets/emoticons/flags/il_1x1.tga create mode 100755 assets/emoticons/flags/io_1x1.tga create mode 100755 assets/emoticons/flags/iq_1x1.tga create mode 100755 assets/emoticons/flags/ir_1x1.tga create mode 100755 assets/emoticons/flags/is_1x1.tga create mode 100755 assets/emoticons/flags/it_1x1.tga create mode 100755 assets/emoticons/flags/j_1x1.tga create mode 100755 assets/emoticons/flags/jm_1x1.tga create mode 100755 assets/emoticons/flags/jo_1x1.tga create mode 100755 assets/emoticons/flags/k_1x1.tga create mode 100755 assets/emoticons/flags/ke_1x1.tga create mode 100755 assets/emoticons/flags/kh_1x1.tga create mode 100755 assets/emoticons/flags/ki_1x1.tga create mode 100755 assets/emoticons/flags/km_1x1.tga create mode 100755 assets/emoticons/flags/kr_1x1.tga create mode 100755 assets/emoticons/flags/kw_1x1.tga create mode 100755 assets/emoticons/flags/ky_1x1.tga create mode 100755 assets/emoticons/flags/kz_1x1.tga create mode 100755 assets/emoticons/flags/la_1x1.tga create mode 100755 assets/emoticons/flags/lb_1x1.tga create mode 100755 assets/emoticons/flags/lc_1x1.tga create mode 100755 assets/emoticons/flags/li_1x1.tga create mode 100755 assets/emoticons/flags/lk_1x1.tga create mode 100755 assets/emoticons/flags/lr_1x1.tga create mode 100755 assets/emoticons/flags/ls_1x1.tga create mode 100755 assets/emoticons/flags/lt_1x1.tga create mode 100755 assets/emoticons/flags/lu_1x1.tga create mode 100755 assets/emoticons/flags/lv_1x1.tga create mode 100755 assets/emoticons/flags/ly_1x1.tga create mode 100755 assets/emoticons/flags/m_1x1.tga create mode 100755 assets/emoticons/flags/ma_1x1.tga create mode 100755 assets/emoticons/flags/mc_1x1.tga create mode 100755 assets/emoticons/flags/md_1x1.tga create mode 100755 assets/emoticons/flags/me_1x1.tga create mode 100755 assets/emoticons/flags/mh_1x1.tga create mode 100755 assets/emoticons/flags/mk_1x1.tga create mode 100755 assets/emoticons/flags/ml_1x1.tga create mode 100755 assets/emoticons/flags/mm_1x1.tga create mode 100755 assets/emoticons/flags/mo_1x1.tga create mode 100755 assets/emoticons/flags/mq_1x1.tga create mode 100755 assets/emoticons/flags/mr_1x1.tga create mode 100755 assets/emoticons/flags/ms_1x1.tga create mode 100755 assets/emoticons/flags/mt_1x1.tga create mode 100755 assets/emoticons/flags/mu_1x1.tga create mode 100755 assets/emoticons/flags/mv_1x1.tga create mode 100755 assets/emoticons/flags/mw_1x1.tga create mode 100755 assets/emoticons/flags/mx_1x1.tga create mode 100755 assets/emoticons/flags/my_1x1.tga create mode 100755 assets/emoticons/flags/mz_1x1.tga create mode 100755 assets/emoticons/flags/na_1x1.tga create mode 100755 assets/emoticons/flags/nc_1x1.tga create mode 100755 assets/emoticons/flags/ne_1x1.tga create mode 100755 assets/emoticons/flags/nf_1x1.tga create mode 100755 assets/emoticons/flags/ni_1x1.tga create mode 100755 assets/emoticons/flags/nl_1x1.tga create mode 100755 assets/emoticons/flags/no_1x1.tga create mode 100755 assets/emoticons/flags/nr_1x1.tga create mode 100755 assets/emoticons/flags/nu_1x1.tga create mode 100755 assets/emoticons/flags/nz_1x1.tga create mode 100755 assets/emoticons/flags/om_1x1.tga create mode 100755 assets/emoticons/flags/pa_1x1.tga create mode 100755 assets/emoticons/flags/pe_1x1.tga create mode 100755 assets/emoticons/flags/pf_1x1.tga create mode 100755 assets/emoticons/flags/ph_1x1.tga create mode 100755 assets/emoticons/flags/pk_1x1.tga create mode 100755 assets/emoticons/flags/pl_1x1.tga create mode 100755 assets/emoticons/flags/pm_1x1.tga create mode 100755 assets/emoticons/flags/pr_1x1.tga create mode 100755 assets/emoticons/flags/ps_1x1.tga create mode 100755 assets/emoticons/flags/pt_1x1.tga create mode 100755 assets/emoticons/flags/pw_1x1.tga create mode 100755 assets/emoticons/flags/py_1x1.tga create mode 100755 assets/emoticons/flags/qa_1x1.tga create mode 100755 assets/emoticons/flags/re_1x1.tga create mode 100755 assets/emoticons/flags/ro_1x1.tga create mode 100755 assets/emoticons/flags/rs_1x1.tga create mode 100755 assets/emoticons/flags/ru_1x1.tga create mode 100755 assets/emoticons/flags/rw_1x1.tga create mode 100755 assets/emoticons/flags/s_1x1.tga create mode 100755 assets/emoticons/flags/sa_1x1.tga create mode 100755 assets/emoticons/flags/sb_1x1.tga create mode 100755 assets/emoticons/flags/sc_1x1.tga create mode 100755 assets/emoticons/flags/scld_1x1.tga create mode 100755 assets/emoticons/flags/sd_1x1.tga create mode 100755 assets/emoticons/flags/se_1x1.tga create mode 100755 assets/emoticons/flags/sh_1x1.tga create mode 100755 assets/emoticons/flags/si_1x1.tga create mode 100755 assets/emoticons/flags/sj_1x1.tga create mode 100755 assets/emoticons/flags/sk_1x1.tga create mode 100755 assets/emoticons/flags/sl_1x1.tga create mode 100755 assets/emoticons/flags/sm_1x1.tga create mode 100755 assets/emoticons/flags/so_1x1.tga create mode 100755 assets/emoticons/flags/sr_1x1.tga create mode 100755 assets/emoticons/flags/st_1x1.tga create mode 100755 assets/emoticons/flags/sv_1x1.tga create mode 100755 assets/emoticons/flags/sy_1x1.tga create mode 100755 assets/emoticons/flags/sz_1x1.tga create mode 100755 assets/emoticons/flags/t_1x1.tga create mode 100755 assets/emoticons/flags/tc_1x1.tga create mode 100755 assets/emoticons/flags/td_1x1.tga create mode 100755 assets/emoticons/flags/tf_1x1.tga create mode 100755 assets/emoticons/flags/th_1x1.tga create mode 100755 assets/emoticons/flags/tj_1x1.tga create mode 100755 assets/emoticons/flags/tk_1x1.tga create mode 100755 assets/emoticons/flags/tl_1x1.tga create mode 100755 assets/emoticons/flags/tm_1x1.tga create mode 100755 assets/emoticons/flags/to_1x1.tga create mode 100755 assets/emoticons/flags/tr_1x1.tga create mode 100755 assets/emoticons/flags/tt_1x1.tga create mode 100755 assets/emoticons/flags/tv_1x1.tga create mode 100755 assets/emoticons/flags/tw_1x1.tga create mode 100755 assets/emoticons/flags/tz_1x1.tga create mode 100755 assets/emoticons/flags/u_1x1.tga create mode 100755 assets/emoticons/flags/ua_1x1.tga create mode 100755 assets/emoticons/flags/um_1x1.tga create mode 100755 assets/emoticons/flags/us_1x1.tga create mode 100755 assets/emoticons/flags/uy_1x1.tga create mode 100755 assets/emoticons/flags/uz_1x1.tga create mode 100755 assets/emoticons/flags/v_1x1.tga create mode 100755 assets/emoticons/flags/va_1x1.tga create mode 100755 assets/emoticons/flags/vc_1x1.tga create mode 100755 assets/emoticons/flags/ve_1x1.tga create mode 100755 assets/emoticons/flags/vi_1x1.tga create mode 100755 assets/emoticons/flags/vu_1x1.tga create mode 100755 assets/emoticons/flags/wa_1x1.tga create mode 100755 assets/emoticons/flags/wf_1x1.tga create mode 100755 assets/emoticons/flags/ws_1x1.tga create mode 100755 assets/emoticons/flags/ye_1x1.tga create mode 100755 assets/emoticons/flags/yt_1x1.tga create mode 100755 assets/emoticons/flags/za_1x1.tga create mode 100755 assets/emoticons/flags/zm_1x1.tga create mode 100755 assets/emoticons/flags/zw_1x1.tga create mode 100755 assets/emoticons/flamer_2x1.tga create mode 100755 assets/emoticons/foot-in-mouth_1x1.tga create mode 100755 assets/emoticons/forcefield_1x1.tga create mode 100755 assets/emoticons/freaked-out_1x1.tga create mode 100644 assets/emoticons/fry_1x1.tga create mode 100755 assets/emoticons/ftrapper_1x1.tga create mode 100755 assets/emoticons/ghost_1x1.tga create mode 100755 assets/emoticons/giggle_1x1.tga create mode 100755 assets/emoticons/girl_1x1.tga create mode 100644 assets/emoticons/glameow_1x1.tga create mode 100755 assets/emoticons/glasses-cool_1x1.tga create mode 100755 assets/emoticons/glasses-nerdy_1x1.tga create mode 100755 assets/emoticons/gleaf_1x1.tga create mode 100755 assets/emoticons/go-away_1x1.tga create mode 100755 assets/emoticons/goat_1x1.tga create mode 100644 assets/emoticons/goldgunl_2x1.tga create mode 100644 assets/emoticons/goldgunr_2x1.tga create mode 100755 assets/emoticons/good_1x1.tga create mode 100644 assets/emoticons/gotmilk_2x1.tga create mode 100755 assets/emoticons/granger_1x1.tga create mode 100644 assets/emoticons/greenparty_1x1.tga create mode 100755 assets/emoticons/grenade_1x1.tga create mode 100644 assets/emoticons/gxchat_1x1.tga create mode 100755 assets/emoticons/hammer_1x1.tga create mode 100755 assets/emoticons/handcuffs_1x1.tga create mode 100755 assets/emoticons/handshake_1x1.tga create mode 100644 assets/emoticons/hankhill_1x1.tga create mode 100755 assets/emoticons/heart_1x1.tga create mode 100755 assets/emoticons/highfive_1x1.tga create mode 100755 assets/emoticons/hive_1x1.tga create mode 100644 assets/emoticons/hl2_1x1.tga create mode 100755 assets/emoticons/hovel_1x1.tga create mode 100755 assets/emoticons/hug-left_1x1.tga create mode 100755 assets/emoticons/hug-right_1x1.tga create mode 100755 assets/emoticons/human_1x1.tga create mode 100755 assets/emoticons/hypnotized_1x1.tga create mode 100644 assets/emoticons/ie_1x1.tga create mode 100755 assets/emoticons/ikusari_1x1.tga create mode 100755 assets/emoticons/in-love_1x1.tga create mode 100644 assets/emoticons/irssi_1x1.tga create mode 100755 assets/emoticons/island_1x1.tga create mode 100755 assets/emoticons/jump_1x1.tga create mode 100755 assets/emoticons/jupiter_1x1.tga create mode 100644 assets/emoticons/kiss2_1x1.tga create mode 100755 assets/emoticons/kiss_1x1.tga create mode 100755 assets/emoticons/kissed_1x1.tga create mode 100755 assets/emoticons/kissing_1x1.tga create mode 100755 assets/emoticons/knife_1x1.tga create mode 100644 assets/emoticons/konversation_1x1.tga create mode 100755 assets/emoticons/kor1_1x1.tga create mode 100755 assets/emoticons/kor2_1x1.tga create mode 100755 assets/emoticons/kor3_1x1.tga create mode 100755 assets/emoticons/kor_1x1.tga create mode 100644 assets/emoticons/korban1_8x1.tga create mode 100644 assets/emoticons/korban2_8x1.tga create mode 100755 assets/emoticons/korn_2x1.tga create mode 100755 assets/emoticons/korx1_1x1.tga create mode 100755 assets/emoticons/korx2_1x1.tga create mode 100755 assets/emoticons/korx3_1x1.tga create mode 100644 assets/emoticons/lambda_1x1.tga create mode 100755 assets/emoticons/lamp_1x1.tga create mode 100755 assets/emoticons/lasgun_2x1.tga create mode 100644 assets/emoticons/lasgunshot2_2x1.tga create mode 100755 assets/emoticons/lashes_1x1.tga create mode 100755 assets/emoticons/laugh_1x1.tga create mode 100755 assets/emoticons/lcannon_2x1.tga create mode 100644 assets/emoticons/lcannonshot1_2x1.tga create mode 100644 assets/emoticons/lcannonshot2_2x1.tga create mode 100755 assets/emoticons/liquor_1x1.tga create mode 100755 assets/emoticons/loser_1x1.tga create mode 100755 assets/emoticons/love-over_1x1.tga create mode 100755 assets/emoticons/love_1x1.tga create mode 100755 assets/emoticons/lying_1x1.tga create mode 100755 assets/emoticons/mad-tongue_1x1.tga create mode 100644 assets/emoticons/magnum_2x1.tga create mode 100755 assets/emoticons/mail_1x1.tga create mode 100755 assets/emoticons/male-fighter1_1x1.tga create mode 100755 assets/emoticons/male-fighter2_1x1.tga create mode 100755 assets/emoticons/marauder_1x1.tga create mode 100755 assets/emoticons/mars_1x1.tga create mode 100755 assets/emoticons/mdriver_2x1.tga create mode 100644 assets/emoticons/mdrivershot1_2x1.tga create mode 100644 assets/emoticons/mdrivershot2_2x1.tga create mode 100755 assets/emoticons/mean_1x1.tga create mode 100644 assets/emoticons/meatwad_1x1.tga create mode 100755 assets/emoticons/medstat_1x1.tga create mode 100755 assets/emoticons/meeting_1x1.tga create mode 100755 assets/emoticons/mercury_1x1.tga create mode 100755 assets/emoticons/messed_1x1.tga create mode 100755 assets/emoticons/mg_1x1.tga create mode 100644 assets/emoticons/midori_1x1.tga create mode 100755 assets/emoticons/milk_1x1.tga create mode 100644 assets/emoticons/mirc_1x1.tga create mode 100755 assets/emoticons/mobile_1x1.tga create mode 100755 assets/emoticons/mohawk_1x1.tga create mode 100755 assets/emoticons/moneymouth_1x1.tga create mode 100755 assets/emoticons/monkey_1x1.tga create mode 100755 assets/emoticons/moon_1x1.tga create mode 100755 assets/emoticons/msn_1x1.tga create mode 100755 assets/emoticons/music_1x1.tga create mode 100755 assets/emoticons/musical-note_1x1.tga create mode 100755 assets/emoticons/nailbiting_1x1.tga create mode 100644 assets/emoticons/narwahl_1x1.tga create mode 100755 assets/emoticons/neptune_1x1.tga create mode 100755 assets/emoticons/neutral_1x1.tga create mode 100755 assets/emoticons/nutella_1x1.tga create mode 100755 assets/emoticons/on-the-phone_1x1.tga create mode 100755 assets/emoticons/os/apple_1x1.tga create mode 100755 assets/emoticons/os/arch2_1x1.tga create mode 100755 assets/emoticons/os/arch3_1x1.tga create mode 100755 assets/emoticons/os/arch_1x1.tga create mode 100755 assets/emoticons/os/centos_1x1.tga create mode 100755 assets/emoticons/os/debian_1x1.tga create mode 100755 assets/emoticons/os/dsl_1x1.tga create mode 100755 assets/emoticons/os/fedora_1x1.tga create mode 100755 assets/emoticons/os/freebsd_1x1.tga create mode 100755 assets/emoticons/os/gentoo_1x1.tga create mode 100755 assets/emoticons/os/gnome_1x1.tga create mode 100755 assets/emoticons/os/kanotix_1x1.tga create mode 100755 assets/emoticons/os/kde_1x1.tga create mode 100755 assets/emoticons/os/knoppix_1x1.tga create mode 100755 assets/emoticons/os/kubuntu_1x1.tga create mode 100755 assets/emoticons/os/linspire_1x1.tga create mode 100755 assets/emoticons/os/linux_1x1.tga create mode 100755 assets/emoticons/os/mac_1x1.tga create mode 100755 assets/emoticons/os/mandriva_1x1.tga create mode 100755 assets/emoticons/os/mint_1x1.tga create mode 100755 assets/emoticons/os/netbsd_1x1.tga create mode 100755 assets/emoticons/os/openbsd_1x1.tga create mode 100755 assets/emoticons/os/pclinuxos_1x1.tga create mode 100755 assets/emoticons/os/puppy_1x1.tga create mode 100755 assets/emoticons/os/redhat_1x1.tga create mode 100755 assets/emoticons/os/sabayon_1x1.tga create mode 100755 assets/emoticons/os/slackware_1x1.tga create mode 100755 assets/emoticons/os/slax_1x1.tga create mode 100755 assets/emoticons/os/suse_1x1.tga create mode 100755 assets/emoticons/os/symphony_1x1.tga create mode 100755 assets/emoticons/os/ubuntu_1x1.tga create mode 100755 assets/emoticons/os/windows_1x1.tga create mode 100755 assets/emoticons/os/xfce_1x1.tga create mode 100755 assets/emoticons/os/xubuntu_1x1.tga create mode 100755 assets/emoticons/overmind_1x1.tga create mode 100644 assets/emoticons/painsawShot1_2x1.tga create mode 100755 assets/emoticons/painsaw_2x1.tga create mode 100755 assets/emoticons/party_1x1.tga create mode 100755 assets/emoticons/peace_1x1.tga create mode 100755 assets/emoticons/phone_1x1.tga create mode 100644 assets/emoticons/pidgin_1x1.tga create mode 100755 assets/emoticons/pig_1x1.tga create mode 100644 assets/emoticons/pikachu_1x1.tga create mode 100755 assets/emoticons/pill_1x1.tga create mode 100755 assets/emoticons/pirate_1x1.tga create mode 100644 assets/emoticons/pirateparty_1x1.tga create mode 100755 assets/emoticons/pissed-off_1x1.tga create mode 100755 assets/emoticons/pizza_1x1.tga create mode 100755 assets/emoticons/plate_1x1.tga create mode 100755 assets/emoticons/poop_1x1.tga create mode 100755 assets/emoticons/pray_1x1.tga create mode 100755 assets/emoticons/present_1x1.tga create mode 100755 assets/emoticons/prifle_2x1.tga create mode 100644 assets/emoticons/prifleshot1_2x1.tga create mode 100755 assets/emoticons/pumpkin_1x1.tga create mode 100755 assets/emoticons/qq_1x1.tga create mode 100755 assets/emoticons/question_1x1.tga create mode 100755 assets/emoticons/quiet_1x1.tga create mode 100755 assets/emoticons/rain_1x1.tga create mode 100755 assets/emoticons/rainbow_1x1.tga create mode 100755 assets/emoticons/reactor_1x1.tga create mode 100755 assets/emoticons/repeater_1x1.tga create mode 100644 assets/emoticons/republican_1x1.tga create mode 100755 assets/emoticons/retard_1x1.tga create mode 100755 assets/emoticons/rifle_2x1.tga create mode 100644 assets/emoticons/rifleshot1_2x1.tga create mode 100644 assets/emoticons/rifleshot2_2x1.tga create mode 100755 assets/emoticons/rk_1x1.tga create mode 100755 assets/emoticons/rose-dead_1x1.tga create mode 100755 assets/emoticons/rose_1x1.tga create mode 100755 assets/emoticons/rotfl_1x1.tga create mode 100755 assets/emoticons/sad_1x1.tga create mode 100644 assets/emoticons/safari_1x1.tga create mode 100755 assets/emoticons/sarcastic_1x1.tga create mode 100755 assets/emoticons/saturn_1x1.tga create mode 100755 assets/emoticons/search_1x1.tga create mode 100755 assets/emoticons/secret_1x1.tga create mode 100755 assets/emoticons/shame_1x1.tga create mode 100755 assets/emoticons/sheep_1x1.tga create mode 100755 assets/emoticons/shock_1x1.tga create mode 100755 assets/emoticons/shotgun_2x1.tga create mode 100644 assets/emoticons/shotgunshot1_2x1.tga create mode 100755 assets/emoticons/shout_1x1.tga create mode 100755 assets/emoticons/shut-mouth_1x1.tga create mode 100755 assets/emoticons/sick_1x1.tga create mode 100755 assets/emoticons/sidefrown_1x1.tga create mode 100755 assets/emoticons/silly_1x1.tga create mode 100755 assets/emoticons/sinister_1x1.tga create mode 100755 assets/emoticons/skeleton_1x1.tga create mode 100644 assets/emoticons/skeletor_2x1.tga create mode 100755 assets/emoticons/skywalker_1x1.tga create mode 100755 assets/emoticons/sleepy_1x1.tga create mode 100755 assets/emoticons/smile-big_1x1.tga create mode 100755 assets/emoticons/smile_1x1.tga create mode 100755 assets/emoticons/smirk_1x1.tga create mode 100755 assets/emoticons/snail_1x1.tga create mode 100755 assets/emoticons/snicker_1x1.tga create mode 100755 assets/emoticons/snowman_1x1.tga create mode 100755 assets/emoticons/soccerball_1x1.tga create mode 100755 assets/emoticons/soda_1x1.tga create mode 100644 assets/emoticons/soh2_1x1.tga create mode 100755 assets/emoticons/soh_1x1.tga create mode 100755 assets/emoticons/soldier_1x1.tga create mode 100755 assets/emoticons/spam_1x1.tga create mode 100644 assets/emoticons/squirrel_2x1.tga create mode 100755 assets/emoticons/star_1x1.tga create mode 100755 assets/emoticons/starving_1x1.tga create mode 100755 assets/emoticons/stop_1x1.tga create mode 100755 assets/emoticons/struggle_1x1.tga create mode 100755 assets/emoticons/sun_1x1.tga create mode 100755 assets/emoticons/swatter_1x1.tga create mode 100755 assets/emoticons/sweat_1x1.tga create mode 100755 assets/emoticons/talktohand_1x1.tga create mode 100644 assets/emoticons/teamspeak_1x1.tga create mode 100755 assets/emoticons/teeth_1x1.tga create mode 100755 assets/emoticons/telenode_1x1.tga create mode 100755 assets/emoticons/terror_1x1.tga create mode 100755 assets/emoticons/tesla_1x1.tga create mode 100755 assets/emoticons/thinking_1x1.tga create mode 100644 assets/emoticons/thorn1_1x1.tga create mode 100644 assets/emoticons/thorn2_1x1.tga create mode 100755 assets/emoticons/thunder_1x1.tga create mode 100755 assets/emoticons/time-out_1x1.tga create mode 100755 assets/emoticons/tongue_1x1.tga create mode 100755 assets/emoticons/trapper_1x1.tga create mode 100755 assets/emoticons/tremble_1x1.tga create mode 100755 assets/emoticons/turret_1x1.tga create mode 100755 assets/emoticons/turtle_1x1.tga create mode 100755 assets/emoticons/tv_1x1.tga create mode 100755 assets/emoticons/tyrant_1x1.tga create mode 100755 assets/emoticons/umbrella_1x1.tga create mode 100755 assets/emoticons/uranus_1x1.tga create mode 100755 assets/emoticons/vampire_1x1.tga create mode 100755 assets/emoticons/venus_1x1.tga create mode 100755 assets/emoticons/victory_1x1.tga create mode 100755 assets/emoticons/waiting_1x1.tga create mode 100755 assets/emoticons/watermelon_1x1.tga create mode 100755 assets/emoticons/waving_1x1.tga create mode 100755 assets/emoticons/weep_1x1.tga create mode 100755 assets/emoticons/wilt_1x1.tga create mode 100755 assets/emoticons/wink_1x1.tga create mode 100755 assets/emoticons/worship_1x1.tga create mode 100755 assets/emoticons/xael_2x1.tga create mode 100644 assets/emoticons/xchat_1x1.tga create mode 100644 assets/emoticons/yahoo_1x1.tga create mode 100755 assets/emoticons/yawn_1x1.tga create mode 100755 assets/emoticons/yin-yang_1x1.tga create mode 100644 assets/gfx/2d/blip.tga create mode 100644 assets/gfx/2d/ch_acircle.tga create mode 100644 assets/gfx/2d/ch_adot.tga create mode 100644 assets/gfx/2d/ch_afriendly.tga create mode 100644 assets/gfx/2d/ch_aheadshot.tga create mode 100644 assets/gfx/2d/ch_circle.tga create mode 100644 assets/gfx/2d/ch_circlehit.tga create mode 100644 assets/gfx/2d/ch_dot.tga create mode 100644 assets/gfx/2d/ch_dothit.tga create mode 100644 assets/gfx/2d/ch_friendly.tga create mode 100644 assets/gfx/2d/digital/0.tga create mode 100644 assets/gfx/2d/digital/1.tga create mode 100644 assets/gfx/2d/digital/2.tga create mode 100644 assets/gfx/2d/digital/3.tga create mode 100644 assets/gfx/2d/digital/4.tga create mode 100644 assets/gfx/2d/digital/5.tga create mode 100644 assets/gfx/2d/digital/6.tga create mode 100644 assets/gfx/2d/digital/7.tga create mode 100644 assets/gfx/2d/digital/8.tga create mode 100644 assets/gfx/2d/digital/9.tga create mode 100644 assets/gfx/2d/digital/comma.tga create mode 100644 assets/gfx/2d/digital/minus.tga create mode 100644 assets/gfx/ckit/background.jpg create mode 100644 assets/gfx/ckit/icon_bp.tga create mode 100644 assets/gfx/ckit/icon_current.tga create mode 100644 assets/gfx/ckit/icon_depth.tga create mode 100644 assets/gfx/ckit/icon_health.tga create mode 100644 assets/gfx/ckit/icon_height.tga create mode 100644 assets/gfx/ckit/icon_network.tga create mode 100644 assets/gfx/ckit/icon_nopower.tga create mode 100644 assets/gfx/ckit/icon_nosurge.tga create mode 100644 assets/gfx/ckit/icon_off.tga create mode 100644 assets/gfx/ckit/icon_power.tga create mode 100644 assets/gfx/ckit/icon_storedbp.tga create mode 100644 assets/gfx/ckit/icon_surge.tga create mode 100644 assets/gfx/ckit/icon_time.tga create mode 100644 assets/gfx/ckit/icon_voltage.tga create mode 100644 assets/gfx/ckit/icon_width.tga create mode 100644 assets/gfx/ckit/noise.jpg create mode 100644 assets/gfx/lightning/lightning01.jpg create mode 100644 assets/models/buildables/capbank/animation.cfg create mode 100644 assets/models/buildables/capbank/capbank.jpg create mode 100644 assets/models/buildables/capbank/capbank.md3 create mode 100644 assets/models/buildables/capbank/capbank_lights.jpg create mode 100644 assets/models/buildables/medistat/animation.cfg create mode 100644 assets/models/buildables/refinery/animation.cfg create mode 100644 assets/models/buildables/refinery/refinery.jpg create mode 100644 assets/models/buildables/refinery/refinery.md3 create mode 100644 assets/models/buildables/rtg/animation.cfg create mode 100644 assets/models/buildables/rtg/rtg.jpg create mode 100644 assets/models/buildables/rtg/rtg.md3 create mode 100644 assets/models/cuboid/cracks.tga delete mode 100644 assets/models/cuboid/cracks_0.jpg delete mode 100644 assets/models/cuboid/cracks_1.jpg delete mode 100644 assets/models/cuboid/cracks_2.jpg create mode 100644 assets/models/cuboid/ladder/test.tga create mode 100644 assets/models/players/builder/animation.cfg create mode 100644 assets/models/players/level0/animation.cfg create mode 100644 assets/models/players/level1/animation.cfg create mode 100644 assets/models/players/level2/animation.cfg create mode 100644 assets/models/players/level3/animation.cfg create mode 100644 assets/models/players/level4/animation.cfg create mode 100644 assets/models/weapons/abuild/weapon.cfg create mode 100644 assets/models/weapons/chaingun/weapon.cfg create mode 100644 assets/models/weapons/ckit/ckit_background.md3 create mode 100644 assets/models/weapons/ckit/ckit_bigicona.md3 create mode 100644 assets/models/weapons/ckit/ckit_bigiconb.md3 create mode 100644 assets/models/weapons/ckit/ckit_digit.md3 create mode 100644 assets/models/weapons/ckit/ckit_icon.md3 create mode 100644 assets/models/weapons/ckit/ckit_overlay.md3 create mode 100644 assets/models/weapons/ckit/weapon.cfg create mode 100644 assets/models/weapons/lcannon/weapon.cfg create mode 100644 assets/models/weapons/level0/weapon.cfg create mode 100644 assets/models/weapons/level1/weapon.cfg create mode 100644 assets/models/weapons/level1upg/weapon.cfg create mode 100644 assets/models/weapons/level2/weapon.cfg create mode 100644 assets/models/weapons/level2upg/weapon.cfg create mode 100644 assets/models/weapons/level3/weapon.cfg create mode 100644 assets/models/weapons/level3upg/weapon.cfg create mode 100644 assets/models/weapons/lgun/weapon.cfg create mode 100644 assets/models/weapons/mdriver/weapon.cfg create mode 100644 assets/models/weapons/prifle/weapon.cfg create mode 100644 assets/models/weapons/psaw/weapon.cfg create mode 100644 assets/models/weapons/rifle/weapon.cfg create mode 100644 assets/models/weapons/shotgun/weapon.cfg create mode 100644 assets/scripts/conkit.shader create mode 100644 assets/sound/buildables/capbank/sound.cfg create mode 100644 assets/sound/buildables/human/powerzap1.wav create mode 100644 assets/sound/buildables/human/powerzap2.wav create mode 100644 assets/sound/buildables/human/powerzap3.wav create mode 100644 assets/sound/buildables/human/powerzap4.wav create mode 100644 assets/sound/buildables/human/switch.wav create mode 100644 assets/sound/buildables/human/unpowered_surge-old1.wav create mode 100644 assets/sound/buildables/human/unpowered_surge.wav create mode 100644 assets/sound/buildables/refinery/idle1.wav create mode 100644 assets/sound/buildables/refinery/sound.cfg create mode 100644 assets/sound/buildables/rtg/idle1.wav create mode 100644 assets/sound/buildables/rtg/sound.cfg create mode 100644 assets/sound/feedback/hit.wav create mode 100644 assets/ui/assets/human/scanner.tga create mode 100644 assets/video/ckit.roq create mode 100644 src_assets/crosshairs.svg 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 Binary files /dev/null and b/assets/emoticons/1up_1x1.tga differ diff --git a/assets/emoticons/F1_1x1.tga b/assets/emoticons/F1_1x1.tga new file mode 100755 index 0000000..92fc194 Binary files /dev/null and b/assets/emoticons/F1_1x1.tga differ diff --git a/assets/emoticons/F2_1x1.tga b/assets/emoticons/F2_1x1.tga new file mode 100755 index 0000000..c3f525f Binary files /dev/null and b/assets/emoticons/F2_1x1.tga differ diff --git a/assets/emoticons/F3_1x1.tga b/assets/emoticons/F3_1x1.tga new file mode 100755 index 0000000..eef8d34 Binary files /dev/null and b/assets/emoticons/F3_1x1.tga differ diff --git a/assets/emoticons/FAP_1x1.tga b/assets/emoticons/FAP_1x1.tga new file mode 100644 index 0000000..63cb204 Binary files /dev/null and b/assets/emoticons/FAP_1x1.tga differ diff --git a/assets/emoticons/Tremulous_1x1.tga b/assets/emoticons/Tremulous_1x1.tga new file mode 100644 index 0000000..6c015c6 Binary files /dev/null and b/assets/emoticons/Tremulous_1x1.tga differ diff --git a/assets/emoticons/aaron_4x1.tga b/assets/emoticons/aaron_4x1.tga new file mode 100644 index 0000000..fd9a96e Binary files /dev/null and b/assets/emoticons/aaron_4x1.tga differ diff --git a/assets/emoticons/acidtube_1x1.tga b/assets/emoticons/acidtube_1x1.tga new file mode 100755 index 0000000..aff4cb9 Binary files /dev/null and b/assets/emoticons/acidtube_1x1.tga differ diff --git a/assets/emoticons/act-up_1x1.tga b/assets/emoticons/act-up_1x1.tga new file mode 100755 index 0000000..072fe47 Binary files /dev/null and b/assets/emoticons/act-up_1x1.tga differ diff --git a/assets/emoticons/advbasilisk_1x1.tga b/assets/emoticons/advbasilisk_1x1.tga new file mode 100755 index 0000000..f387d81 Binary files /dev/null and b/assets/emoticons/advbasilisk_1x1.tga differ diff --git a/assets/emoticons/advdragoon_1x1.tga b/assets/emoticons/advdragoon_1x1.tga new file mode 100755 index 0000000..fbbe685 Binary files /dev/null and b/assets/emoticons/advdragoon_1x1.tga differ diff --git a/assets/emoticons/advdretch_1x1.tga b/assets/emoticons/advdretch_1x1.tga new file mode 100755 index 0000000..0a05f96 Binary files /dev/null and b/assets/emoticons/advdretch_1x1.tga differ diff --git a/assets/emoticons/advgranger_1x1.tga b/assets/emoticons/advgranger_1x1.tga new file mode 100755 index 0000000..5535b5f Binary files /dev/null and b/assets/emoticons/advgranger_1x1.tga differ diff --git a/assets/emoticons/advmarauder_1x1.tga b/assets/emoticons/advmarauder_1x1.tga new file mode 100755 index 0000000..19e2a85 Binary files /dev/null and b/assets/emoticons/advmarauder_1x1.tga differ diff --git a/assets/emoticons/advtyrant_1x1.tga b/assets/emoticons/advtyrant_1x1.tga new file mode 100755 index 0000000..e462c30 Binary files /dev/null and b/assets/emoticons/advtyrant_1x1.tga differ diff --git a/assets/emoticons/ah_1x1.tga b/assets/emoticons/ah_1x1.tga new file mode 100755 index 0000000..19c8bd7 Binary files /dev/null and b/assets/emoticons/ah_1x1.tga differ diff --git a/assets/emoticons/airplane_1x1.tga b/assets/emoticons/airplane_1x1.tga new file mode 100755 index 0000000..be458b6 Binary files /dev/null and b/assets/emoticons/airplane_1x1.tga differ diff --git a/assets/emoticons/alien_1x1.tga b/assets/emoticons/alien_1x1.tga new file mode 100755 index 0000000..d7449f3 Binary files /dev/null and b/assets/emoticons/alien_1x1.tga differ diff --git a/assets/emoticons/angel_1x1.tga b/assets/emoticons/angel_1x1.tga new file mode 100755 index 0000000..8fb00f5 Binary files /dev/null and b/assets/emoticons/angel_1x1.tga differ diff --git a/assets/emoticons/angry_1x1.tga b/assets/emoticons/angry_1x1.tga new file mode 100755 index 0000000..efd7320 Binary files /dev/null and b/assets/emoticons/angry_1x1.tga differ diff --git a/assets/emoticons/anrere_1x1.tga b/assets/emoticons/anrere_1x1.tga new file mode 100755 index 0000000..503a11d Binary files /dev/null and b/assets/emoticons/anrere_1x1.tga differ diff --git a/assets/emoticons/apple_1x1.tga b/assets/emoticons/apple_1x1.tga new file mode 100644 index 0000000..35494f0 Binary files /dev/null and b/assets/emoticons/apple_1x1.tga differ diff --git a/assets/emoticons/approved_2x1.tga b/assets/emoticons/approved_2x1.tga new file mode 100644 index 0000000..f5ccb61 Binary files /dev/null and b/assets/emoticons/approved_2x1.tga differ diff --git a/assets/emoticons/armoury_1x1.tga b/assets/emoticons/armoury_1x1.tga new file mode 100755 index 0000000..f5ebc97 Binary files /dev/null and b/assets/emoticons/armoury_1x1.tga differ diff --git a/assets/emoticons/arrogant_1x1.tga b/assets/emoticons/arrogant_1x1.tga new file mode 100755 index 0000000..c1c4bf8 Binary files /dev/null and b/assets/emoticons/arrogant_1x1.tga 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 Binary files /dev/null and b/assets/emoticons/at-wits-end_1x1.tga differ diff --git a/assets/emoticons/bacon_2x1.tga b/assets/emoticons/bacon_2x1.tga new file mode 100644 index 0000000..bdd4967 Binary files /dev/null and b/assets/emoticons/bacon_2x1.tga differ diff --git a/assets/emoticons/bad_1x1.tga b/assets/emoticons/bad_1x1.tga new file mode 100755 index 0000000..ed95adc Binary files /dev/null and b/assets/emoticons/bad_1x1.tga differ diff --git a/assets/emoticons/barricade_1x1.tga b/assets/emoticons/barricade_1x1.tga new file mode 100755 index 0000000..40efed1 Binary files /dev/null and b/assets/emoticons/barricade_1x1.tga differ diff --git a/assets/emoticons/bashful_1x1.tga b/assets/emoticons/bashful_1x1.tga new file mode 100755 index 0000000..fd1eb15 Binary files /dev/null and b/assets/emoticons/bashful_1x1.tga differ diff --git a/assets/emoticons/basilisk_1x1.tga b/assets/emoticons/basilisk_1x1.tga new file mode 100755 index 0000000..59be142 Binary files /dev/null and b/assets/emoticons/basilisk_1x1.tga differ diff --git a/assets/emoticons/beat-up_1x1.tga b/assets/emoticons/beat-up_1x1.tga new file mode 100755 index 0000000..a6973b5 Binary files /dev/null and b/assets/emoticons/beat-up_1x1.tga differ diff --git a/assets/emoticons/beauty_1x1.tga b/assets/emoticons/beauty_1x1.tga new file mode 100755 index 0000000..c5d63b3 Binary files /dev/null and b/assets/emoticons/beauty_1x1.tga differ diff --git a/assets/emoticons/beer_1x1.tga b/assets/emoticons/beer_1x1.tga new file mode 100755 index 0000000..06b39db Binary files /dev/null and b/assets/emoticons/beer_1x1.tga differ diff --git a/assets/emoticons/bgranger_1x1.tga b/assets/emoticons/bgranger_1x1.tga new file mode 100755 index 0000000..764cc7c Binary files /dev/null and b/assets/emoticons/bgranger_1x1.tga differ diff --git a/assets/emoticons/bheart_1x1.tga b/assets/emoticons/bheart_1x1.tga new file mode 100755 index 0000000..3efa6df Binary files /dev/null and b/assets/emoticons/bheart_1x1.tga differ diff --git a/assets/emoticons/bigping_1x1.tga b/assets/emoticons/bigping_1x1.tga new file mode 100755 index 0000000..3c90abc Binary files /dev/null and b/assets/emoticons/bigping_1x1.tga differ diff --git a/assets/emoticons/bigwimply_1x1.tga b/assets/emoticons/bigwimply_1x1.tga new file mode 100644 index 0000000..c721d60 Binary files /dev/null and b/assets/emoticons/bigwimply_1x1.tga differ diff --git a/assets/emoticons/blaster_1x1.tga b/assets/emoticons/blaster_1x1.tga new file mode 100755 index 0000000..6860b70 Binary files /dev/null and b/assets/emoticons/blaster_1x1.tga differ diff --git a/assets/emoticons/blastershot1_2x1.tga b/assets/emoticons/blastershot1_2x1.tga new file mode 100644 index 0000000..942c2b8 Binary files /dev/null and b/assets/emoticons/blastershot1_2x1.tga differ diff --git a/assets/emoticons/blastershot2_2x1.tga b/assets/emoticons/blastershot2_2x1.tga new file mode 100644 index 0000000..a94a90e Binary files /dev/null and b/assets/emoticons/blastershot2_2x1.tga differ diff --git a/assets/emoticons/blowkiss_1x1.tga b/assets/emoticons/blowkiss_1x1.tga new file mode 100755 index 0000000..7780402 Binary files /dev/null and b/assets/emoticons/blowkiss_1x1.tga differ diff --git a/assets/emoticons/bomb_1x1.tga b/assets/emoticons/bomb_1x1.tga new file mode 100755 index 0000000..5130bb5 Binary files /dev/null and b/assets/emoticons/bomb_1x1.tga differ diff --git a/assets/emoticons/booster_1x1.tga b/assets/emoticons/booster_1x1.tga new file mode 100755 index 0000000..a69f904 Binary files /dev/null and b/assets/emoticons/booster_1x1.tga differ diff --git a/assets/emoticons/bowl_1x1.tga b/assets/emoticons/bowl_1x1.tga new file mode 100755 index 0000000..c4181f3 Binary files /dev/null and b/assets/emoticons/bowl_1x1.tga differ diff --git a/assets/emoticons/boy_1x1.tga b/assets/emoticons/boy_1x1.tga new file mode 100755 index 0000000..c99b38e Binary files /dev/null and b/assets/emoticons/boy_1x1.tga differ diff --git a/assets/emoticons/brb_1x1.tga b/assets/emoticons/brb_1x1.tga new file mode 100755 index 0000000..439f2da Binary files /dev/null and b/assets/emoticons/brb_1x1.tga differ diff --git a/assets/emoticons/bsuit_1x1.tga b/assets/emoticons/bsuit_1x1.tga new file mode 100755 index 0000000..867e63b Binary files /dev/null and b/assets/emoticons/bsuit_1x1.tga differ diff --git a/assets/emoticons/bulgy-eyes_1x1.tga b/assets/emoticons/bulgy-eyes_1x1.tga new file mode 100755 index 0000000..6fa5ccd Binary files /dev/null and b/assets/emoticons/bulgy-eyes_1x1.tga differ diff --git a/assets/emoticons/bunny_1x1.tga b/assets/emoticons/bunny_1x1.tga new file mode 100755 index 0000000..245aa90 Binary files /dev/null and b/assets/emoticons/bunny_1x1.tga differ diff --git a/assets/emoticons/bye_1x1.tga b/assets/emoticons/bye_1x1.tga new file mode 100755 index 0000000..36abca1 Binary files /dev/null and b/assets/emoticons/bye_1x1.tga differ diff --git a/assets/emoticons/cake_1x1.tga b/assets/emoticons/cake_1x1.tga new file mode 100755 index 0000000..03b0e7d Binary files /dev/null and b/assets/emoticons/cake_1x1.tga differ diff --git a/assets/emoticons/call-me_1x1.tga b/assets/emoticons/call-me_1x1.tga new file mode 100755 index 0000000..d9b00a9 Binary files /dev/null and b/assets/emoticons/call-me_1x1.tga differ diff --git a/assets/emoticons/camera_1x1.tga b/assets/emoticons/camera_1x1.tga new file mode 100755 index 0000000..38fbf0f Binary files /dev/null and b/assets/emoticons/camera_1x1.tga differ diff --git a/assets/emoticons/can_1x1.tga b/assets/emoticons/can_1x1.tga new file mode 100755 index 0000000..f2b8096 Binary files /dev/null and b/assets/emoticons/can_1x1.tga differ diff --git a/assets/emoticons/car_1x1.tga b/assets/emoticons/car_1x1.tga new file mode 100755 index 0000000..a20e3b5 Binary files /dev/null and b/assets/emoticons/car_1x1.tga differ diff --git a/assets/emoticons/cat_1x1.tga b/assets/emoticons/cat_1x1.tga new file mode 100755 index 0000000..5bc43f2 Binary files /dev/null and b/assets/emoticons/cat_1x1.tga differ diff --git a/assets/emoticons/chaingun_2x1.tga b/assets/emoticons/chaingun_2x1.tga new file mode 100755 index 0000000..8cddec8 Binary files /dev/null and b/assets/emoticons/chaingun_2x1.tga differ diff --git a/assets/emoticons/chaingunshot1_2x1.tga b/assets/emoticons/chaingunshot1_2x1.tga new file mode 100644 index 0000000..d57a7d8 Binary files /dev/null and b/assets/emoticons/chaingunshot1_2x1.tga differ diff --git a/assets/emoticons/chicken_1x1.tga b/assets/emoticons/chicken_1x1.tga new file mode 100755 index 0000000..d997822 Binary files /dev/null and b/assets/emoticons/chicken_1x1.tga differ diff --git a/assets/emoticons/chrome_1x1.tga b/assets/emoticons/chrome_1x1.tga new file mode 100644 index 0000000..a35aa12 Binary files /dev/null and b/assets/emoticons/chrome_1x1.tga differ diff --git a/assets/emoticons/chronic_1x1.tga b/assets/emoticons/chronic_1x1.tga new file mode 100644 index 0000000..f3f6f8c Binary files /dev/null and b/assets/emoticons/chronic_1x1.tga differ diff --git a/assets/emoticons/cigarette_1x1.tga b/assets/emoticons/cigarette_1x1.tga new file mode 100755 index 0000000..1c08011 Binary files /dev/null and b/assets/emoticons/cigarette_1x1.tga differ diff --git a/assets/emoticons/ckit_2x1.tga b/assets/emoticons/ckit_2x1.tga new file mode 100755 index 0000000..afd35cd Binary files /dev/null and b/assets/emoticons/ckit_2x1.tga differ diff --git a/assets/emoticons/clap_1x1.tga b/assets/emoticons/clap_1x1.tga new file mode 100755 index 0000000..6ae4f34 Binary files /dev/null and b/assets/emoticons/clap_1x1.tga differ diff --git a/assets/emoticons/clock_1x1.tga b/assets/emoticons/clock_1x1.tga new file mode 100755 index 0000000..78ef4a7 Binary files /dev/null and b/assets/emoticons/clock_1x1.tga differ diff --git a/assets/emoticons/cloudy_1x1.tga b/assets/emoticons/cloudy_1x1.tga new file mode 100755 index 0000000..63fba7c Binary files /dev/null and b/assets/emoticons/cloudy_1x1.tga differ diff --git a/assets/emoticons/clover_1x1.tga b/assets/emoticons/clover_1x1.tga new file mode 100755 index 0000000..891362b Binary files /dev/null and b/assets/emoticons/clover_1x1.tga differ diff --git a/assets/emoticons/clown_1x1.tga b/assets/emoticons/clown_1x1.tga new file mode 100755 index 0000000..ca8ac5f Binary files /dev/null and b/assets/emoticons/clown_1x1.tga differ diff --git a/assets/emoticons/coffee_1x1.tga b/assets/emoticons/coffee_1x1.tga new file mode 100755 index 0000000..6d7fa5d Binary files /dev/null and b/assets/emoticons/coffee_1x1.tga differ diff --git a/assets/emoticons/coins_1x1.tga b/assets/emoticons/coins_1x1.tga new file mode 100755 index 0000000..d29ff84 Binary files /dev/null and b/assets/emoticons/coins_1x1.tga differ diff --git a/assets/emoticons/colloquy_1x1.tga b/assets/emoticons/colloquy_1x1.tga new file mode 100644 index 0000000..6391ed4 Binary files /dev/null and b/assets/emoticons/colloquy_1x1.tga differ diff --git a/assets/emoticons/communist_1x1.tga b/assets/emoticons/communist_1x1.tga new file mode 100644 index 0000000..0984013 Binary files /dev/null and b/assets/emoticons/communist_1x1.tga differ diff --git a/assets/emoticons/computer_1x1.tga b/assets/emoticons/computer_1x1.tga new file mode 100755 index 0000000..98173c3 Binary files /dev/null and b/assets/emoticons/computer_1x1.tga differ diff --git a/assets/emoticons/confused_1x1.tga b/assets/emoticons/confused_1x1.tga new file mode 100755 index 0000000..01a71e3 Binary files /dev/null and b/assets/emoticons/confused_1x1.tga differ diff --git a/assets/emoticons/console_1x1.tga b/assets/emoticons/console_1x1.tga new file mode 100755 index 0000000..afd2ae6 Binary files /dev/null and b/assets/emoticons/console_1x1.tga differ diff --git a/assets/emoticons/cookiemonster_1x1.tga b/assets/emoticons/cookiemonster_1x1.tga new file mode 100644 index 0000000..cd0f244 Binary files /dev/null and b/assets/emoticons/cookiemonster_1x1.tga differ diff --git a/assets/emoticons/cork_1x1.tga b/assets/emoticons/cork_1x1.tga new file mode 100644 index 0000000..0155998 Binary files /dev/null and b/assets/emoticons/cork_1x1.tga differ diff --git a/assets/emoticons/cow_1x1.tga b/assets/emoticons/cow_1x1.tga new file mode 100755 index 0000000..720a856 Binary files /dev/null and b/assets/emoticons/cow_1x1.tga differ diff --git a/assets/emoticons/cowboy_1x1.tga b/assets/emoticons/cowboy_1x1.tga new file mode 100755 index 0000000..4422511 Binary files /dev/null and b/assets/emoticons/cowboy_1x1.tga differ diff --git a/assets/emoticons/crab_1x1.tga b/assets/emoticons/crab_1x1.tga new file mode 100644 index 0000000..3b7dba6 Binary files /dev/null and b/assets/emoticons/crab_1x1.tga differ diff --git a/assets/emoticons/crying_1x1.tga b/assets/emoticons/crying_1x1.tga new file mode 100755 index 0000000..c404e0d Binary files /dev/null and b/assets/emoticons/crying_1x1.tga differ diff --git a/assets/emoticons/curl-lip_1x1.tga b/assets/emoticons/curl-lip_1x1.tga new file mode 100755 index 0000000..7d0db4b Binary files /dev/null and b/assets/emoticons/curl-lip_1x1.tga differ diff --git a/assets/emoticons/curse_1x1.tga b/assets/emoticons/curse_1x1.tga new file mode 100755 index 0000000..99ec877 Binary files /dev/null and b/assets/emoticons/curse_1x1.tga differ diff --git a/assets/emoticons/cute_1x1.tga b/assets/emoticons/cute_1x1.tga new file mode 100755 index 0000000..8cc467d Binary files /dev/null and b/assets/emoticons/cute_1x1.tga differ diff --git a/assets/emoticons/cyclops_1x1.tga b/assets/emoticons/cyclops_1x1.tga new file mode 100755 index 0000000..20598bf Binary files /dev/null and b/assets/emoticons/cyclops_1x1.tga differ diff --git a/assets/emoticons/dance_1x1.tga b/assets/emoticons/dance_1x1.tga new file mode 100755 index 0000000..66d7f15 Binary files /dev/null and b/assets/emoticons/dance_1x1.tga differ diff --git a/assets/emoticons/dazed_1x1.tga b/assets/emoticons/dazed_1x1.tga new file mode 100755 index 0000000..1e2b20a Binary files /dev/null and b/assets/emoticons/dazed_1x1.tga differ diff --git a/assets/emoticons/defcomp_1x1.tga b/assets/emoticons/defcomp_1x1.tga new file mode 100755 index 0000000..0e8ec49 Binary files /dev/null and b/assets/emoticons/defcomp_1x1.tga differ diff --git a/assets/emoticons/democrat_1x1.tga b/assets/emoticons/democrat_1x1.tga new file mode 100644 index 0000000..f17f0b4 Binary files /dev/null and b/assets/emoticons/democrat_1x1.tga differ diff --git a/assets/emoticons/denied_2x1.tga b/assets/emoticons/denied_2x1.tga new file mode 100644 index 0000000..3193eab Binary files /dev/null and b/assets/emoticons/denied_2x1.tga differ diff --git a/assets/emoticons/desire_1x1.tga b/assets/emoticons/desire_1x1.tga new file mode 100755 index 0000000..093ea94 Binary files /dev/null and b/assets/emoticons/desire_1x1.tga differ diff --git a/assets/emoticons/devil_1x1.tga b/assets/emoticons/devil_1x1.tga new file mode 100755 index 0000000..e2823c5 Binary files /dev/null and b/assets/emoticons/devil_1x1.tga differ diff --git a/assets/emoticons/disappointed_1x1.tga b/assets/emoticons/disappointed_1x1.tga new file mode 100755 index 0000000..8799a26 Binary files /dev/null and b/assets/emoticons/disappointed_1x1.tga differ diff --git a/assets/emoticons/disdain_1x1.tga b/assets/emoticons/disdain_1x1.tga new file mode 100755 index 0000000..ffdec98 Binary files /dev/null and b/assets/emoticons/disdain_1x1.tga differ diff --git a/assets/emoticons/dkok_2x1.tga b/assets/emoticons/dkok_2x1.tga new file mode 100644 index 0000000..150a6a2 Binary files /dev/null and b/assets/emoticons/dkok_2x1.tga differ diff --git a/assets/emoticons/doctor_1x1.tga b/assets/emoticons/doctor_1x1.tga new file mode 100755 index 0000000..f71ef12 Binary files /dev/null and b/assets/emoticons/doctor_1x1.tga differ diff --git a/assets/emoticons/dog_1x1.tga b/assets/emoticons/dog_1x1.tga new file mode 100755 index 0000000..446e4c1 Binary files /dev/null and b/assets/emoticons/dog_1x1.tga differ diff --git a/assets/emoticons/doh_1x1.tga b/assets/emoticons/doh_1x1.tga new file mode 100755 index 0000000..7057a8d Binary files /dev/null and b/assets/emoticons/doh_1x1.tga differ diff --git a/assets/emoticons/dont-know_1x1.tga b/assets/emoticons/dont-know_1x1.tga new file mode 100755 index 0000000..9475f23 Binary files /dev/null and b/assets/emoticons/dont-know_1x1.tga differ diff --git a/assets/emoticons/dragoon_1x1.tga b/assets/emoticons/dragoon_1x1.tga new file mode 100755 index 0000000..c13529c Binary files /dev/null and b/assets/emoticons/dragoon_1x1.tga differ diff --git a/assets/emoticons/dretch_1x1.tga b/assets/emoticons/dretch_1x1.tga new file mode 100755 index 0000000..170b731 Binary files /dev/null and b/assets/emoticons/dretch_1x1.tga differ diff --git a/assets/emoticons/drink_1x1.tga b/assets/emoticons/drink_1x1.tga new file mode 100755 index 0000000..82236e9 Binary files /dev/null and b/assets/emoticons/drink_1x1.tga differ diff --git a/assets/emoticons/drool_1x1.tga b/assets/emoticons/drool_1x1.tga new file mode 100755 index 0000000..b98d439 Binary files /dev/null and b/assets/emoticons/drool_1x1.tga differ diff --git a/assets/emoticons/ds_1x1.tga b/assets/emoticons/ds_1x1.tga new file mode 100755 index 0000000..c38ce48 Binary files /dev/null and b/assets/emoticons/ds_1x1.tga differ diff --git a/assets/emoticons/eagle_1x1.tga b/assets/emoticons/eagle_1x1.tga new file mode 100644 index 0000000..6f2cf8c Binary files /dev/null and b/assets/emoticons/eagle_1x1.tga differ diff --git a/assets/emoticons/earth_1x1.tga b/assets/emoticons/earth_1x1.tga new file mode 100755 index 0000000..60f0a18 Binary files /dev/null and b/assets/emoticons/earth_1x1.tga differ diff --git a/assets/emoticons/eat_1x1.tga b/assets/emoticons/eat_1x1.tga new file mode 100755 index 0000000..ec718a3 Binary files /dev/null and b/assets/emoticons/eat_1x1.tga differ diff --git a/assets/emoticons/egg_1x1.tga b/assets/emoticons/egg_1x1.tga new file mode 100755 index 0000000..b96b9e5 Binary files /dev/null and b/assets/emoticons/egg_1x1.tga differ diff --git a/assets/emoticons/embarrassed_1x1.tga b/assets/emoticons/embarrassed_1x1.tga new file mode 100755 index 0000000..4a1926c Binary files /dev/null and b/assets/emoticons/embarrassed_1x1.tga differ diff --git a/assets/emoticons/excruciating_1x1.tga b/assets/emoticons/excruciating_1x1.tga new file mode 100755 index 0000000..a0c50bb Binary files /dev/null and b/assets/emoticons/excruciating_1x1.tga differ diff --git a/assets/emoticons/eyeroll_1x1.tga b/assets/emoticons/eyeroll_1x1.tga new file mode 100755 index 0000000..6991cf1 Binary files /dev/null and b/assets/emoticons/eyeroll_1x1.tga differ diff --git a/assets/emoticons/f1b_1x1.tga b/assets/emoticons/f1b_1x1.tga new file mode 100755 index 0000000..f2ba3d1 Binary files /dev/null and b/assets/emoticons/f1b_1x1.tga differ diff --git a/assets/emoticons/f2b_1x1.tga b/assets/emoticons/f2b_1x1.tga new file mode 100755 index 0000000..f9d3de8 Binary files /dev/null and b/assets/emoticons/f2b_1x1.tga differ diff --git a/assets/emoticons/f3b_1x1.tga b/assets/emoticons/f3b_1x1.tga new file mode 100755 index 0000000..2dfbdfa Binary files /dev/null and b/assets/emoticons/f3b_1x1.tga differ diff --git a/assets/emoticons/female-fighter_1x1.tga b/assets/emoticons/female-fighter_1x1.tga new file mode 100755 index 0000000..337a3fc Binary files /dev/null and b/assets/emoticons/female-fighter_1x1.tga differ diff --git a/assets/emoticons/film_1x1.tga b/assets/emoticons/film_1x1.tga new file mode 100755 index 0000000..640a16a Binary files /dev/null and b/assets/emoticons/film_1x1.tga differ diff --git a/assets/emoticons/fingers-crossed_1x1.tga b/assets/emoticons/fingers-crossed_1x1.tga new file mode 100755 index 0000000..cf55dca Binary files /dev/null and b/assets/emoticons/fingers-crossed_1x1.tga differ diff --git a/assets/emoticons/firefox_1x1.tga b/assets/emoticons/firefox_1x1.tga new file mode 100644 index 0000000..3979c3f Binary files /dev/null and b/assets/emoticons/firefox_1x1.tga differ diff --git a/assets/emoticons/flag_1x1.tga b/assets/emoticons/flag_1x1.tga new file mode 100755 index 0000000..12ce63a Binary files /dev/null and b/assets/emoticons/flag_1x1.tga differ diff --git a/assets/emoticons/flags/a_1x1.tga b/assets/emoticons/flags/a_1x1.tga new file mode 100755 index 0000000..8ece210 Binary files /dev/null and b/assets/emoticons/flags/a_1x1.tga differ diff --git a/assets/emoticons/flags/ad_1x1.tga b/assets/emoticons/flags/ad_1x1.tga new file mode 100755 index 0000000..156b077 Binary files /dev/null and b/assets/emoticons/flags/ad_1x1.tga differ diff --git a/assets/emoticons/flags/ae_1x1.tga b/assets/emoticons/flags/ae_1x1.tga new file mode 100755 index 0000000..55db6ac Binary files /dev/null and b/assets/emoticons/flags/ae_1x1.tga differ diff --git a/assets/emoticons/flags/af_1x1.tga b/assets/emoticons/flags/af_1x1.tga new file mode 100755 index 0000000..e51759e Binary files /dev/null and b/assets/emoticons/flags/af_1x1.tga differ diff --git a/assets/emoticons/flags/ai_1x1.tga b/assets/emoticons/flags/ai_1x1.tga new file mode 100755 index 0000000..01656b4 Binary files /dev/null and b/assets/emoticons/flags/ai_1x1.tga differ diff --git a/assets/emoticons/flags/al_1x1.tga b/assets/emoticons/flags/al_1x1.tga new file mode 100755 index 0000000..207696e Binary files /dev/null and b/assets/emoticons/flags/al_1x1.tga differ diff --git a/assets/emoticons/flags/am_1x1.tga b/assets/emoticons/flags/am_1x1.tga new file mode 100755 index 0000000..39073fa Binary files /dev/null and b/assets/emoticons/flags/am_1x1.tga differ diff --git a/assets/emoticons/flags/ao_1x1.tga b/assets/emoticons/flags/ao_1x1.tga new file mode 100755 index 0000000..e812868 Binary files /dev/null and b/assets/emoticons/flags/ao_1x1.tga differ diff --git a/assets/emoticons/flags/ar_1x1.tga b/assets/emoticons/flags/ar_1x1.tga new file mode 100755 index 0000000..b1bffce Binary files /dev/null and b/assets/emoticons/flags/ar_1x1.tga differ diff --git a/assets/emoticons/flags/as_1x1.tga b/assets/emoticons/flags/as_1x1.tga new file mode 100755 index 0000000..ed51e03 Binary files /dev/null and b/assets/emoticons/flags/as_1x1.tga differ diff --git a/assets/emoticons/flags/at_1x1.tga b/assets/emoticons/flags/at_1x1.tga new file mode 100755 index 0000000..830b3b8 Binary files /dev/null and b/assets/emoticons/flags/at_1x1.tga differ diff --git a/assets/emoticons/flags/au_1x1.tga b/assets/emoticons/flags/au_1x1.tga new file mode 100755 index 0000000..51f83b6 Binary files /dev/null and b/assets/emoticons/flags/au_1x1.tga differ diff --git a/assets/emoticons/flags/aw_1x1.tga b/assets/emoticons/flags/aw_1x1.tga new file mode 100755 index 0000000..c5d55a7 Binary files /dev/null and b/assets/emoticons/flags/aw_1x1.tga differ diff --git a/assets/emoticons/flags/ax_1x1.tga b/assets/emoticons/flags/ax_1x1.tga new file mode 100755 index 0000000..8fa7dee Binary files /dev/null and b/assets/emoticons/flags/ax_1x1.tga differ diff --git a/assets/emoticons/flags/az_1x1.tga b/assets/emoticons/flags/az_1x1.tga new file mode 100755 index 0000000..73b76f5 Binary files /dev/null and b/assets/emoticons/flags/az_1x1.tga differ diff --git a/assets/emoticons/flags/b_1x1.tga b/assets/emoticons/flags/b_1x1.tga new file mode 100755 index 0000000..d96fce5 Binary files /dev/null and b/assets/emoticons/flags/b_1x1.tga differ diff --git a/assets/emoticons/flags/ba_1x1.tga b/assets/emoticons/flags/ba_1x1.tga new file mode 100755 index 0000000..eaefa5a Binary files /dev/null and b/assets/emoticons/flags/ba_1x1.tga differ diff --git a/assets/emoticons/flags/bb_1x1.tga b/assets/emoticons/flags/bb_1x1.tga new file mode 100755 index 0000000..5ea117f Binary files /dev/null and b/assets/emoticons/flags/bb_1x1.tga differ diff --git a/assets/emoticons/flags/bd_1x1.tga b/assets/emoticons/flags/bd_1x1.tga new file mode 100755 index 0000000..5746d02 Binary files /dev/null and b/assets/emoticons/flags/bd_1x1.tga differ diff --git a/assets/emoticons/flags/be_1x1.tga b/assets/emoticons/flags/be_1x1.tga new file mode 100755 index 0000000..94e02c3 Binary files /dev/null and b/assets/emoticons/flags/be_1x1.tga differ diff --git a/assets/emoticons/flags/bf_1x1.tga b/assets/emoticons/flags/bf_1x1.tga new file mode 100755 index 0000000..481031d Binary files /dev/null and b/assets/emoticons/flags/bf_1x1.tga differ diff --git a/assets/emoticons/flags/bh_1x1.tga b/assets/emoticons/flags/bh_1x1.tga new file mode 100755 index 0000000..495d456 Binary files /dev/null and b/assets/emoticons/flags/bh_1x1.tga differ diff --git a/assets/emoticons/flags/bi_1x1.tga b/assets/emoticons/flags/bi_1x1.tga new file mode 100755 index 0000000..d5d513d Binary files /dev/null and b/assets/emoticons/flags/bi_1x1.tga differ diff --git a/assets/emoticons/flags/bj_1x1.tga b/assets/emoticons/flags/bj_1x1.tga new file mode 100755 index 0000000..dc86bb0 Binary files /dev/null and b/assets/emoticons/flags/bj_1x1.tga differ diff --git a/assets/emoticons/flags/bm_1x1.tga b/assets/emoticons/flags/bm_1x1.tga new file mode 100755 index 0000000..0f01f81 Binary files /dev/null and b/assets/emoticons/flags/bm_1x1.tga differ diff --git a/assets/emoticons/flags/bo_1x1.tga b/assets/emoticons/flags/bo_1x1.tga new file mode 100755 index 0000000..15cd657 Binary files /dev/null and b/assets/emoticons/flags/bo_1x1.tga differ diff --git a/assets/emoticons/flags/br_1x1.tga b/assets/emoticons/flags/br_1x1.tga new file mode 100755 index 0000000..15e40b1 Binary files /dev/null and b/assets/emoticons/flags/br_1x1.tga differ diff --git a/assets/emoticons/flags/bs_1x1.tga b/assets/emoticons/flags/bs_1x1.tga new file mode 100755 index 0000000..28e1a8b Binary files /dev/null and b/assets/emoticons/flags/bs_1x1.tga differ diff --git a/assets/emoticons/flags/bt_1x1.tga b/assets/emoticons/flags/bt_1x1.tga new file mode 100755 index 0000000..edd75ba Binary files /dev/null and b/assets/emoticons/flags/bt_1x1.tga differ diff --git a/assets/emoticons/flags/bv_1x1.tga b/assets/emoticons/flags/bv_1x1.tga new file mode 100755 index 0000000..2378573 Binary files /dev/null and b/assets/emoticons/flags/bv_1x1.tga differ diff --git a/assets/emoticons/flags/bw_1x1.tga b/assets/emoticons/flags/bw_1x1.tga new file mode 100755 index 0000000..444910d Binary files /dev/null and b/assets/emoticons/flags/bw_1x1.tga differ diff --git a/assets/emoticons/flags/by_1x1.tga b/assets/emoticons/flags/by_1x1.tga new file mode 100755 index 0000000..f5c6c9d Binary files /dev/null and b/assets/emoticons/flags/by_1x1.tga differ diff --git a/assets/emoticons/flags/bz_1x1.tga b/assets/emoticons/flags/bz_1x1.tga new file mode 100755 index 0000000..7b356d6 Binary files /dev/null and b/assets/emoticons/flags/bz_1x1.tga differ diff --git a/assets/emoticons/flags/c_1x1.tga b/assets/emoticons/flags/c_1x1.tga new file mode 100755 index 0000000..a941a88 Binary files /dev/null and b/assets/emoticons/flags/c_1x1.tga differ diff --git a/assets/emoticons/flags/ca_1x1.tga b/assets/emoticons/flags/ca_1x1.tga new file mode 100755 index 0000000..9535a5f Binary files /dev/null and b/assets/emoticons/flags/ca_1x1.tga differ diff --git a/assets/emoticons/flags/catalonia_1x1.tga b/assets/emoticons/flags/catalonia_1x1.tga new file mode 100755 index 0000000..0fdcf31 Binary files /dev/null and b/assets/emoticons/flags/catalonia_1x1.tga differ diff --git a/assets/emoticons/flags/cc_1x1.tga b/assets/emoticons/flags/cc_1x1.tga new file mode 100755 index 0000000..eaf5c31 Binary files /dev/null and b/assets/emoticons/flags/cc_1x1.tga differ diff --git a/assets/emoticons/flags/cd_1x1.tga b/assets/emoticons/flags/cd_1x1.tga new file mode 100755 index 0000000..a529890 Binary files /dev/null and b/assets/emoticons/flags/cd_1x1.tga differ diff --git a/assets/emoticons/flags/cf_1x1.tga b/assets/emoticons/flags/cf_1x1.tga new file mode 100755 index 0000000..6a92939 Binary files /dev/null and b/assets/emoticons/flags/cf_1x1.tga differ diff --git a/assets/emoticons/flags/ch_1x1.tga b/assets/emoticons/flags/ch_1x1.tga new file mode 100755 index 0000000..234b374 Binary files /dev/null and b/assets/emoticons/flags/ch_1x1.tga differ diff --git a/assets/emoticons/flags/ci_1x1.tga b/assets/emoticons/flags/ci_1x1.tga new file mode 100755 index 0000000..1c869cf Binary files /dev/null and b/assets/emoticons/flags/ci_1x1.tga differ diff --git a/assets/emoticons/flags/ck_1x1.tga b/assets/emoticons/flags/ck_1x1.tga new file mode 100755 index 0000000..24bb636 Binary files /dev/null and b/assets/emoticons/flags/ck_1x1.tga differ diff --git a/assets/emoticons/flags/cl_1x1.tga b/assets/emoticons/flags/cl_1x1.tga new file mode 100755 index 0000000..512d454 Binary files /dev/null and b/assets/emoticons/flags/cl_1x1.tga differ diff --git a/assets/emoticons/flags/cm_1x1.tga b/assets/emoticons/flags/cm_1x1.tga new file mode 100755 index 0000000..f1b649b Binary files /dev/null and b/assets/emoticons/flags/cm_1x1.tga differ diff --git a/assets/emoticons/flags/co_1x1.tga b/assets/emoticons/flags/co_1x1.tga new file mode 100755 index 0000000..987833b Binary files /dev/null and b/assets/emoticons/flags/co_1x1.tga differ diff --git a/assets/emoticons/flags/cr_1x1.tga b/assets/emoticons/flags/cr_1x1.tga new file mode 100755 index 0000000..653cbff Binary files /dev/null and b/assets/emoticons/flags/cr_1x1.tga differ diff --git a/assets/emoticons/flags/cs_1x1.tga b/assets/emoticons/flags/cs_1x1.tga new file mode 100755 index 0000000..5da39e5 Binary files /dev/null and b/assets/emoticons/flags/cs_1x1.tga differ diff --git a/assets/emoticons/flags/cu_1x1.tga b/assets/emoticons/flags/cu_1x1.tga new file mode 100755 index 0000000..64b949d Binary files /dev/null and b/assets/emoticons/flags/cu_1x1.tga differ diff --git a/assets/emoticons/flags/cv_1x1.tga b/assets/emoticons/flags/cv_1x1.tga new file mode 100755 index 0000000..f49b6ab Binary files /dev/null and b/assets/emoticons/flags/cv_1x1.tga differ diff --git a/assets/emoticons/flags/cx_1x1.tga b/assets/emoticons/flags/cx_1x1.tga new file mode 100755 index 0000000..535cb85 Binary files /dev/null and b/assets/emoticons/flags/cx_1x1.tga differ diff --git a/assets/emoticons/flags/cy_1x1.tga b/assets/emoticons/flags/cy_1x1.tga new file mode 100755 index 0000000..8155df2 Binary files /dev/null and b/assets/emoticons/flags/cy_1x1.tga differ diff --git a/assets/emoticons/flags/cz_1x1.tga b/assets/emoticons/flags/cz_1x1.tga new file mode 100755 index 0000000..05643d9 Binary files /dev/null and b/assets/emoticons/flags/cz_1x1.tga differ diff --git a/assets/emoticons/flags/de_1x1.tga b/assets/emoticons/flags/de_1x1.tga new file mode 100755 index 0000000..474644f Binary files /dev/null and b/assets/emoticons/flags/de_1x1.tga differ diff --git a/assets/emoticons/flags/dj_1x1.tga b/assets/emoticons/flags/dj_1x1.tga new file mode 100755 index 0000000..1060e81 Binary files /dev/null and b/assets/emoticons/flags/dj_1x1.tga differ diff --git a/assets/emoticons/flags/dk_1x1.tga b/assets/emoticons/flags/dk_1x1.tga new file mode 100755 index 0000000..26c320d Binary files /dev/null and b/assets/emoticons/flags/dk_1x1.tga differ diff --git a/assets/emoticons/flags/dm_1x1.tga b/assets/emoticons/flags/dm_1x1.tga new file mode 100755 index 0000000..ba01a99 Binary files /dev/null and b/assets/emoticons/flags/dm_1x1.tga differ diff --git a/assets/emoticons/flags/do_1x1.tga b/assets/emoticons/flags/do_1x1.tga new file mode 100755 index 0000000..a3ec37b Binary files /dev/null and b/assets/emoticons/flags/do_1x1.tga differ diff --git a/assets/emoticons/flags/dz_1x1.tga b/assets/emoticons/flags/dz_1x1.tga new file mode 100755 index 0000000..a49b2ce Binary files /dev/null and b/assets/emoticons/flags/dz_1x1.tga differ diff --git a/assets/emoticons/flags/e_1x1.tga b/assets/emoticons/flags/e_1x1.tga new file mode 100755 index 0000000..0ba2d36 Binary files /dev/null and b/assets/emoticons/flags/e_1x1.tga differ diff --git a/assets/emoticons/flags/ec_1x1.tga b/assets/emoticons/flags/ec_1x1.tga new file mode 100755 index 0000000..8b23fe4 Binary files /dev/null and b/assets/emoticons/flags/ec_1x1.tga differ diff --git a/assets/emoticons/flags/ee_1x1.tga b/assets/emoticons/flags/ee_1x1.tga new file mode 100755 index 0000000..598d8b7 Binary files /dev/null and b/assets/emoticons/flags/ee_1x1.tga differ diff --git a/assets/emoticons/flags/eh_1x1.tga b/assets/emoticons/flags/eh_1x1.tga new file mode 100755 index 0000000..e8f4ce3 Binary files /dev/null and b/assets/emoticons/flags/eh_1x1.tga differ diff --git a/assets/emoticons/flags/england_1x1.tga b/assets/emoticons/flags/england_1x1.tga new file mode 100755 index 0000000..3bab753 Binary files /dev/null and b/assets/emoticons/flags/england_1x1.tga differ diff --git a/assets/emoticons/flags/er_1x1.tga b/assets/emoticons/flags/er_1x1.tga new file mode 100755 index 0000000..96df9fb Binary files /dev/null and b/assets/emoticons/flags/er_1x1.tga differ diff --git a/assets/emoticons/flags/es_1x1.tga b/assets/emoticons/flags/es_1x1.tga new file mode 100755 index 0000000..0413f05 Binary files /dev/null and b/assets/emoticons/flags/es_1x1.tga differ diff --git a/assets/emoticons/flags/et_1x1.tga b/assets/emoticons/flags/et_1x1.tga new file mode 100755 index 0000000..5b669e5 Binary files /dev/null and b/assets/emoticons/flags/et_1x1.tga differ diff --git a/assets/emoticons/flags/eu_1x1.tga b/assets/emoticons/flags/eu_1x1.tga new file mode 100755 index 0000000..985f6fb Binary files /dev/null and b/assets/emoticons/flags/eu_1x1.tga differ diff --git a/assets/emoticons/flags/fam_1x1.tga b/assets/emoticons/flags/fam_1x1.tga new file mode 100755 index 0000000..17677c8 Binary files /dev/null and b/assets/emoticons/flags/fam_1x1.tga differ diff --git a/assets/emoticons/flags/fi_1x1.tga b/assets/emoticons/flags/fi_1x1.tga new file mode 100755 index 0000000..f469875 Binary files /dev/null and b/assets/emoticons/flags/fi_1x1.tga differ diff --git a/assets/emoticons/flags/fj_1x1.tga b/assets/emoticons/flags/fj_1x1.tga new file mode 100755 index 0000000..0e677e5 Binary files /dev/null and b/assets/emoticons/flags/fj_1x1.tga differ diff --git a/assets/emoticons/flags/fk_1x1.tga b/assets/emoticons/flags/fk_1x1.tga new file mode 100755 index 0000000..f7ae829 Binary files /dev/null and b/assets/emoticons/flags/fk_1x1.tga differ diff --git a/assets/emoticons/flags/fm_1x1.tga b/assets/emoticons/flags/fm_1x1.tga new file mode 100755 index 0000000..0baa37d Binary files /dev/null and b/assets/emoticons/flags/fm_1x1.tga differ diff --git a/assets/emoticons/flags/fo_1x1.tga b/assets/emoticons/flags/fo_1x1.tga new file mode 100755 index 0000000..5097c61 Binary files /dev/null and b/assets/emoticons/flags/fo_1x1.tga differ diff --git a/assets/emoticons/flags/fr_1x1.tga b/assets/emoticons/flags/fr_1x1.tga new file mode 100755 index 0000000..ff0d3bc Binary files /dev/null and b/assets/emoticons/flags/fr_1x1.tga differ diff --git a/assets/emoticons/flags/ga_1x1.tga b/assets/emoticons/flags/ga_1x1.tga new file mode 100755 index 0000000..28325ca Binary files /dev/null and b/assets/emoticons/flags/ga_1x1.tga differ diff --git a/assets/emoticons/flags/gb_1x1.tga b/assets/emoticons/flags/gb_1x1.tga new file mode 100755 index 0000000..9663a1e Binary files /dev/null and b/assets/emoticons/flags/gb_1x1.tga differ diff --git a/assets/emoticons/flags/gd_1x1.tga b/assets/emoticons/flags/gd_1x1.tga new file mode 100755 index 0000000..a993c9f Binary files /dev/null and b/assets/emoticons/flags/gd_1x1.tga differ diff --git a/assets/emoticons/flags/ge_1x1.tga b/assets/emoticons/flags/ge_1x1.tga new file mode 100755 index 0000000..494957a Binary files /dev/null and b/assets/emoticons/flags/ge_1x1.tga differ diff --git a/assets/emoticons/flags/gf_1x1.tga b/assets/emoticons/flags/gf_1x1.tga new file mode 100755 index 0000000..ff0d3bc Binary files /dev/null and b/assets/emoticons/flags/gf_1x1.tga differ diff --git a/assets/emoticons/flags/gh_1x1.tga b/assets/emoticons/flags/gh_1x1.tga new file mode 100755 index 0000000..0cd7d00 Binary files /dev/null and b/assets/emoticons/flags/gh_1x1.tga differ diff --git a/assets/emoticons/flags/gi_1x1.tga b/assets/emoticons/flags/gi_1x1.tga new file mode 100755 index 0000000..e39012b Binary files /dev/null and b/assets/emoticons/flags/gi_1x1.tga differ diff --git a/assets/emoticons/flags/gl_1x1.tga b/assets/emoticons/flags/gl_1x1.tga new file mode 100755 index 0000000..e4b9faa Binary files /dev/null and b/assets/emoticons/flags/gl_1x1.tga differ diff --git a/assets/emoticons/flags/gm_1x1.tga b/assets/emoticons/flags/gm_1x1.tga new file mode 100755 index 0000000..462a176 Binary files /dev/null and b/assets/emoticons/flags/gm_1x1.tga differ diff --git a/assets/emoticons/flags/gq_1x1.tga b/assets/emoticons/flags/gq_1x1.tga new file mode 100755 index 0000000..e15492b Binary files /dev/null and b/assets/emoticons/flags/gq_1x1.tga differ diff --git a/assets/emoticons/flags/gr_1x1.tga b/assets/emoticons/flags/gr_1x1.tga new file mode 100755 index 0000000..2d66632 Binary files /dev/null and b/assets/emoticons/flags/gr_1x1.tga differ diff --git a/assets/emoticons/flags/gs_1x1.tga b/assets/emoticons/flags/gs_1x1.tga new file mode 100755 index 0000000..b760639 Binary files /dev/null and b/assets/emoticons/flags/gs_1x1.tga differ diff --git a/assets/emoticons/flags/gt_1x1.tga b/assets/emoticons/flags/gt_1x1.tga new file mode 100755 index 0000000..d10cf87 Binary files /dev/null and b/assets/emoticons/flags/gt_1x1.tga differ diff --git a/assets/emoticons/flags/gu_1x1.tga b/assets/emoticons/flags/gu_1x1.tga new file mode 100755 index 0000000..e807564 Binary files /dev/null and b/assets/emoticons/flags/gu_1x1.tga differ diff --git a/assets/emoticons/flags/gw_1x1.tga b/assets/emoticons/flags/gw_1x1.tga new file mode 100755 index 0000000..5496f98 Binary files /dev/null and b/assets/emoticons/flags/gw_1x1.tga differ diff --git a/assets/emoticons/flags/gy_1x1.tga b/assets/emoticons/flags/gy_1x1.tga new file mode 100755 index 0000000..5b886c9 Binary files /dev/null and b/assets/emoticons/flags/gy_1x1.tga differ diff --git a/assets/emoticons/flags/h_1x1.tga b/assets/emoticons/flags/h_1x1.tga new file mode 100755 index 0000000..b70af72 Binary files /dev/null and b/assets/emoticons/flags/h_1x1.tga differ diff --git a/assets/emoticons/flags/hk_1x1.tga b/assets/emoticons/flags/hk_1x1.tga new file mode 100755 index 0000000..de786d9 Binary files /dev/null and b/assets/emoticons/flags/hk_1x1.tga differ diff --git a/assets/emoticons/flags/hm_1x1.tga b/assets/emoticons/flags/hm_1x1.tga new file mode 100755 index 0000000..51f83b6 Binary files /dev/null and b/assets/emoticons/flags/hm_1x1.tga differ diff --git a/assets/emoticons/flags/hr_1x1.tga b/assets/emoticons/flags/hr_1x1.tga new file mode 100755 index 0000000..23437a6 Binary files /dev/null and b/assets/emoticons/flags/hr_1x1.tga differ diff --git a/assets/emoticons/flags/ht_1x1.tga b/assets/emoticons/flags/ht_1x1.tga new file mode 100755 index 0000000..ab0fafc Binary files /dev/null and b/assets/emoticons/flags/ht_1x1.tga differ diff --git a/assets/emoticons/flags/hu_1x1.tga b/assets/emoticons/flags/hu_1x1.tga new file mode 100755 index 0000000..5831dcf Binary files /dev/null and b/assets/emoticons/flags/hu_1x1.tga differ diff --git a/assets/emoticons/flags/i_1x1.tga b/assets/emoticons/flags/i_1x1.tga new file mode 100755 index 0000000..5a1ab82 Binary files /dev/null and b/assets/emoticons/flags/i_1x1.tga differ diff --git a/assets/emoticons/flags/id_1x1.tga b/assets/emoticons/flags/id_1x1.tga new file mode 100755 index 0000000..31364b7 Binary files /dev/null and b/assets/emoticons/flags/id_1x1.tga differ diff --git a/assets/emoticons/flags/ie_1x1.tga b/assets/emoticons/flags/ie_1x1.tga new file mode 100755 index 0000000..8ea1cbc Binary files /dev/null and b/assets/emoticons/flags/ie_1x1.tga differ diff --git a/assets/emoticons/flags/il_1x1.tga b/assets/emoticons/flags/il_1x1.tga new file mode 100755 index 0000000..e1a351c Binary files /dev/null and b/assets/emoticons/flags/il_1x1.tga differ diff --git a/assets/emoticons/flags/io_1x1.tga b/assets/emoticons/flags/io_1x1.tga new file mode 100755 index 0000000..757deb8 Binary files /dev/null and b/assets/emoticons/flags/io_1x1.tga differ diff --git a/assets/emoticons/flags/iq_1x1.tga b/assets/emoticons/flags/iq_1x1.tga new file mode 100755 index 0000000..14c798b Binary files /dev/null and b/assets/emoticons/flags/iq_1x1.tga differ diff --git a/assets/emoticons/flags/ir_1x1.tga b/assets/emoticons/flags/ir_1x1.tga new file mode 100755 index 0000000..49e13aa Binary files /dev/null and b/assets/emoticons/flags/ir_1x1.tga differ diff --git a/assets/emoticons/flags/is_1x1.tga b/assets/emoticons/flags/is_1x1.tga new file mode 100755 index 0000000..12bd1f4 Binary files /dev/null and b/assets/emoticons/flags/is_1x1.tga differ diff --git a/assets/emoticons/flags/it_1x1.tga b/assets/emoticons/flags/it_1x1.tga new file mode 100755 index 0000000..0832a61 Binary files /dev/null and b/assets/emoticons/flags/it_1x1.tga differ diff --git a/assets/emoticons/flags/j_1x1.tga b/assets/emoticons/flags/j_1x1.tga new file mode 100755 index 0000000..321e2f7 Binary files /dev/null and b/assets/emoticons/flags/j_1x1.tga differ diff --git a/assets/emoticons/flags/jm_1x1.tga b/assets/emoticons/flags/jm_1x1.tga new file mode 100755 index 0000000..7cf9e61 Binary files /dev/null and b/assets/emoticons/flags/jm_1x1.tga differ diff --git a/assets/emoticons/flags/jo_1x1.tga b/assets/emoticons/flags/jo_1x1.tga new file mode 100755 index 0000000..2a043bf Binary files /dev/null and b/assets/emoticons/flags/jo_1x1.tga differ diff --git a/assets/emoticons/flags/k_1x1.tga b/assets/emoticons/flags/k_1x1.tga new file mode 100755 index 0000000..f9baa24 Binary files /dev/null and b/assets/emoticons/flags/k_1x1.tga differ diff --git a/assets/emoticons/flags/ke_1x1.tga b/assets/emoticons/flags/ke_1x1.tga new file mode 100755 index 0000000..78aa2de Binary files /dev/null and b/assets/emoticons/flags/ke_1x1.tga differ diff --git a/assets/emoticons/flags/kh_1x1.tga b/assets/emoticons/flags/kh_1x1.tga new file mode 100755 index 0000000..850bdcf Binary files /dev/null and b/assets/emoticons/flags/kh_1x1.tga differ diff --git a/assets/emoticons/flags/ki_1x1.tga b/assets/emoticons/flags/ki_1x1.tga new file mode 100755 index 0000000..7d5698b Binary files /dev/null and b/assets/emoticons/flags/ki_1x1.tga differ diff --git a/assets/emoticons/flags/km_1x1.tga b/assets/emoticons/flags/km_1x1.tga new file mode 100755 index 0000000..a0575e9 Binary files /dev/null and b/assets/emoticons/flags/km_1x1.tga differ diff --git a/assets/emoticons/flags/kr_1x1.tga b/assets/emoticons/flags/kr_1x1.tga new file mode 100755 index 0000000..db2243e Binary files /dev/null and b/assets/emoticons/flags/kr_1x1.tga differ diff --git a/assets/emoticons/flags/kw_1x1.tga b/assets/emoticons/flags/kw_1x1.tga new file mode 100755 index 0000000..f868c70 Binary files /dev/null and b/assets/emoticons/flags/kw_1x1.tga differ diff --git a/assets/emoticons/flags/ky_1x1.tga b/assets/emoticons/flags/ky_1x1.tga new file mode 100755 index 0000000..dfdbf0d Binary files /dev/null and b/assets/emoticons/flags/ky_1x1.tga differ diff --git a/assets/emoticons/flags/kz_1x1.tga b/assets/emoticons/flags/kz_1x1.tga new file mode 100755 index 0000000..ef7af52 Binary files /dev/null and b/assets/emoticons/flags/kz_1x1.tga differ diff --git a/assets/emoticons/flags/la_1x1.tga b/assets/emoticons/flags/la_1x1.tga new file mode 100755 index 0000000..9951bf0 Binary files /dev/null and b/assets/emoticons/flags/la_1x1.tga differ diff --git a/assets/emoticons/flags/lb_1x1.tga b/assets/emoticons/flags/lb_1x1.tga new file mode 100755 index 0000000..2aa4d3d Binary files /dev/null and b/assets/emoticons/flags/lb_1x1.tga differ diff --git a/assets/emoticons/flags/lc_1x1.tga b/assets/emoticons/flags/lc_1x1.tga new file mode 100755 index 0000000..c0b6f22 Binary files /dev/null and b/assets/emoticons/flags/lc_1x1.tga differ diff --git a/assets/emoticons/flags/li_1x1.tga b/assets/emoticons/flags/li_1x1.tga new file mode 100755 index 0000000..1407b5b Binary files /dev/null and b/assets/emoticons/flags/li_1x1.tga differ diff --git a/assets/emoticons/flags/lk_1x1.tga b/assets/emoticons/flags/lk_1x1.tga new file mode 100755 index 0000000..c10a58c Binary files /dev/null and b/assets/emoticons/flags/lk_1x1.tga differ diff --git a/assets/emoticons/flags/lr_1x1.tga b/assets/emoticons/flags/lr_1x1.tga new file mode 100755 index 0000000..4019ebd Binary files /dev/null and b/assets/emoticons/flags/lr_1x1.tga differ diff --git a/assets/emoticons/flags/ls_1x1.tga b/assets/emoticons/flags/ls_1x1.tga new file mode 100755 index 0000000..d879f8a Binary files /dev/null and b/assets/emoticons/flags/ls_1x1.tga differ diff --git a/assets/emoticons/flags/lt_1x1.tga b/assets/emoticons/flags/lt_1x1.tga new file mode 100755 index 0000000..db67333 Binary files /dev/null and b/assets/emoticons/flags/lt_1x1.tga differ diff --git a/assets/emoticons/flags/lu_1x1.tga b/assets/emoticons/flags/lu_1x1.tga new file mode 100755 index 0000000..adecf15 Binary files /dev/null and b/assets/emoticons/flags/lu_1x1.tga differ diff --git a/assets/emoticons/flags/lv_1x1.tga b/assets/emoticons/flags/lv_1x1.tga new file mode 100755 index 0000000..7d9900a Binary files /dev/null and b/assets/emoticons/flags/lv_1x1.tga differ diff --git a/assets/emoticons/flags/ly_1x1.tga b/assets/emoticons/flags/ly_1x1.tga new file mode 100755 index 0000000..521b926 Binary files /dev/null and b/assets/emoticons/flags/ly_1x1.tga differ diff --git a/assets/emoticons/flags/m_1x1.tga b/assets/emoticons/flags/m_1x1.tga new file mode 100755 index 0000000..fe9e599 Binary files /dev/null and b/assets/emoticons/flags/m_1x1.tga differ diff --git a/assets/emoticons/flags/ma_1x1.tga b/assets/emoticons/flags/ma_1x1.tga new file mode 100755 index 0000000..8b48285 Binary files /dev/null and b/assets/emoticons/flags/ma_1x1.tga differ diff --git a/assets/emoticons/flags/mc_1x1.tga b/assets/emoticons/flags/mc_1x1.tga new file mode 100755 index 0000000..36e2729 Binary files /dev/null and b/assets/emoticons/flags/mc_1x1.tga differ diff --git a/assets/emoticons/flags/md_1x1.tga b/assets/emoticons/flags/md_1x1.tga new file mode 100755 index 0000000..9825a61 Binary files /dev/null and b/assets/emoticons/flags/md_1x1.tga differ diff --git a/assets/emoticons/flags/me_1x1.tga b/assets/emoticons/flags/me_1x1.tga new file mode 100755 index 0000000..52f49fd Binary files /dev/null and b/assets/emoticons/flags/me_1x1.tga differ diff --git a/assets/emoticons/flags/mh_1x1.tga b/assets/emoticons/flags/mh_1x1.tga new file mode 100755 index 0000000..38e4a12 Binary files /dev/null and b/assets/emoticons/flags/mh_1x1.tga differ diff --git a/assets/emoticons/flags/mk_1x1.tga b/assets/emoticons/flags/mk_1x1.tga new file mode 100755 index 0000000..a8c5f28 Binary files /dev/null and b/assets/emoticons/flags/mk_1x1.tga differ diff --git a/assets/emoticons/flags/ml_1x1.tga b/assets/emoticons/flags/ml_1x1.tga new file mode 100755 index 0000000..71505f6 Binary files /dev/null and b/assets/emoticons/flags/ml_1x1.tga differ diff --git a/assets/emoticons/flags/mm_1x1.tga b/assets/emoticons/flags/mm_1x1.tga new file mode 100755 index 0000000..312d6c9 Binary files /dev/null and b/assets/emoticons/flags/mm_1x1.tga differ diff --git a/assets/emoticons/flags/mo_1x1.tga b/assets/emoticons/flags/mo_1x1.tga new file mode 100755 index 0000000..1543c4a Binary files /dev/null and b/assets/emoticons/flags/mo_1x1.tga differ diff --git a/assets/emoticons/flags/mq_1x1.tga b/assets/emoticons/flags/mq_1x1.tga new file mode 100755 index 0000000..5045f9d Binary files /dev/null and b/assets/emoticons/flags/mq_1x1.tga differ diff --git a/assets/emoticons/flags/mr_1x1.tga b/assets/emoticons/flags/mr_1x1.tga new file mode 100755 index 0000000..6c45792 Binary files /dev/null and b/assets/emoticons/flags/mr_1x1.tga differ diff --git a/assets/emoticons/flags/ms_1x1.tga b/assets/emoticons/flags/ms_1x1.tga new file mode 100755 index 0000000..af1de99 Binary files /dev/null and b/assets/emoticons/flags/ms_1x1.tga differ diff --git a/assets/emoticons/flags/mt_1x1.tga b/assets/emoticons/flags/mt_1x1.tga new file mode 100755 index 0000000..8b269e2 Binary files /dev/null and b/assets/emoticons/flags/mt_1x1.tga differ diff --git a/assets/emoticons/flags/mu_1x1.tga b/assets/emoticons/flags/mu_1x1.tga new file mode 100755 index 0000000..893b763 Binary files /dev/null and b/assets/emoticons/flags/mu_1x1.tga differ diff --git a/assets/emoticons/flags/mv_1x1.tga b/assets/emoticons/flags/mv_1x1.tga new file mode 100755 index 0000000..7d0ec43 Binary files /dev/null and b/assets/emoticons/flags/mv_1x1.tga differ diff --git a/assets/emoticons/flags/mw_1x1.tga b/assets/emoticons/flags/mw_1x1.tga new file mode 100755 index 0000000..4401f93 Binary files /dev/null and b/assets/emoticons/flags/mw_1x1.tga differ diff --git a/assets/emoticons/flags/mx_1x1.tga b/assets/emoticons/flags/mx_1x1.tga new file mode 100755 index 0000000..781825a Binary files /dev/null and b/assets/emoticons/flags/mx_1x1.tga differ diff --git a/assets/emoticons/flags/my_1x1.tga b/assets/emoticons/flags/my_1x1.tga new file mode 100755 index 0000000..3b4e42e Binary files /dev/null and b/assets/emoticons/flags/my_1x1.tga differ diff --git a/assets/emoticons/flags/mz_1x1.tga b/assets/emoticons/flags/mz_1x1.tga new file mode 100755 index 0000000..9b5e52e Binary files /dev/null and b/assets/emoticons/flags/mz_1x1.tga differ diff --git a/assets/emoticons/flags/na_1x1.tga b/assets/emoticons/flags/na_1x1.tga new file mode 100755 index 0000000..0b7410f Binary files /dev/null and b/assets/emoticons/flags/na_1x1.tga differ diff --git a/assets/emoticons/flags/nc_1x1.tga b/assets/emoticons/flags/nc_1x1.tga new file mode 100755 index 0000000..1f0f716 Binary files /dev/null and b/assets/emoticons/flags/nc_1x1.tga differ diff --git a/assets/emoticons/flags/ne_1x1.tga b/assets/emoticons/flags/ne_1x1.tga new file mode 100755 index 0000000..76bc2e7 Binary files /dev/null and b/assets/emoticons/flags/ne_1x1.tga differ diff --git a/assets/emoticons/flags/nf_1x1.tga b/assets/emoticons/flags/nf_1x1.tga new file mode 100755 index 0000000..b21cee3 Binary files /dev/null and b/assets/emoticons/flags/nf_1x1.tga differ diff --git a/assets/emoticons/flags/ni_1x1.tga b/assets/emoticons/flags/ni_1x1.tga new file mode 100755 index 0000000..fc40b65 Binary files /dev/null and b/assets/emoticons/flags/ni_1x1.tga differ diff --git a/assets/emoticons/flags/nl_1x1.tga b/assets/emoticons/flags/nl_1x1.tga new file mode 100755 index 0000000..36babd1 Binary files /dev/null and b/assets/emoticons/flags/nl_1x1.tga differ diff --git a/assets/emoticons/flags/no_1x1.tga b/assets/emoticons/flags/no_1x1.tga new file mode 100755 index 0000000..2378573 Binary files /dev/null and b/assets/emoticons/flags/no_1x1.tga differ diff --git a/assets/emoticons/flags/nr_1x1.tga b/assets/emoticons/flags/nr_1x1.tga new file mode 100755 index 0000000..0351687 Binary files /dev/null and b/assets/emoticons/flags/nr_1x1.tga differ diff --git a/assets/emoticons/flags/nu_1x1.tga b/assets/emoticons/flags/nu_1x1.tga new file mode 100755 index 0000000..281bbf8 Binary files /dev/null and b/assets/emoticons/flags/nu_1x1.tga differ diff --git a/assets/emoticons/flags/nz_1x1.tga b/assets/emoticons/flags/nz_1x1.tga new file mode 100755 index 0000000..3fa8137 Binary files /dev/null and b/assets/emoticons/flags/nz_1x1.tga differ diff --git a/assets/emoticons/flags/om_1x1.tga b/assets/emoticons/flags/om_1x1.tga new file mode 100755 index 0000000..349050b Binary files /dev/null and b/assets/emoticons/flags/om_1x1.tga differ diff --git a/assets/emoticons/flags/pa_1x1.tga b/assets/emoticons/flags/pa_1x1.tga new file mode 100755 index 0000000..66c8ff3 Binary files /dev/null and b/assets/emoticons/flags/pa_1x1.tga differ diff --git a/assets/emoticons/flags/pe_1x1.tga b/assets/emoticons/flags/pe_1x1.tga new file mode 100755 index 0000000..c22ed26 Binary files /dev/null and b/assets/emoticons/flags/pe_1x1.tga differ diff --git a/assets/emoticons/flags/pf_1x1.tga b/assets/emoticons/flags/pf_1x1.tga new file mode 100755 index 0000000..407dac3 Binary files /dev/null and b/assets/emoticons/flags/pf_1x1.tga differ diff --git a/assets/emoticons/flags/ph_1x1.tga b/assets/emoticons/flags/ph_1x1.tga new file mode 100755 index 0000000..a461e19 Binary files /dev/null and b/assets/emoticons/flags/ph_1x1.tga differ diff --git a/assets/emoticons/flags/pk_1x1.tga b/assets/emoticons/flags/pk_1x1.tga new file mode 100755 index 0000000..40907f7 Binary files /dev/null and b/assets/emoticons/flags/pk_1x1.tga differ diff --git a/assets/emoticons/flags/pl_1x1.tga b/assets/emoticons/flags/pl_1x1.tga new file mode 100755 index 0000000..5527333 Binary files /dev/null and b/assets/emoticons/flags/pl_1x1.tga differ diff --git a/assets/emoticons/flags/pm_1x1.tga b/assets/emoticons/flags/pm_1x1.tga new file mode 100755 index 0000000..18ab2ef Binary files /dev/null and b/assets/emoticons/flags/pm_1x1.tga differ diff --git a/assets/emoticons/flags/pr_1x1.tga b/assets/emoticons/flags/pr_1x1.tga new file mode 100755 index 0000000..7f705bd Binary files /dev/null and b/assets/emoticons/flags/pr_1x1.tga differ diff --git a/assets/emoticons/flags/ps_1x1.tga b/assets/emoticons/flags/ps_1x1.tga new file mode 100755 index 0000000..61c4782 Binary files /dev/null and b/assets/emoticons/flags/ps_1x1.tga differ diff --git a/assets/emoticons/flags/pt_1x1.tga b/assets/emoticons/flags/pt_1x1.tga new file mode 100755 index 0000000..4ad9f3b Binary files /dev/null and b/assets/emoticons/flags/pt_1x1.tga differ diff --git a/assets/emoticons/flags/pw_1x1.tga b/assets/emoticons/flags/pw_1x1.tga new file mode 100755 index 0000000..0662b76 Binary files /dev/null and b/assets/emoticons/flags/pw_1x1.tga differ diff --git a/assets/emoticons/flags/py_1x1.tga b/assets/emoticons/flags/py_1x1.tga new file mode 100755 index 0000000..930a24a Binary files /dev/null and b/assets/emoticons/flags/py_1x1.tga differ diff --git a/assets/emoticons/flags/qa_1x1.tga b/assets/emoticons/flags/qa_1x1.tga new file mode 100755 index 0000000..8e2dbdc Binary files /dev/null and b/assets/emoticons/flags/qa_1x1.tga differ diff --git a/assets/emoticons/flags/re_1x1.tga b/assets/emoticons/flags/re_1x1.tga new file mode 100755 index 0000000..ff0d3bc Binary files /dev/null and b/assets/emoticons/flags/re_1x1.tga differ diff --git a/assets/emoticons/flags/ro_1x1.tga b/assets/emoticons/flags/ro_1x1.tga new file mode 100755 index 0000000..c94bb9a Binary files /dev/null and b/assets/emoticons/flags/ro_1x1.tga differ diff --git a/assets/emoticons/flags/rs_1x1.tga b/assets/emoticons/flags/rs_1x1.tga new file mode 100755 index 0000000..a8c5300 Binary files /dev/null and b/assets/emoticons/flags/rs_1x1.tga differ diff --git a/assets/emoticons/flags/ru_1x1.tga b/assets/emoticons/flags/ru_1x1.tga new file mode 100755 index 0000000..cd3cf43 Binary files /dev/null and b/assets/emoticons/flags/ru_1x1.tga differ diff --git a/assets/emoticons/flags/rw_1x1.tga b/assets/emoticons/flags/rw_1x1.tga new file mode 100755 index 0000000..ddbea5c Binary files /dev/null and b/assets/emoticons/flags/rw_1x1.tga differ diff --git a/assets/emoticons/flags/s_1x1.tga b/assets/emoticons/flags/s_1x1.tga new file mode 100755 index 0000000..2554b87 Binary files /dev/null and b/assets/emoticons/flags/s_1x1.tga differ diff --git a/assets/emoticons/flags/sa_1x1.tga b/assets/emoticons/flags/sa_1x1.tga new file mode 100755 index 0000000..ad23c2a Binary files /dev/null and b/assets/emoticons/flags/sa_1x1.tga differ diff --git a/assets/emoticons/flags/sb_1x1.tga b/assets/emoticons/flags/sb_1x1.tga new file mode 100755 index 0000000..aa33d33 Binary files /dev/null and b/assets/emoticons/flags/sb_1x1.tga differ diff --git a/assets/emoticons/flags/sc_1x1.tga b/assets/emoticons/flags/sc_1x1.tga new file mode 100755 index 0000000..febe870 Binary files /dev/null and b/assets/emoticons/flags/sc_1x1.tga differ diff --git a/assets/emoticons/flags/scld_1x1.tga b/assets/emoticons/flags/scld_1x1.tga new file mode 100755 index 0000000..b83909d Binary files /dev/null and b/assets/emoticons/flags/scld_1x1.tga differ diff --git a/assets/emoticons/flags/sd_1x1.tga b/assets/emoticons/flags/sd_1x1.tga new file mode 100755 index 0000000..6368e24 Binary files /dev/null and b/assets/emoticons/flags/sd_1x1.tga differ diff --git a/assets/emoticons/flags/se_1x1.tga b/assets/emoticons/flags/se_1x1.tga new file mode 100755 index 0000000..7861315 Binary files /dev/null and b/assets/emoticons/flags/se_1x1.tga differ diff --git a/assets/emoticons/flags/sh_1x1.tga b/assets/emoticons/flags/sh_1x1.tga new file mode 100755 index 0000000..4ea2fe3 Binary files /dev/null and b/assets/emoticons/flags/sh_1x1.tga differ diff --git a/assets/emoticons/flags/si_1x1.tga b/assets/emoticons/flags/si_1x1.tga new file mode 100755 index 0000000..5fe9ae6 Binary files /dev/null and b/assets/emoticons/flags/si_1x1.tga differ diff --git a/assets/emoticons/flags/sj_1x1.tga b/assets/emoticons/flags/sj_1x1.tga new file mode 100755 index 0000000..2378573 Binary files /dev/null and b/assets/emoticons/flags/sj_1x1.tga differ diff --git a/assets/emoticons/flags/sk_1x1.tga b/assets/emoticons/flags/sk_1x1.tga new file mode 100755 index 0000000..de12faa Binary files /dev/null and b/assets/emoticons/flags/sk_1x1.tga differ diff --git a/assets/emoticons/flags/sl_1x1.tga b/assets/emoticons/flags/sl_1x1.tga new file mode 100755 index 0000000..154d7c4 Binary files /dev/null and b/assets/emoticons/flags/sl_1x1.tga differ diff --git a/assets/emoticons/flags/sm_1x1.tga b/assets/emoticons/flags/sm_1x1.tga new file mode 100755 index 0000000..8af13cc Binary files /dev/null and b/assets/emoticons/flags/sm_1x1.tga differ diff --git a/assets/emoticons/flags/so_1x1.tga b/assets/emoticons/flags/so_1x1.tga new file mode 100755 index 0000000..e4cd2f3 Binary files /dev/null and b/assets/emoticons/flags/so_1x1.tga differ diff --git a/assets/emoticons/flags/sr_1x1.tga b/assets/emoticons/flags/sr_1x1.tga new file mode 100755 index 0000000..14da601 Binary files /dev/null and b/assets/emoticons/flags/sr_1x1.tga differ diff --git a/assets/emoticons/flags/st_1x1.tga b/assets/emoticons/flags/st_1x1.tga new file mode 100755 index 0000000..8816cad Binary files /dev/null and b/assets/emoticons/flags/st_1x1.tga differ diff --git a/assets/emoticons/flags/sv_1x1.tga b/assets/emoticons/flags/sv_1x1.tga new file mode 100755 index 0000000..5697670 Binary files /dev/null and b/assets/emoticons/flags/sv_1x1.tga differ diff --git a/assets/emoticons/flags/sy_1x1.tga b/assets/emoticons/flags/sy_1x1.tga new file mode 100755 index 0000000..35aa72a Binary files /dev/null and b/assets/emoticons/flags/sy_1x1.tga differ diff --git a/assets/emoticons/flags/sz_1x1.tga b/assets/emoticons/flags/sz_1x1.tga new file mode 100755 index 0000000..d53f15c Binary files /dev/null and b/assets/emoticons/flags/sz_1x1.tga differ diff --git a/assets/emoticons/flags/t_1x1.tga b/assets/emoticons/flags/t_1x1.tga new file mode 100755 index 0000000..5b316d7 Binary files /dev/null and b/assets/emoticons/flags/t_1x1.tga differ diff --git a/assets/emoticons/flags/tc_1x1.tga b/assets/emoticons/flags/tc_1x1.tga new file mode 100755 index 0000000..cfbd09e Binary files /dev/null and b/assets/emoticons/flags/tc_1x1.tga differ diff --git a/assets/emoticons/flags/td_1x1.tga b/assets/emoticons/flags/td_1x1.tga new file mode 100755 index 0000000..3bef15a Binary files /dev/null and b/assets/emoticons/flags/td_1x1.tga differ diff --git a/assets/emoticons/flags/tf_1x1.tga b/assets/emoticons/flags/tf_1x1.tga new file mode 100755 index 0000000..a1ec51a Binary files /dev/null and b/assets/emoticons/flags/tf_1x1.tga differ diff --git a/assets/emoticons/flags/th_1x1.tga b/assets/emoticons/flags/th_1x1.tga new file mode 100755 index 0000000..78178fd Binary files /dev/null and b/assets/emoticons/flags/th_1x1.tga differ diff --git a/assets/emoticons/flags/tj_1x1.tga b/assets/emoticons/flags/tj_1x1.tga new file mode 100755 index 0000000..749f1e5 Binary files /dev/null and b/assets/emoticons/flags/tj_1x1.tga differ diff --git a/assets/emoticons/flags/tk_1x1.tga b/assets/emoticons/flags/tk_1x1.tga new file mode 100755 index 0000000..9300598 Binary files /dev/null and b/assets/emoticons/flags/tk_1x1.tga differ diff --git a/assets/emoticons/flags/tl_1x1.tga b/assets/emoticons/flags/tl_1x1.tga new file mode 100755 index 0000000..a4ec981 Binary files /dev/null and b/assets/emoticons/flags/tl_1x1.tga differ diff --git a/assets/emoticons/flags/tm_1x1.tga b/assets/emoticons/flags/tm_1x1.tga new file mode 100755 index 0000000..661692c Binary files /dev/null and b/assets/emoticons/flags/tm_1x1.tga differ diff --git a/assets/emoticons/flags/to_1x1.tga b/assets/emoticons/flags/to_1x1.tga new file mode 100755 index 0000000..6b8db62 Binary files /dev/null and b/assets/emoticons/flags/to_1x1.tga differ diff --git a/assets/emoticons/flags/tr_1x1.tga b/assets/emoticons/flags/tr_1x1.tga new file mode 100755 index 0000000..17d0198 Binary files /dev/null and b/assets/emoticons/flags/tr_1x1.tga differ diff --git a/assets/emoticons/flags/tt_1x1.tga b/assets/emoticons/flags/tt_1x1.tga new file mode 100755 index 0000000..12536ae Binary files /dev/null and b/assets/emoticons/flags/tt_1x1.tga differ diff --git a/assets/emoticons/flags/tv_1x1.tga b/assets/emoticons/flags/tv_1x1.tga new file mode 100755 index 0000000..9873fc2 Binary files /dev/null and b/assets/emoticons/flags/tv_1x1.tga differ diff --git a/assets/emoticons/flags/tw_1x1.tga b/assets/emoticons/flags/tw_1x1.tga new file mode 100755 index 0000000..f1a457f Binary files /dev/null and b/assets/emoticons/flags/tw_1x1.tga differ diff --git a/assets/emoticons/flags/tz_1x1.tga b/assets/emoticons/flags/tz_1x1.tga new file mode 100755 index 0000000..f1392d5 Binary files /dev/null and b/assets/emoticons/flags/tz_1x1.tga differ diff --git a/assets/emoticons/flags/u_1x1.tga b/assets/emoticons/flags/u_1x1.tga new file mode 100755 index 0000000..9617e3a Binary files /dev/null and b/assets/emoticons/flags/u_1x1.tga differ diff --git a/assets/emoticons/flags/ua_1x1.tga b/assets/emoticons/flags/ua_1x1.tga new file mode 100755 index 0000000..46f2c82 Binary files /dev/null and b/assets/emoticons/flags/ua_1x1.tga differ diff --git a/assets/emoticons/flags/um_1x1.tga b/assets/emoticons/flags/um_1x1.tga new file mode 100755 index 0000000..0621922 Binary files /dev/null and b/assets/emoticons/flags/um_1x1.tga differ diff --git a/assets/emoticons/flags/us_1x1.tga b/assets/emoticons/flags/us_1x1.tga new file mode 100755 index 0000000..a58a136 Binary files /dev/null and b/assets/emoticons/flags/us_1x1.tga differ diff --git a/assets/emoticons/flags/uy_1x1.tga b/assets/emoticons/flags/uy_1x1.tga new file mode 100755 index 0000000..9ffa468 Binary files /dev/null and b/assets/emoticons/flags/uy_1x1.tga differ diff --git a/assets/emoticons/flags/uz_1x1.tga b/assets/emoticons/flags/uz_1x1.tga new file mode 100755 index 0000000..03a14fe Binary files /dev/null and b/assets/emoticons/flags/uz_1x1.tga differ diff --git a/assets/emoticons/flags/v_1x1.tga b/assets/emoticons/flags/v_1x1.tga new file mode 100755 index 0000000..7fd1af1 Binary files /dev/null and b/assets/emoticons/flags/v_1x1.tga differ diff --git a/assets/emoticons/flags/va_1x1.tga b/assets/emoticons/flags/va_1x1.tga new file mode 100755 index 0000000..fd4fcdc Binary files /dev/null and b/assets/emoticons/flags/va_1x1.tga differ diff --git a/assets/emoticons/flags/vc_1x1.tga b/assets/emoticons/flags/vc_1x1.tga new file mode 100755 index 0000000..cbffdfb Binary files /dev/null and b/assets/emoticons/flags/vc_1x1.tga differ diff --git a/assets/emoticons/flags/ve_1x1.tga b/assets/emoticons/flags/ve_1x1.tga new file mode 100755 index 0000000..39016b8 Binary files /dev/null and b/assets/emoticons/flags/ve_1x1.tga differ diff --git a/assets/emoticons/flags/vi_1x1.tga b/assets/emoticons/flags/vi_1x1.tga new file mode 100755 index 0000000..b8efa28 Binary files /dev/null and b/assets/emoticons/flags/vi_1x1.tga differ diff --git a/assets/emoticons/flags/vu_1x1.tga b/assets/emoticons/flags/vu_1x1.tga new file mode 100755 index 0000000..e56646a Binary files /dev/null and b/assets/emoticons/flags/vu_1x1.tga differ diff --git a/assets/emoticons/flags/wa_1x1.tga b/assets/emoticons/flags/wa_1x1.tga new file mode 100755 index 0000000..a9cfb5b Binary files /dev/null and b/assets/emoticons/flags/wa_1x1.tga differ diff --git a/assets/emoticons/flags/wf_1x1.tga b/assets/emoticons/flags/wf_1x1.tga new file mode 100755 index 0000000..928b452 Binary files /dev/null and b/assets/emoticons/flags/wf_1x1.tga differ diff --git a/assets/emoticons/flags/ws_1x1.tga b/assets/emoticons/flags/ws_1x1.tga new file mode 100755 index 0000000..b850a78 Binary files /dev/null and b/assets/emoticons/flags/ws_1x1.tga differ diff --git a/assets/emoticons/flags/ye_1x1.tga b/assets/emoticons/flags/ye_1x1.tga new file mode 100755 index 0000000..8220d34 Binary files /dev/null and b/assets/emoticons/flags/ye_1x1.tga differ diff --git a/assets/emoticons/flags/yt_1x1.tga b/assets/emoticons/flags/yt_1x1.tga new file mode 100755 index 0000000..b876271 Binary files /dev/null and b/assets/emoticons/flags/yt_1x1.tga differ diff --git a/assets/emoticons/flags/za_1x1.tga b/assets/emoticons/flags/za_1x1.tga new file mode 100755 index 0000000..a83c81e Binary files /dev/null and b/assets/emoticons/flags/za_1x1.tga differ diff --git a/assets/emoticons/flags/zm_1x1.tga b/assets/emoticons/flags/zm_1x1.tga new file mode 100755 index 0000000..ae941da Binary files /dev/null and b/assets/emoticons/flags/zm_1x1.tga differ diff --git a/assets/emoticons/flags/zw_1x1.tga b/assets/emoticons/flags/zw_1x1.tga new file mode 100755 index 0000000..510a4b1 Binary files /dev/null and b/assets/emoticons/flags/zw_1x1.tga differ diff --git a/assets/emoticons/flamer_2x1.tga b/assets/emoticons/flamer_2x1.tga new file mode 100755 index 0000000..767a3c0 Binary files /dev/null and b/assets/emoticons/flamer_2x1.tga 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 Binary files /dev/null and b/assets/emoticons/foot-in-mouth_1x1.tga differ diff --git a/assets/emoticons/forcefield_1x1.tga b/assets/emoticons/forcefield_1x1.tga new file mode 100755 index 0000000..4dc74ac Binary files /dev/null and b/assets/emoticons/forcefield_1x1.tga differ diff --git a/assets/emoticons/freaked-out_1x1.tga b/assets/emoticons/freaked-out_1x1.tga new file mode 100755 index 0000000..553b172 Binary files /dev/null and b/assets/emoticons/freaked-out_1x1.tga differ diff --git a/assets/emoticons/fry_1x1.tga b/assets/emoticons/fry_1x1.tga new file mode 100644 index 0000000..cdc30de Binary files /dev/null and b/assets/emoticons/fry_1x1.tga differ diff --git a/assets/emoticons/ftrapper_1x1.tga b/assets/emoticons/ftrapper_1x1.tga new file mode 100755 index 0000000..bb548f7 Binary files /dev/null and b/assets/emoticons/ftrapper_1x1.tga differ diff --git a/assets/emoticons/ghost_1x1.tga b/assets/emoticons/ghost_1x1.tga new file mode 100755 index 0000000..3f17a2c Binary files /dev/null and b/assets/emoticons/ghost_1x1.tga differ diff --git a/assets/emoticons/giggle_1x1.tga b/assets/emoticons/giggle_1x1.tga new file mode 100755 index 0000000..f361dca Binary files /dev/null and b/assets/emoticons/giggle_1x1.tga differ diff --git a/assets/emoticons/girl_1x1.tga b/assets/emoticons/girl_1x1.tga new file mode 100755 index 0000000..bdb3abd Binary files /dev/null and b/assets/emoticons/girl_1x1.tga differ diff --git a/assets/emoticons/glameow_1x1.tga b/assets/emoticons/glameow_1x1.tga new file mode 100644 index 0000000..d059e68 Binary files /dev/null and b/assets/emoticons/glameow_1x1.tga differ diff --git a/assets/emoticons/glasses-cool_1x1.tga b/assets/emoticons/glasses-cool_1x1.tga new file mode 100755 index 0000000..89effdd Binary files /dev/null and b/assets/emoticons/glasses-cool_1x1.tga differ diff --git a/assets/emoticons/glasses-nerdy_1x1.tga b/assets/emoticons/glasses-nerdy_1x1.tga new file mode 100755 index 0000000..ba2c318 Binary files /dev/null and b/assets/emoticons/glasses-nerdy_1x1.tga differ diff --git a/assets/emoticons/gleaf_1x1.tga b/assets/emoticons/gleaf_1x1.tga new file mode 100755 index 0000000..8141749 Binary files /dev/null and b/assets/emoticons/gleaf_1x1.tga differ diff --git a/assets/emoticons/go-away_1x1.tga b/assets/emoticons/go-away_1x1.tga new file mode 100755 index 0000000..02dc06a Binary files /dev/null and b/assets/emoticons/go-away_1x1.tga differ diff --git a/assets/emoticons/goat_1x1.tga b/assets/emoticons/goat_1x1.tga new file mode 100755 index 0000000..78a486f Binary files /dev/null and b/assets/emoticons/goat_1x1.tga differ diff --git a/assets/emoticons/goldgunl_2x1.tga b/assets/emoticons/goldgunl_2x1.tga new file mode 100644 index 0000000..2cd064c Binary files /dev/null and b/assets/emoticons/goldgunl_2x1.tga differ diff --git a/assets/emoticons/goldgunr_2x1.tga b/assets/emoticons/goldgunr_2x1.tga new file mode 100644 index 0000000..044d4e6 Binary files /dev/null and b/assets/emoticons/goldgunr_2x1.tga differ diff --git a/assets/emoticons/good_1x1.tga b/assets/emoticons/good_1x1.tga new file mode 100755 index 0000000..0371451 Binary files /dev/null and b/assets/emoticons/good_1x1.tga differ diff --git a/assets/emoticons/gotmilk_2x1.tga b/assets/emoticons/gotmilk_2x1.tga new file mode 100644 index 0000000..1110c71 Binary files /dev/null and b/assets/emoticons/gotmilk_2x1.tga differ diff --git a/assets/emoticons/granger_1x1.tga b/assets/emoticons/granger_1x1.tga new file mode 100755 index 0000000..cab0f19 Binary files /dev/null and b/assets/emoticons/granger_1x1.tga differ diff --git a/assets/emoticons/greenparty_1x1.tga b/assets/emoticons/greenparty_1x1.tga new file mode 100644 index 0000000..3abba69 Binary files /dev/null and b/assets/emoticons/greenparty_1x1.tga differ diff --git a/assets/emoticons/grenade_1x1.tga b/assets/emoticons/grenade_1x1.tga new file mode 100755 index 0000000..5ee49b0 Binary files /dev/null and b/assets/emoticons/grenade_1x1.tga differ diff --git a/assets/emoticons/gxchat_1x1.tga b/assets/emoticons/gxchat_1x1.tga new file mode 100644 index 0000000..ba04c6e Binary files /dev/null and b/assets/emoticons/gxchat_1x1.tga differ diff --git a/assets/emoticons/hammer_1x1.tga b/assets/emoticons/hammer_1x1.tga new file mode 100755 index 0000000..729e9f8 Binary files /dev/null and b/assets/emoticons/hammer_1x1.tga differ diff --git a/assets/emoticons/handcuffs_1x1.tga b/assets/emoticons/handcuffs_1x1.tga new file mode 100755 index 0000000..aa37e57 Binary files /dev/null and b/assets/emoticons/handcuffs_1x1.tga differ diff --git a/assets/emoticons/handshake_1x1.tga b/assets/emoticons/handshake_1x1.tga new file mode 100755 index 0000000..e73b5b8 Binary files /dev/null and b/assets/emoticons/handshake_1x1.tga differ diff --git a/assets/emoticons/hankhill_1x1.tga b/assets/emoticons/hankhill_1x1.tga new file mode 100644 index 0000000..1822c05 Binary files /dev/null and b/assets/emoticons/hankhill_1x1.tga differ diff --git a/assets/emoticons/heart_1x1.tga b/assets/emoticons/heart_1x1.tga new file mode 100755 index 0000000..b8750d2 Binary files /dev/null and b/assets/emoticons/heart_1x1.tga differ diff --git a/assets/emoticons/highfive_1x1.tga b/assets/emoticons/highfive_1x1.tga new file mode 100755 index 0000000..904e176 Binary files /dev/null and b/assets/emoticons/highfive_1x1.tga differ diff --git a/assets/emoticons/hive_1x1.tga b/assets/emoticons/hive_1x1.tga new file mode 100755 index 0000000..29d6a9a Binary files /dev/null and b/assets/emoticons/hive_1x1.tga differ diff --git a/assets/emoticons/hl2_1x1.tga b/assets/emoticons/hl2_1x1.tga new file mode 100644 index 0000000..802e472 Binary files /dev/null and b/assets/emoticons/hl2_1x1.tga differ diff --git a/assets/emoticons/hovel_1x1.tga b/assets/emoticons/hovel_1x1.tga new file mode 100755 index 0000000..d45dd33 Binary files /dev/null and b/assets/emoticons/hovel_1x1.tga differ diff --git a/assets/emoticons/hug-left_1x1.tga b/assets/emoticons/hug-left_1x1.tga new file mode 100755 index 0000000..0c0d5d8 Binary files /dev/null and b/assets/emoticons/hug-left_1x1.tga differ diff --git a/assets/emoticons/hug-right_1x1.tga b/assets/emoticons/hug-right_1x1.tga new file mode 100755 index 0000000..65c7e1f Binary files /dev/null and b/assets/emoticons/hug-right_1x1.tga differ diff --git a/assets/emoticons/human_1x1.tga b/assets/emoticons/human_1x1.tga new file mode 100755 index 0000000..7290366 Binary files /dev/null and b/assets/emoticons/human_1x1.tga differ diff --git a/assets/emoticons/hypnotized_1x1.tga b/assets/emoticons/hypnotized_1x1.tga new file mode 100755 index 0000000..fa63ef0 Binary files /dev/null and b/assets/emoticons/hypnotized_1x1.tga differ diff --git a/assets/emoticons/ie_1x1.tga b/assets/emoticons/ie_1x1.tga new file mode 100644 index 0000000..e1e224f Binary files /dev/null and b/assets/emoticons/ie_1x1.tga differ diff --git a/assets/emoticons/ikusari_1x1.tga b/assets/emoticons/ikusari_1x1.tga new file mode 100755 index 0000000..3610a9b Binary files /dev/null and b/assets/emoticons/ikusari_1x1.tga differ diff --git a/assets/emoticons/in-love_1x1.tga b/assets/emoticons/in-love_1x1.tga new file mode 100755 index 0000000..5f45d26 Binary files /dev/null and b/assets/emoticons/in-love_1x1.tga differ diff --git a/assets/emoticons/irssi_1x1.tga b/assets/emoticons/irssi_1x1.tga new file mode 100644 index 0000000..9026c55 Binary files /dev/null and b/assets/emoticons/irssi_1x1.tga differ diff --git a/assets/emoticons/island_1x1.tga b/assets/emoticons/island_1x1.tga new file mode 100755 index 0000000..66f3834 Binary files /dev/null and b/assets/emoticons/island_1x1.tga differ diff --git a/assets/emoticons/jump_1x1.tga b/assets/emoticons/jump_1x1.tga new file mode 100755 index 0000000..7cf80c1 Binary files /dev/null and b/assets/emoticons/jump_1x1.tga differ diff --git a/assets/emoticons/jupiter_1x1.tga b/assets/emoticons/jupiter_1x1.tga new file mode 100755 index 0000000..92290cf Binary files /dev/null and b/assets/emoticons/jupiter_1x1.tga differ diff --git a/assets/emoticons/kiss2_1x1.tga b/assets/emoticons/kiss2_1x1.tga new file mode 100644 index 0000000..a422e3d Binary files /dev/null and b/assets/emoticons/kiss2_1x1.tga differ diff --git a/assets/emoticons/kiss_1x1.tga b/assets/emoticons/kiss_1x1.tga new file mode 100755 index 0000000..a422e3d Binary files /dev/null and b/assets/emoticons/kiss_1x1.tga differ diff --git a/assets/emoticons/kissed_1x1.tga b/assets/emoticons/kissed_1x1.tga new file mode 100755 index 0000000..beacfb2 Binary files /dev/null and b/assets/emoticons/kissed_1x1.tga differ diff --git a/assets/emoticons/kissing_1x1.tga b/assets/emoticons/kissing_1x1.tga new file mode 100755 index 0000000..59c3044 Binary files /dev/null and b/assets/emoticons/kissing_1x1.tga differ diff --git a/assets/emoticons/knife_1x1.tga b/assets/emoticons/knife_1x1.tga new file mode 100755 index 0000000..b8a132c Binary files /dev/null and b/assets/emoticons/knife_1x1.tga differ diff --git a/assets/emoticons/konversation_1x1.tga b/assets/emoticons/konversation_1x1.tga new file mode 100644 index 0000000..e0998ea Binary files /dev/null and b/assets/emoticons/konversation_1x1.tga differ diff --git a/assets/emoticons/kor1_1x1.tga b/assets/emoticons/kor1_1x1.tga new file mode 100755 index 0000000..a18790d Binary files /dev/null and b/assets/emoticons/kor1_1x1.tga differ diff --git a/assets/emoticons/kor2_1x1.tga b/assets/emoticons/kor2_1x1.tga new file mode 100755 index 0000000..0cb6853 Binary files /dev/null and b/assets/emoticons/kor2_1x1.tga differ diff --git a/assets/emoticons/kor3_1x1.tga b/assets/emoticons/kor3_1x1.tga new file mode 100755 index 0000000..abc9438 Binary files /dev/null and b/assets/emoticons/kor3_1x1.tga differ diff --git a/assets/emoticons/kor_1x1.tga b/assets/emoticons/kor_1x1.tga new file mode 100755 index 0000000..d86808f Binary files /dev/null and b/assets/emoticons/kor_1x1.tga differ diff --git a/assets/emoticons/korban1_8x1.tga b/assets/emoticons/korban1_8x1.tga new file mode 100644 index 0000000..81d2613 Binary files /dev/null and b/assets/emoticons/korban1_8x1.tga differ diff --git a/assets/emoticons/korban2_8x1.tga b/assets/emoticons/korban2_8x1.tga new file mode 100644 index 0000000..219a96b Binary files /dev/null and b/assets/emoticons/korban2_8x1.tga differ diff --git a/assets/emoticons/korn_2x1.tga b/assets/emoticons/korn_2x1.tga new file mode 100755 index 0000000..79795be Binary files /dev/null and b/assets/emoticons/korn_2x1.tga differ diff --git a/assets/emoticons/korx1_1x1.tga b/assets/emoticons/korx1_1x1.tga new file mode 100755 index 0000000..a6eeb2a Binary files /dev/null and b/assets/emoticons/korx1_1x1.tga differ diff --git a/assets/emoticons/korx2_1x1.tga b/assets/emoticons/korx2_1x1.tga new file mode 100755 index 0000000..f9eb84f Binary files /dev/null and b/assets/emoticons/korx2_1x1.tga differ diff --git a/assets/emoticons/korx3_1x1.tga b/assets/emoticons/korx3_1x1.tga new file mode 100755 index 0000000..46cebbe Binary files /dev/null and b/assets/emoticons/korx3_1x1.tga differ diff --git a/assets/emoticons/lambda_1x1.tga b/assets/emoticons/lambda_1x1.tga new file mode 100644 index 0000000..4db4932 Binary files /dev/null and b/assets/emoticons/lambda_1x1.tga differ diff --git a/assets/emoticons/lamp_1x1.tga b/assets/emoticons/lamp_1x1.tga new file mode 100755 index 0000000..f702830 Binary files /dev/null and b/assets/emoticons/lamp_1x1.tga differ diff --git a/assets/emoticons/lasgun_2x1.tga b/assets/emoticons/lasgun_2x1.tga new file mode 100755 index 0000000..3171c7e Binary files /dev/null and b/assets/emoticons/lasgun_2x1.tga differ diff --git a/assets/emoticons/lasgunshot2_2x1.tga b/assets/emoticons/lasgunshot2_2x1.tga new file mode 100644 index 0000000..0e6213d Binary files /dev/null and b/assets/emoticons/lasgunshot2_2x1.tga differ diff --git a/assets/emoticons/lashes_1x1.tga b/assets/emoticons/lashes_1x1.tga new file mode 100755 index 0000000..423ec0e Binary files /dev/null and b/assets/emoticons/lashes_1x1.tga differ diff --git a/assets/emoticons/laugh_1x1.tga b/assets/emoticons/laugh_1x1.tga new file mode 100755 index 0000000..114bf05 Binary files /dev/null and b/assets/emoticons/laugh_1x1.tga differ diff --git a/assets/emoticons/lcannon_2x1.tga b/assets/emoticons/lcannon_2x1.tga new file mode 100755 index 0000000..f97339c Binary files /dev/null and b/assets/emoticons/lcannon_2x1.tga differ diff --git a/assets/emoticons/lcannonshot1_2x1.tga b/assets/emoticons/lcannonshot1_2x1.tga new file mode 100644 index 0000000..da5f6c3 Binary files /dev/null and b/assets/emoticons/lcannonshot1_2x1.tga differ diff --git a/assets/emoticons/lcannonshot2_2x1.tga b/assets/emoticons/lcannonshot2_2x1.tga new file mode 100644 index 0000000..e2472d2 Binary files /dev/null and b/assets/emoticons/lcannonshot2_2x1.tga differ diff --git a/assets/emoticons/liquor_1x1.tga b/assets/emoticons/liquor_1x1.tga new file mode 100755 index 0000000..37c1f3c Binary files /dev/null and b/assets/emoticons/liquor_1x1.tga differ diff --git a/assets/emoticons/loser_1x1.tga b/assets/emoticons/loser_1x1.tga new file mode 100755 index 0000000..ed580de Binary files /dev/null and b/assets/emoticons/loser_1x1.tga differ diff --git a/assets/emoticons/love-over_1x1.tga b/assets/emoticons/love-over_1x1.tga new file mode 100755 index 0000000..1869e99 Binary files /dev/null and b/assets/emoticons/love-over_1x1.tga differ diff --git a/assets/emoticons/love_1x1.tga b/assets/emoticons/love_1x1.tga new file mode 100755 index 0000000..87f2e9b Binary files /dev/null and b/assets/emoticons/love_1x1.tga differ diff --git a/assets/emoticons/lying_1x1.tga b/assets/emoticons/lying_1x1.tga new file mode 100755 index 0000000..51905bd Binary files /dev/null and b/assets/emoticons/lying_1x1.tga differ diff --git a/assets/emoticons/mad-tongue_1x1.tga b/assets/emoticons/mad-tongue_1x1.tga new file mode 100755 index 0000000..aa2a017 Binary files /dev/null and b/assets/emoticons/mad-tongue_1x1.tga differ diff --git a/assets/emoticons/magnum_2x1.tga b/assets/emoticons/magnum_2x1.tga new file mode 100644 index 0000000..500c3fc Binary files /dev/null and b/assets/emoticons/magnum_2x1.tga differ diff --git a/assets/emoticons/mail_1x1.tga b/assets/emoticons/mail_1x1.tga new file mode 100755 index 0000000..6f95c0c Binary files /dev/null and b/assets/emoticons/mail_1x1.tga differ diff --git a/assets/emoticons/male-fighter1_1x1.tga b/assets/emoticons/male-fighter1_1x1.tga new file mode 100755 index 0000000..73d34f1 Binary files /dev/null and b/assets/emoticons/male-fighter1_1x1.tga differ diff --git a/assets/emoticons/male-fighter2_1x1.tga b/assets/emoticons/male-fighter2_1x1.tga new file mode 100755 index 0000000..0fc559c Binary files /dev/null and b/assets/emoticons/male-fighter2_1x1.tga differ diff --git a/assets/emoticons/marauder_1x1.tga b/assets/emoticons/marauder_1x1.tga new file mode 100755 index 0000000..a3c7cba Binary files /dev/null and b/assets/emoticons/marauder_1x1.tga differ diff --git a/assets/emoticons/mars_1x1.tga b/assets/emoticons/mars_1x1.tga new file mode 100755 index 0000000..52085ab Binary files /dev/null and b/assets/emoticons/mars_1x1.tga differ diff --git a/assets/emoticons/mdriver_2x1.tga b/assets/emoticons/mdriver_2x1.tga new file mode 100755 index 0000000..d129bd6 Binary files /dev/null and b/assets/emoticons/mdriver_2x1.tga differ diff --git a/assets/emoticons/mdrivershot1_2x1.tga b/assets/emoticons/mdrivershot1_2x1.tga new file mode 100644 index 0000000..76868d6 Binary files /dev/null and b/assets/emoticons/mdrivershot1_2x1.tga differ diff --git a/assets/emoticons/mdrivershot2_2x1.tga b/assets/emoticons/mdrivershot2_2x1.tga new file mode 100644 index 0000000..bfcc0c9 Binary files /dev/null and b/assets/emoticons/mdrivershot2_2x1.tga differ diff --git a/assets/emoticons/mean_1x1.tga b/assets/emoticons/mean_1x1.tga new file mode 100755 index 0000000..1cf6536 Binary files /dev/null and b/assets/emoticons/mean_1x1.tga differ diff --git a/assets/emoticons/meatwad_1x1.tga b/assets/emoticons/meatwad_1x1.tga new file mode 100644 index 0000000..4e0432a Binary files /dev/null and b/assets/emoticons/meatwad_1x1.tga differ diff --git a/assets/emoticons/medstat_1x1.tga b/assets/emoticons/medstat_1x1.tga new file mode 100755 index 0000000..fc26b53 Binary files /dev/null and b/assets/emoticons/medstat_1x1.tga differ diff --git a/assets/emoticons/meeting_1x1.tga b/assets/emoticons/meeting_1x1.tga new file mode 100755 index 0000000..6c1f431 Binary files /dev/null and b/assets/emoticons/meeting_1x1.tga differ diff --git a/assets/emoticons/mercury_1x1.tga b/assets/emoticons/mercury_1x1.tga new file mode 100755 index 0000000..45face9 Binary files /dev/null and b/assets/emoticons/mercury_1x1.tga differ diff --git a/assets/emoticons/messed_1x1.tga b/assets/emoticons/messed_1x1.tga new file mode 100755 index 0000000..9140f02 Binary files /dev/null and b/assets/emoticons/messed_1x1.tga differ diff --git a/assets/emoticons/mg_1x1.tga b/assets/emoticons/mg_1x1.tga new file mode 100755 index 0000000..20828e1 Binary files /dev/null and b/assets/emoticons/mg_1x1.tga differ diff --git a/assets/emoticons/midori_1x1.tga b/assets/emoticons/midori_1x1.tga new file mode 100644 index 0000000..5fa8ee4 Binary files /dev/null and b/assets/emoticons/midori_1x1.tga differ diff --git a/assets/emoticons/milk_1x1.tga b/assets/emoticons/milk_1x1.tga new file mode 100755 index 0000000..21a5499 Binary files /dev/null and b/assets/emoticons/milk_1x1.tga differ diff --git a/assets/emoticons/mirc_1x1.tga b/assets/emoticons/mirc_1x1.tga new file mode 100644 index 0000000..5a0808d Binary files /dev/null and b/assets/emoticons/mirc_1x1.tga differ diff --git a/assets/emoticons/mobile_1x1.tga b/assets/emoticons/mobile_1x1.tga new file mode 100755 index 0000000..0685f24 Binary files /dev/null and b/assets/emoticons/mobile_1x1.tga differ diff --git a/assets/emoticons/mohawk_1x1.tga b/assets/emoticons/mohawk_1x1.tga new file mode 100755 index 0000000..ebdef2e Binary files /dev/null and b/assets/emoticons/mohawk_1x1.tga differ diff --git a/assets/emoticons/moneymouth_1x1.tga b/assets/emoticons/moneymouth_1x1.tga new file mode 100755 index 0000000..6d6c5d6 Binary files /dev/null and b/assets/emoticons/moneymouth_1x1.tga differ diff --git a/assets/emoticons/monkey_1x1.tga b/assets/emoticons/monkey_1x1.tga new file mode 100755 index 0000000..be658b6 Binary files /dev/null and b/assets/emoticons/monkey_1x1.tga differ diff --git a/assets/emoticons/moon_1x1.tga b/assets/emoticons/moon_1x1.tga new file mode 100755 index 0000000..8dbefc9 Binary files /dev/null and b/assets/emoticons/moon_1x1.tga differ diff --git a/assets/emoticons/msn_1x1.tga b/assets/emoticons/msn_1x1.tga new file mode 100755 index 0000000..06a3e77 Binary files /dev/null and b/assets/emoticons/msn_1x1.tga differ diff --git a/assets/emoticons/music_1x1.tga b/assets/emoticons/music_1x1.tga new file mode 100755 index 0000000..d96f878 Binary files /dev/null and b/assets/emoticons/music_1x1.tga differ diff --git a/assets/emoticons/musical-note_1x1.tga b/assets/emoticons/musical-note_1x1.tga new file mode 100755 index 0000000..1eba943 Binary files /dev/null and b/assets/emoticons/musical-note_1x1.tga differ diff --git a/assets/emoticons/nailbiting_1x1.tga b/assets/emoticons/nailbiting_1x1.tga new file mode 100755 index 0000000..26350f9 Binary files /dev/null and b/assets/emoticons/nailbiting_1x1.tga differ diff --git a/assets/emoticons/narwahl_1x1.tga b/assets/emoticons/narwahl_1x1.tga new file mode 100644 index 0000000..25763b3 Binary files /dev/null and b/assets/emoticons/narwahl_1x1.tga differ diff --git a/assets/emoticons/neptune_1x1.tga b/assets/emoticons/neptune_1x1.tga new file mode 100755 index 0000000..64ebc0b Binary files /dev/null and b/assets/emoticons/neptune_1x1.tga differ diff --git a/assets/emoticons/neutral_1x1.tga b/assets/emoticons/neutral_1x1.tga new file mode 100755 index 0000000..ccf9a78 Binary files /dev/null and b/assets/emoticons/neutral_1x1.tga differ diff --git a/assets/emoticons/nutella_1x1.tga b/assets/emoticons/nutella_1x1.tga new file mode 100755 index 0000000..e4dbe7d Binary files /dev/null and b/assets/emoticons/nutella_1x1.tga 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 Binary files /dev/null and b/assets/emoticons/on-the-phone_1x1.tga differ diff --git a/assets/emoticons/os/apple_1x1.tga b/assets/emoticons/os/apple_1x1.tga new file mode 100755 index 0000000..8245b82 Binary files /dev/null and b/assets/emoticons/os/apple_1x1.tga differ diff --git a/assets/emoticons/os/arch2_1x1.tga b/assets/emoticons/os/arch2_1x1.tga new file mode 100755 index 0000000..d8bb2b3 Binary files /dev/null and b/assets/emoticons/os/arch2_1x1.tga differ diff --git a/assets/emoticons/os/arch3_1x1.tga b/assets/emoticons/os/arch3_1x1.tga new file mode 100755 index 0000000..6cf2885 Binary files /dev/null and b/assets/emoticons/os/arch3_1x1.tga differ diff --git a/assets/emoticons/os/arch_1x1.tga b/assets/emoticons/os/arch_1x1.tga new file mode 100755 index 0000000..26829e7 Binary files /dev/null and b/assets/emoticons/os/arch_1x1.tga differ diff --git a/assets/emoticons/os/centos_1x1.tga b/assets/emoticons/os/centos_1x1.tga new file mode 100755 index 0000000..72698a1 Binary files /dev/null and b/assets/emoticons/os/centos_1x1.tga differ diff --git a/assets/emoticons/os/debian_1x1.tga b/assets/emoticons/os/debian_1x1.tga new file mode 100755 index 0000000..16a8c7d Binary files /dev/null and b/assets/emoticons/os/debian_1x1.tga differ diff --git a/assets/emoticons/os/dsl_1x1.tga b/assets/emoticons/os/dsl_1x1.tga new file mode 100755 index 0000000..721df7a Binary files /dev/null and b/assets/emoticons/os/dsl_1x1.tga differ diff --git a/assets/emoticons/os/fedora_1x1.tga b/assets/emoticons/os/fedora_1x1.tga new file mode 100755 index 0000000..d90bc72 Binary files /dev/null and b/assets/emoticons/os/fedora_1x1.tga differ diff --git a/assets/emoticons/os/freebsd_1x1.tga b/assets/emoticons/os/freebsd_1x1.tga new file mode 100755 index 0000000..deecf78 Binary files /dev/null and b/assets/emoticons/os/freebsd_1x1.tga differ diff --git a/assets/emoticons/os/gentoo_1x1.tga b/assets/emoticons/os/gentoo_1x1.tga new file mode 100755 index 0000000..a838b63 Binary files /dev/null and b/assets/emoticons/os/gentoo_1x1.tga differ diff --git a/assets/emoticons/os/gnome_1x1.tga b/assets/emoticons/os/gnome_1x1.tga new file mode 100755 index 0000000..1adbc1b Binary files /dev/null and b/assets/emoticons/os/gnome_1x1.tga differ diff --git a/assets/emoticons/os/kanotix_1x1.tga b/assets/emoticons/os/kanotix_1x1.tga new file mode 100755 index 0000000..5f622a3 Binary files /dev/null and b/assets/emoticons/os/kanotix_1x1.tga differ diff --git a/assets/emoticons/os/kde_1x1.tga b/assets/emoticons/os/kde_1x1.tga new file mode 100755 index 0000000..2a6f7c0 Binary files /dev/null and b/assets/emoticons/os/kde_1x1.tga differ diff --git a/assets/emoticons/os/knoppix_1x1.tga b/assets/emoticons/os/knoppix_1x1.tga new file mode 100755 index 0000000..3f88b13 Binary files /dev/null and b/assets/emoticons/os/knoppix_1x1.tga differ diff --git a/assets/emoticons/os/kubuntu_1x1.tga b/assets/emoticons/os/kubuntu_1x1.tga new file mode 100755 index 0000000..618dc00 Binary files /dev/null and b/assets/emoticons/os/kubuntu_1x1.tga differ diff --git a/assets/emoticons/os/linspire_1x1.tga b/assets/emoticons/os/linspire_1x1.tga new file mode 100755 index 0000000..4fbc39a Binary files /dev/null and b/assets/emoticons/os/linspire_1x1.tga differ diff --git a/assets/emoticons/os/linux_1x1.tga b/assets/emoticons/os/linux_1x1.tga new file mode 100755 index 0000000..7eeb55d Binary files /dev/null and b/assets/emoticons/os/linux_1x1.tga differ diff --git a/assets/emoticons/os/mac_1x1.tga b/assets/emoticons/os/mac_1x1.tga new file mode 100755 index 0000000..84c58ec Binary files /dev/null and b/assets/emoticons/os/mac_1x1.tga differ diff --git a/assets/emoticons/os/mandriva_1x1.tga b/assets/emoticons/os/mandriva_1x1.tga new file mode 100755 index 0000000..04bbb53 Binary files /dev/null and b/assets/emoticons/os/mandriva_1x1.tga differ diff --git a/assets/emoticons/os/mint_1x1.tga b/assets/emoticons/os/mint_1x1.tga new file mode 100755 index 0000000..144f78d Binary files /dev/null and b/assets/emoticons/os/mint_1x1.tga differ diff --git a/assets/emoticons/os/netbsd_1x1.tga b/assets/emoticons/os/netbsd_1x1.tga new file mode 100755 index 0000000..9c8da87 Binary files /dev/null and b/assets/emoticons/os/netbsd_1x1.tga differ diff --git a/assets/emoticons/os/openbsd_1x1.tga b/assets/emoticons/os/openbsd_1x1.tga new file mode 100755 index 0000000..619ab83 Binary files /dev/null and b/assets/emoticons/os/openbsd_1x1.tga differ diff --git a/assets/emoticons/os/pclinuxos_1x1.tga b/assets/emoticons/os/pclinuxos_1x1.tga new file mode 100755 index 0000000..466107c Binary files /dev/null and b/assets/emoticons/os/pclinuxos_1x1.tga differ diff --git a/assets/emoticons/os/puppy_1x1.tga b/assets/emoticons/os/puppy_1x1.tga new file mode 100755 index 0000000..f18cc34 Binary files /dev/null and b/assets/emoticons/os/puppy_1x1.tga differ diff --git a/assets/emoticons/os/redhat_1x1.tga b/assets/emoticons/os/redhat_1x1.tga new file mode 100755 index 0000000..0757157 Binary files /dev/null and b/assets/emoticons/os/redhat_1x1.tga differ diff --git a/assets/emoticons/os/sabayon_1x1.tga b/assets/emoticons/os/sabayon_1x1.tga new file mode 100755 index 0000000..6786ebf Binary files /dev/null and b/assets/emoticons/os/sabayon_1x1.tga differ diff --git a/assets/emoticons/os/slackware_1x1.tga b/assets/emoticons/os/slackware_1x1.tga new file mode 100755 index 0000000..b655ae6 Binary files /dev/null and b/assets/emoticons/os/slackware_1x1.tga differ diff --git a/assets/emoticons/os/slax_1x1.tga b/assets/emoticons/os/slax_1x1.tga new file mode 100755 index 0000000..2adaa40 Binary files /dev/null and b/assets/emoticons/os/slax_1x1.tga differ diff --git a/assets/emoticons/os/suse_1x1.tga b/assets/emoticons/os/suse_1x1.tga new file mode 100755 index 0000000..9a99525 Binary files /dev/null and b/assets/emoticons/os/suse_1x1.tga differ diff --git a/assets/emoticons/os/symphony_1x1.tga b/assets/emoticons/os/symphony_1x1.tga new file mode 100755 index 0000000..db0ada3 Binary files /dev/null and b/assets/emoticons/os/symphony_1x1.tga differ diff --git a/assets/emoticons/os/ubuntu_1x1.tga b/assets/emoticons/os/ubuntu_1x1.tga new file mode 100755 index 0000000..9ccb9ee Binary files /dev/null and b/assets/emoticons/os/ubuntu_1x1.tga differ diff --git a/assets/emoticons/os/windows_1x1.tga b/assets/emoticons/os/windows_1x1.tga new file mode 100755 index 0000000..9ded264 Binary files /dev/null and b/assets/emoticons/os/windows_1x1.tga differ diff --git a/assets/emoticons/os/xfce_1x1.tga b/assets/emoticons/os/xfce_1x1.tga new file mode 100755 index 0000000..2ca61e5 Binary files /dev/null and b/assets/emoticons/os/xfce_1x1.tga differ diff --git a/assets/emoticons/os/xubuntu_1x1.tga b/assets/emoticons/os/xubuntu_1x1.tga new file mode 100755 index 0000000..ec0fafd Binary files /dev/null and b/assets/emoticons/os/xubuntu_1x1.tga differ diff --git a/assets/emoticons/overmind_1x1.tga b/assets/emoticons/overmind_1x1.tga new file mode 100755 index 0000000..0d2c413 Binary files /dev/null and b/assets/emoticons/overmind_1x1.tga differ diff --git a/assets/emoticons/painsawShot1_2x1.tga b/assets/emoticons/painsawShot1_2x1.tga new file mode 100644 index 0000000..a14ebc9 Binary files /dev/null and b/assets/emoticons/painsawShot1_2x1.tga differ diff --git a/assets/emoticons/painsaw_2x1.tga b/assets/emoticons/painsaw_2x1.tga new file mode 100755 index 0000000..b12f9c8 Binary files /dev/null and b/assets/emoticons/painsaw_2x1.tga differ diff --git a/assets/emoticons/party_1x1.tga b/assets/emoticons/party_1x1.tga new file mode 100755 index 0000000..93ae9f6 Binary files /dev/null and b/assets/emoticons/party_1x1.tga differ diff --git a/assets/emoticons/peace_1x1.tga b/assets/emoticons/peace_1x1.tga new file mode 100755 index 0000000..93296dd Binary files /dev/null and b/assets/emoticons/peace_1x1.tga differ diff --git a/assets/emoticons/phone_1x1.tga b/assets/emoticons/phone_1x1.tga new file mode 100755 index 0000000..ad50ca4 Binary files /dev/null and b/assets/emoticons/phone_1x1.tga differ diff --git a/assets/emoticons/pidgin_1x1.tga b/assets/emoticons/pidgin_1x1.tga new file mode 100644 index 0000000..d99499d Binary files /dev/null and b/assets/emoticons/pidgin_1x1.tga differ diff --git a/assets/emoticons/pig_1x1.tga b/assets/emoticons/pig_1x1.tga new file mode 100755 index 0000000..b0853af Binary files /dev/null and b/assets/emoticons/pig_1x1.tga differ diff --git a/assets/emoticons/pikachu_1x1.tga b/assets/emoticons/pikachu_1x1.tga new file mode 100644 index 0000000..d153b43 Binary files /dev/null and b/assets/emoticons/pikachu_1x1.tga differ diff --git a/assets/emoticons/pill_1x1.tga b/assets/emoticons/pill_1x1.tga new file mode 100755 index 0000000..963b4b3 Binary files /dev/null and b/assets/emoticons/pill_1x1.tga differ diff --git a/assets/emoticons/pirate_1x1.tga b/assets/emoticons/pirate_1x1.tga new file mode 100755 index 0000000..1fbb004 Binary files /dev/null and b/assets/emoticons/pirate_1x1.tga differ diff --git a/assets/emoticons/pirateparty_1x1.tga b/assets/emoticons/pirateparty_1x1.tga new file mode 100644 index 0000000..aa17aba Binary files /dev/null and b/assets/emoticons/pirateparty_1x1.tga differ diff --git a/assets/emoticons/pissed-off_1x1.tga b/assets/emoticons/pissed-off_1x1.tga new file mode 100755 index 0000000..53aee0f Binary files /dev/null and b/assets/emoticons/pissed-off_1x1.tga differ diff --git a/assets/emoticons/pizza_1x1.tga b/assets/emoticons/pizza_1x1.tga new file mode 100755 index 0000000..afc397f Binary files /dev/null and b/assets/emoticons/pizza_1x1.tga differ diff --git a/assets/emoticons/plate_1x1.tga b/assets/emoticons/plate_1x1.tga new file mode 100755 index 0000000..a38e9c1 Binary files /dev/null and b/assets/emoticons/plate_1x1.tga differ diff --git a/assets/emoticons/poop_1x1.tga b/assets/emoticons/poop_1x1.tga new file mode 100755 index 0000000..149131b Binary files /dev/null and b/assets/emoticons/poop_1x1.tga differ diff --git a/assets/emoticons/pray_1x1.tga b/assets/emoticons/pray_1x1.tga new file mode 100755 index 0000000..2023406 Binary files /dev/null and b/assets/emoticons/pray_1x1.tga differ diff --git a/assets/emoticons/present_1x1.tga b/assets/emoticons/present_1x1.tga new file mode 100755 index 0000000..b4695fb Binary files /dev/null and b/assets/emoticons/present_1x1.tga differ diff --git a/assets/emoticons/prifle_2x1.tga b/assets/emoticons/prifle_2x1.tga new file mode 100755 index 0000000..c36945f Binary files /dev/null and b/assets/emoticons/prifle_2x1.tga differ diff --git a/assets/emoticons/prifleshot1_2x1.tga b/assets/emoticons/prifleshot1_2x1.tga new file mode 100644 index 0000000..9a1b848 Binary files /dev/null and b/assets/emoticons/prifleshot1_2x1.tga differ diff --git a/assets/emoticons/pumpkin_1x1.tga b/assets/emoticons/pumpkin_1x1.tga new file mode 100755 index 0000000..b546b1f Binary files /dev/null and b/assets/emoticons/pumpkin_1x1.tga differ diff --git a/assets/emoticons/qq_1x1.tga b/assets/emoticons/qq_1x1.tga new file mode 100755 index 0000000..6a3b8b3 Binary files /dev/null and b/assets/emoticons/qq_1x1.tga differ diff --git a/assets/emoticons/question_1x1.tga b/assets/emoticons/question_1x1.tga new file mode 100755 index 0000000..302582c Binary files /dev/null and b/assets/emoticons/question_1x1.tga differ diff --git a/assets/emoticons/quiet_1x1.tga b/assets/emoticons/quiet_1x1.tga new file mode 100755 index 0000000..be0cbc2 Binary files /dev/null and b/assets/emoticons/quiet_1x1.tga differ diff --git a/assets/emoticons/rain_1x1.tga b/assets/emoticons/rain_1x1.tga new file mode 100755 index 0000000..a2a906a Binary files /dev/null and b/assets/emoticons/rain_1x1.tga differ diff --git a/assets/emoticons/rainbow_1x1.tga b/assets/emoticons/rainbow_1x1.tga new file mode 100755 index 0000000..e6d16b0 Binary files /dev/null and b/assets/emoticons/rainbow_1x1.tga differ diff --git a/assets/emoticons/reactor_1x1.tga b/assets/emoticons/reactor_1x1.tga new file mode 100755 index 0000000..cbbc21e Binary files /dev/null and b/assets/emoticons/reactor_1x1.tga differ diff --git a/assets/emoticons/repeater_1x1.tga b/assets/emoticons/repeater_1x1.tga new file mode 100755 index 0000000..c2c3712 Binary files /dev/null and b/assets/emoticons/repeater_1x1.tga differ diff --git a/assets/emoticons/republican_1x1.tga b/assets/emoticons/republican_1x1.tga new file mode 100644 index 0000000..ded2fea Binary files /dev/null and b/assets/emoticons/republican_1x1.tga differ diff --git a/assets/emoticons/retard_1x1.tga b/assets/emoticons/retard_1x1.tga new file mode 100755 index 0000000..3c90abc Binary files /dev/null and b/assets/emoticons/retard_1x1.tga differ diff --git a/assets/emoticons/rifle_2x1.tga b/assets/emoticons/rifle_2x1.tga new file mode 100755 index 0000000..b59ca2a Binary files /dev/null and b/assets/emoticons/rifle_2x1.tga differ diff --git a/assets/emoticons/rifleshot1_2x1.tga b/assets/emoticons/rifleshot1_2x1.tga new file mode 100644 index 0000000..aa58554 Binary files /dev/null and b/assets/emoticons/rifleshot1_2x1.tga differ diff --git a/assets/emoticons/rifleshot2_2x1.tga b/assets/emoticons/rifleshot2_2x1.tga new file mode 100644 index 0000000..ed25513 Binary files /dev/null and b/assets/emoticons/rifleshot2_2x1.tga differ diff --git a/assets/emoticons/rk_1x1.tga b/assets/emoticons/rk_1x1.tga new file mode 100755 index 0000000..139cb4c Binary files /dev/null and b/assets/emoticons/rk_1x1.tga differ diff --git a/assets/emoticons/rose-dead_1x1.tga b/assets/emoticons/rose-dead_1x1.tga new file mode 100755 index 0000000..697856c Binary files /dev/null and b/assets/emoticons/rose-dead_1x1.tga differ diff --git a/assets/emoticons/rose_1x1.tga b/assets/emoticons/rose_1x1.tga new file mode 100755 index 0000000..f40fab4 Binary files /dev/null and b/assets/emoticons/rose_1x1.tga differ diff --git a/assets/emoticons/rotfl_1x1.tga b/assets/emoticons/rotfl_1x1.tga new file mode 100755 index 0000000..6c03c81 Binary files /dev/null and b/assets/emoticons/rotfl_1x1.tga differ diff --git a/assets/emoticons/sad_1x1.tga b/assets/emoticons/sad_1x1.tga new file mode 100755 index 0000000..c7fcc3d Binary files /dev/null and b/assets/emoticons/sad_1x1.tga differ diff --git a/assets/emoticons/safari_1x1.tga b/assets/emoticons/safari_1x1.tga new file mode 100644 index 0000000..df08d39 Binary files /dev/null and b/assets/emoticons/safari_1x1.tga differ diff --git a/assets/emoticons/sarcastic_1x1.tga b/assets/emoticons/sarcastic_1x1.tga new file mode 100755 index 0000000..0b5a105 Binary files /dev/null and b/assets/emoticons/sarcastic_1x1.tga differ diff --git a/assets/emoticons/saturn_1x1.tga b/assets/emoticons/saturn_1x1.tga new file mode 100755 index 0000000..925498b Binary files /dev/null and b/assets/emoticons/saturn_1x1.tga differ diff --git a/assets/emoticons/search_1x1.tga b/assets/emoticons/search_1x1.tga new file mode 100755 index 0000000..094f205 Binary files /dev/null and b/assets/emoticons/search_1x1.tga differ diff --git a/assets/emoticons/secret_1x1.tga b/assets/emoticons/secret_1x1.tga new file mode 100755 index 0000000..e030c0c Binary files /dev/null and b/assets/emoticons/secret_1x1.tga differ diff --git a/assets/emoticons/shame_1x1.tga b/assets/emoticons/shame_1x1.tga new file mode 100755 index 0000000..1de35d1 Binary files /dev/null and b/assets/emoticons/shame_1x1.tga differ diff --git a/assets/emoticons/sheep_1x1.tga b/assets/emoticons/sheep_1x1.tga new file mode 100755 index 0000000..14726af Binary files /dev/null and b/assets/emoticons/sheep_1x1.tga differ diff --git a/assets/emoticons/shock_1x1.tga b/assets/emoticons/shock_1x1.tga new file mode 100755 index 0000000..b3942b4 Binary files /dev/null and b/assets/emoticons/shock_1x1.tga differ diff --git a/assets/emoticons/shotgun_2x1.tga b/assets/emoticons/shotgun_2x1.tga new file mode 100755 index 0000000..32e1de1 Binary files /dev/null and b/assets/emoticons/shotgun_2x1.tga differ diff --git a/assets/emoticons/shotgunshot1_2x1.tga b/assets/emoticons/shotgunshot1_2x1.tga new file mode 100644 index 0000000..08ab053 Binary files /dev/null and b/assets/emoticons/shotgunshot1_2x1.tga differ diff --git a/assets/emoticons/shout_1x1.tga b/assets/emoticons/shout_1x1.tga new file mode 100755 index 0000000..d9b3e29 Binary files /dev/null and b/assets/emoticons/shout_1x1.tga differ diff --git a/assets/emoticons/shut-mouth_1x1.tga b/assets/emoticons/shut-mouth_1x1.tga new file mode 100755 index 0000000..0bf4403 Binary files /dev/null and b/assets/emoticons/shut-mouth_1x1.tga differ diff --git a/assets/emoticons/sick_1x1.tga b/assets/emoticons/sick_1x1.tga new file mode 100755 index 0000000..0064a23 Binary files /dev/null and b/assets/emoticons/sick_1x1.tga differ diff --git a/assets/emoticons/sidefrown_1x1.tga b/assets/emoticons/sidefrown_1x1.tga new file mode 100755 index 0000000..b262d9e Binary files /dev/null and b/assets/emoticons/sidefrown_1x1.tga differ diff --git a/assets/emoticons/silly_1x1.tga b/assets/emoticons/silly_1x1.tga new file mode 100755 index 0000000..780a506 Binary files /dev/null and b/assets/emoticons/silly_1x1.tga differ diff --git a/assets/emoticons/sinister_1x1.tga b/assets/emoticons/sinister_1x1.tga new file mode 100755 index 0000000..7e68c36 Binary files /dev/null and b/assets/emoticons/sinister_1x1.tga differ diff --git a/assets/emoticons/skeleton_1x1.tga b/assets/emoticons/skeleton_1x1.tga new file mode 100755 index 0000000..355da3e Binary files /dev/null and b/assets/emoticons/skeleton_1x1.tga differ diff --git a/assets/emoticons/skeletor_2x1.tga b/assets/emoticons/skeletor_2x1.tga new file mode 100644 index 0000000..2e54527 Binary files /dev/null and b/assets/emoticons/skeletor_2x1.tga differ diff --git a/assets/emoticons/skywalker_1x1.tga b/assets/emoticons/skywalker_1x1.tga new file mode 100755 index 0000000..07c298b Binary files /dev/null and b/assets/emoticons/skywalker_1x1.tga differ diff --git a/assets/emoticons/sleepy_1x1.tga b/assets/emoticons/sleepy_1x1.tga new file mode 100755 index 0000000..6c050b8 Binary files /dev/null and b/assets/emoticons/sleepy_1x1.tga differ diff --git a/assets/emoticons/smile-big_1x1.tga b/assets/emoticons/smile-big_1x1.tga new file mode 100755 index 0000000..00b0749 Binary files /dev/null and b/assets/emoticons/smile-big_1x1.tga differ diff --git a/assets/emoticons/smile_1x1.tga b/assets/emoticons/smile_1x1.tga new file mode 100755 index 0000000..9d87c47 Binary files /dev/null and b/assets/emoticons/smile_1x1.tga differ diff --git a/assets/emoticons/smirk_1x1.tga b/assets/emoticons/smirk_1x1.tga new file mode 100755 index 0000000..1522ef1 Binary files /dev/null and b/assets/emoticons/smirk_1x1.tga differ diff --git a/assets/emoticons/snail_1x1.tga b/assets/emoticons/snail_1x1.tga new file mode 100755 index 0000000..efd8c33 Binary files /dev/null and b/assets/emoticons/snail_1x1.tga differ diff --git a/assets/emoticons/snicker_1x1.tga b/assets/emoticons/snicker_1x1.tga new file mode 100755 index 0000000..a7e3f1d Binary files /dev/null and b/assets/emoticons/snicker_1x1.tga differ diff --git a/assets/emoticons/snowman_1x1.tga b/assets/emoticons/snowman_1x1.tga new file mode 100755 index 0000000..7a23a71 Binary files /dev/null and b/assets/emoticons/snowman_1x1.tga differ diff --git a/assets/emoticons/soccerball_1x1.tga b/assets/emoticons/soccerball_1x1.tga new file mode 100755 index 0000000..41a9186 Binary files /dev/null and b/assets/emoticons/soccerball_1x1.tga differ diff --git a/assets/emoticons/soda_1x1.tga b/assets/emoticons/soda_1x1.tga new file mode 100755 index 0000000..232a83d Binary files /dev/null and b/assets/emoticons/soda_1x1.tga differ diff --git a/assets/emoticons/soh2_1x1.tga b/assets/emoticons/soh2_1x1.tga new file mode 100644 index 0000000..f0adbf8 Binary files /dev/null and b/assets/emoticons/soh2_1x1.tga differ diff --git a/assets/emoticons/soh_1x1.tga b/assets/emoticons/soh_1x1.tga new file mode 100755 index 0000000..3bcfe06 Binary files /dev/null and b/assets/emoticons/soh_1x1.tga differ diff --git a/assets/emoticons/soldier_1x1.tga b/assets/emoticons/soldier_1x1.tga new file mode 100755 index 0000000..e310b69 Binary files /dev/null and b/assets/emoticons/soldier_1x1.tga differ diff --git a/assets/emoticons/spam_1x1.tga b/assets/emoticons/spam_1x1.tga new file mode 100755 index 0000000..85bcda4 Binary files /dev/null and b/assets/emoticons/spam_1x1.tga differ diff --git a/assets/emoticons/squirrel_2x1.tga b/assets/emoticons/squirrel_2x1.tga new file mode 100644 index 0000000..d332e11 Binary files /dev/null and b/assets/emoticons/squirrel_2x1.tga differ diff --git a/assets/emoticons/star_1x1.tga b/assets/emoticons/star_1x1.tga new file mode 100755 index 0000000..030e210 Binary files /dev/null and b/assets/emoticons/star_1x1.tga differ diff --git a/assets/emoticons/starving_1x1.tga b/assets/emoticons/starving_1x1.tga new file mode 100755 index 0000000..2e34ec8 Binary files /dev/null and b/assets/emoticons/starving_1x1.tga differ diff --git a/assets/emoticons/stop_1x1.tga b/assets/emoticons/stop_1x1.tga new file mode 100755 index 0000000..7bc5735 Binary files /dev/null and b/assets/emoticons/stop_1x1.tga differ diff --git a/assets/emoticons/struggle_1x1.tga b/assets/emoticons/struggle_1x1.tga new file mode 100755 index 0000000..5e43894 Binary files /dev/null and b/assets/emoticons/struggle_1x1.tga differ diff --git a/assets/emoticons/sun_1x1.tga b/assets/emoticons/sun_1x1.tga new file mode 100755 index 0000000..bde282a Binary files /dev/null and b/assets/emoticons/sun_1x1.tga differ diff --git a/assets/emoticons/swatter_1x1.tga b/assets/emoticons/swatter_1x1.tga new file mode 100755 index 0000000..869cfbf Binary files /dev/null and b/assets/emoticons/swatter_1x1.tga differ diff --git a/assets/emoticons/sweat_1x1.tga b/assets/emoticons/sweat_1x1.tga new file mode 100755 index 0000000..7603cfd Binary files /dev/null and b/assets/emoticons/sweat_1x1.tga differ diff --git a/assets/emoticons/talktohand_1x1.tga b/assets/emoticons/talktohand_1x1.tga new file mode 100755 index 0000000..04439d2 Binary files /dev/null and b/assets/emoticons/talktohand_1x1.tga differ diff --git a/assets/emoticons/teamspeak_1x1.tga b/assets/emoticons/teamspeak_1x1.tga new file mode 100644 index 0000000..e4029df Binary files /dev/null and b/assets/emoticons/teamspeak_1x1.tga differ diff --git a/assets/emoticons/teeth_1x1.tga b/assets/emoticons/teeth_1x1.tga new file mode 100755 index 0000000..d2070c6 Binary files /dev/null and b/assets/emoticons/teeth_1x1.tga differ diff --git a/assets/emoticons/telenode_1x1.tga b/assets/emoticons/telenode_1x1.tga new file mode 100755 index 0000000..fce534b Binary files /dev/null and b/assets/emoticons/telenode_1x1.tga differ diff --git a/assets/emoticons/terror_1x1.tga b/assets/emoticons/terror_1x1.tga new file mode 100755 index 0000000..57f81e9 Binary files /dev/null and b/assets/emoticons/terror_1x1.tga differ diff --git a/assets/emoticons/tesla_1x1.tga b/assets/emoticons/tesla_1x1.tga new file mode 100755 index 0000000..de8a816 Binary files /dev/null and b/assets/emoticons/tesla_1x1.tga differ diff --git a/assets/emoticons/thinking_1x1.tga b/assets/emoticons/thinking_1x1.tga new file mode 100755 index 0000000..999c1be Binary files /dev/null and b/assets/emoticons/thinking_1x1.tga differ diff --git a/assets/emoticons/thorn1_1x1.tga b/assets/emoticons/thorn1_1x1.tga new file mode 100644 index 0000000..8215e6f Binary files /dev/null and b/assets/emoticons/thorn1_1x1.tga differ diff --git a/assets/emoticons/thorn2_1x1.tga b/assets/emoticons/thorn2_1x1.tga new file mode 100644 index 0000000..2ed2305 Binary files /dev/null and b/assets/emoticons/thorn2_1x1.tga differ diff --git a/assets/emoticons/thunder_1x1.tga b/assets/emoticons/thunder_1x1.tga new file mode 100755 index 0000000..d0fddde Binary files /dev/null and b/assets/emoticons/thunder_1x1.tga differ diff --git a/assets/emoticons/time-out_1x1.tga b/assets/emoticons/time-out_1x1.tga new file mode 100755 index 0000000..b32d36b Binary files /dev/null and b/assets/emoticons/time-out_1x1.tga differ diff --git a/assets/emoticons/tongue_1x1.tga b/assets/emoticons/tongue_1x1.tga new file mode 100755 index 0000000..f4dcbb8 Binary files /dev/null and b/assets/emoticons/tongue_1x1.tga differ diff --git a/assets/emoticons/trapper_1x1.tga b/assets/emoticons/trapper_1x1.tga new file mode 100755 index 0000000..b6dc1c1 Binary files /dev/null and b/assets/emoticons/trapper_1x1.tga differ diff --git a/assets/emoticons/tremble_1x1.tga b/assets/emoticons/tremble_1x1.tga new file mode 100755 index 0000000..bb9ddf4 Binary files /dev/null and b/assets/emoticons/tremble_1x1.tga differ diff --git a/assets/emoticons/turret_1x1.tga b/assets/emoticons/turret_1x1.tga new file mode 100755 index 0000000..f606ac2 Binary files /dev/null and b/assets/emoticons/turret_1x1.tga differ diff --git a/assets/emoticons/turtle_1x1.tga b/assets/emoticons/turtle_1x1.tga new file mode 100755 index 0000000..9f90849 Binary files /dev/null and b/assets/emoticons/turtle_1x1.tga differ diff --git a/assets/emoticons/tv_1x1.tga b/assets/emoticons/tv_1x1.tga new file mode 100755 index 0000000..2326254 Binary files /dev/null and b/assets/emoticons/tv_1x1.tga differ diff --git a/assets/emoticons/tyrant_1x1.tga b/assets/emoticons/tyrant_1x1.tga new file mode 100755 index 0000000..29e37b0 Binary files /dev/null and b/assets/emoticons/tyrant_1x1.tga differ diff --git a/assets/emoticons/umbrella_1x1.tga b/assets/emoticons/umbrella_1x1.tga new file mode 100755 index 0000000..49a7033 Binary files /dev/null and b/assets/emoticons/umbrella_1x1.tga differ diff --git a/assets/emoticons/uranus_1x1.tga b/assets/emoticons/uranus_1x1.tga new file mode 100755 index 0000000..6524c56 Binary files /dev/null and b/assets/emoticons/uranus_1x1.tga differ diff --git a/assets/emoticons/vampire_1x1.tga b/assets/emoticons/vampire_1x1.tga new file mode 100755 index 0000000..009c607 Binary files /dev/null and b/assets/emoticons/vampire_1x1.tga differ diff --git a/assets/emoticons/venus_1x1.tga b/assets/emoticons/venus_1x1.tga new file mode 100755 index 0000000..82d1420 Binary files /dev/null and b/assets/emoticons/venus_1x1.tga differ diff --git a/assets/emoticons/victory_1x1.tga b/assets/emoticons/victory_1x1.tga new file mode 100755 index 0000000..5ab6ed0 Binary files /dev/null and b/assets/emoticons/victory_1x1.tga differ diff --git a/assets/emoticons/waiting_1x1.tga b/assets/emoticons/waiting_1x1.tga new file mode 100755 index 0000000..f9ebe5b Binary files /dev/null and b/assets/emoticons/waiting_1x1.tga differ diff --git a/assets/emoticons/watermelon_1x1.tga b/assets/emoticons/watermelon_1x1.tga new file mode 100755 index 0000000..9c3c15e Binary files /dev/null and b/assets/emoticons/watermelon_1x1.tga differ diff --git a/assets/emoticons/waving_1x1.tga b/assets/emoticons/waving_1x1.tga new file mode 100755 index 0000000..989235f Binary files /dev/null and b/assets/emoticons/waving_1x1.tga differ diff --git a/assets/emoticons/weep_1x1.tga b/assets/emoticons/weep_1x1.tga new file mode 100755 index 0000000..8e3f83a Binary files /dev/null and b/assets/emoticons/weep_1x1.tga differ diff --git a/assets/emoticons/wilt_1x1.tga b/assets/emoticons/wilt_1x1.tga new file mode 100755 index 0000000..5766d9c Binary files /dev/null and b/assets/emoticons/wilt_1x1.tga differ diff --git a/assets/emoticons/wink_1x1.tga b/assets/emoticons/wink_1x1.tga new file mode 100755 index 0000000..f9546ca Binary files /dev/null and b/assets/emoticons/wink_1x1.tga differ diff --git a/assets/emoticons/worship_1x1.tga b/assets/emoticons/worship_1x1.tga new file mode 100755 index 0000000..b2b462c Binary files /dev/null and b/assets/emoticons/worship_1x1.tga differ diff --git a/assets/emoticons/xael_2x1.tga b/assets/emoticons/xael_2x1.tga new file mode 100755 index 0000000..9aff3e7 Binary files /dev/null and b/assets/emoticons/xael_2x1.tga differ diff --git a/assets/emoticons/xchat_1x1.tga b/assets/emoticons/xchat_1x1.tga new file mode 100644 index 0000000..1768227 Binary files /dev/null and b/assets/emoticons/xchat_1x1.tga differ diff --git a/assets/emoticons/yahoo_1x1.tga b/assets/emoticons/yahoo_1x1.tga new file mode 100644 index 0000000..24c4c46 Binary files /dev/null and b/assets/emoticons/yahoo_1x1.tga differ diff --git a/assets/emoticons/yawn_1x1.tga b/assets/emoticons/yawn_1x1.tga new file mode 100755 index 0000000..b40c543 Binary files /dev/null and b/assets/emoticons/yawn_1x1.tga differ diff --git a/assets/emoticons/yin-yang_1x1.tga b/assets/emoticons/yin-yang_1x1.tga new file mode 100755 index 0000000..0eafa5e Binary files /dev/null and b/assets/emoticons/yin-yang_1x1.tga differ diff --git a/assets/gfx/2d/blip.tga b/assets/gfx/2d/blip.tga new file mode 100644 index 0000000..60be315 Binary files /dev/null and b/assets/gfx/2d/blip.tga differ diff --git a/assets/gfx/2d/ch_acircle.tga b/assets/gfx/2d/ch_acircle.tga new file mode 100644 index 0000000..36f4294 Binary files /dev/null and b/assets/gfx/2d/ch_acircle.tga differ diff --git a/assets/gfx/2d/ch_adot.tga b/assets/gfx/2d/ch_adot.tga new file mode 100644 index 0000000..0411d4e Binary files /dev/null and b/assets/gfx/2d/ch_adot.tga differ diff --git a/assets/gfx/2d/ch_afriendly.tga b/assets/gfx/2d/ch_afriendly.tga new file mode 100644 index 0000000..068bd99 Binary files /dev/null and b/assets/gfx/2d/ch_afriendly.tga differ diff --git a/assets/gfx/2d/ch_aheadshot.tga b/assets/gfx/2d/ch_aheadshot.tga new file mode 100644 index 0000000..a9dfdcb Binary files /dev/null and b/assets/gfx/2d/ch_aheadshot.tga differ diff --git a/assets/gfx/2d/ch_circle.tga b/assets/gfx/2d/ch_circle.tga new file mode 100644 index 0000000..19729a2 Binary files /dev/null and b/assets/gfx/2d/ch_circle.tga differ diff --git a/assets/gfx/2d/ch_circlehit.tga b/assets/gfx/2d/ch_circlehit.tga new file mode 100644 index 0000000..2a94df6 Binary files /dev/null and b/assets/gfx/2d/ch_circlehit.tga differ diff --git a/assets/gfx/2d/ch_dot.tga b/assets/gfx/2d/ch_dot.tga new file mode 100644 index 0000000..b9c490b Binary files /dev/null and b/assets/gfx/2d/ch_dot.tga differ diff --git a/assets/gfx/2d/ch_dothit.tga b/assets/gfx/2d/ch_dothit.tga new file mode 100644 index 0000000..0701301 Binary files /dev/null and b/assets/gfx/2d/ch_dothit.tga differ diff --git a/assets/gfx/2d/ch_friendly.tga b/assets/gfx/2d/ch_friendly.tga new file mode 100644 index 0000000..655bf27 Binary files /dev/null and b/assets/gfx/2d/ch_friendly.tga differ diff --git a/assets/gfx/2d/digital/0.tga b/assets/gfx/2d/digital/0.tga new file mode 100644 index 0000000..750a333 Binary files /dev/null and b/assets/gfx/2d/digital/0.tga differ diff --git a/assets/gfx/2d/digital/1.tga b/assets/gfx/2d/digital/1.tga new file mode 100644 index 0000000..4e07905 Binary files /dev/null and b/assets/gfx/2d/digital/1.tga differ diff --git a/assets/gfx/2d/digital/2.tga b/assets/gfx/2d/digital/2.tga new file mode 100644 index 0000000..cf909c4 Binary files /dev/null and b/assets/gfx/2d/digital/2.tga differ diff --git a/assets/gfx/2d/digital/3.tga b/assets/gfx/2d/digital/3.tga new file mode 100644 index 0000000..1cad2b4 Binary files /dev/null and b/assets/gfx/2d/digital/3.tga differ diff --git a/assets/gfx/2d/digital/4.tga b/assets/gfx/2d/digital/4.tga new file mode 100644 index 0000000..9ca9d37 Binary files /dev/null and b/assets/gfx/2d/digital/4.tga differ diff --git a/assets/gfx/2d/digital/5.tga b/assets/gfx/2d/digital/5.tga new file mode 100644 index 0000000..0cb7f4d Binary files /dev/null and b/assets/gfx/2d/digital/5.tga differ diff --git a/assets/gfx/2d/digital/6.tga b/assets/gfx/2d/digital/6.tga new file mode 100644 index 0000000..021528e Binary files /dev/null and b/assets/gfx/2d/digital/6.tga differ diff --git a/assets/gfx/2d/digital/7.tga b/assets/gfx/2d/digital/7.tga new file mode 100644 index 0000000..bd38da7 Binary files /dev/null and b/assets/gfx/2d/digital/7.tga differ diff --git a/assets/gfx/2d/digital/8.tga b/assets/gfx/2d/digital/8.tga new file mode 100644 index 0000000..ead132a Binary files /dev/null and b/assets/gfx/2d/digital/8.tga differ diff --git a/assets/gfx/2d/digital/9.tga b/assets/gfx/2d/digital/9.tga new file mode 100644 index 0000000..9096bb3 Binary files /dev/null and b/assets/gfx/2d/digital/9.tga differ diff --git a/assets/gfx/2d/digital/comma.tga b/assets/gfx/2d/digital/comma.tga new file mode 100644 index 0000000..6cafe71 Binary files /dev/null and b/assets/gfx/2d/digital/comma.tga differ diff --git a/assets/gfx/2d/digital/minus.tga b/assets/gfx/2d/digital/minus.tga new file mode 100644 index 0000000..d7f5540 Binary files /dev/null and b/assets/gfx/2d/digital/minus.tga differ diff --git a/assets/gfx/ckit/background.jpg b/assets/gfx/ckit/background.jpg new file mode 100644 index 0000000..3f7b67c Binary files /dev/null and b/assets/gfx/ckit/background.jpg differ diff --git a/assets/gfx/ckit/icon_bp.tga b/assets/gfx/ckit/icon_bp.tga new file mode 100644 index 0000000..ab2d5e4 Binary files /dev/null and b/assets/gfx/ckit/icon_bp.tga differ diff --git a/assets/gfx/ckit/icon_current.tga b/assets/gfx/ckit/icon_current.tga new file mode 100644 index 0000000..aff0b8c Binary files /dev/null and b/assets/gfx/ckit/icon_current.tga differ diff --git a/assets/gfx/ckit/icon_depth.tga b/assets/gfx/ckit/icon_depth.tga new file mode 100644 index 0000000..b53d068 Binary files /dev/null and b/assets/gfx/ckit/icon_depth.tga differ diff --git a/assets/gfx/ckit/icon_health.tga b/assets/gfx/ckit/icon_health.tga new file mode 100644 index 0000000..04cc7fd Binary files /dev/null and b/assets/gfx/ckit/icon_health.tga differ diff --git a/assets/gfx/ckit/icon_height.tga b/assets/gfx/ckit/icon_height.tga new file mode 100644 index 0000000..49e397d Binary files /dev/null and b/assets/gfx/ckit/icon_height.tga differ diff --git a/assets/gfx/ckit/icon_network.tga b/assets/gfx/ckit/icon_network.tga new file mode 100644 index 0000000..dbfc42f Binary files /dev/null and b/assets/gfx/ckit/icon_network.tga differ diff --git a/assets/gfx/ckit/icon_nopower.tga b/assets/gfx/ckit/icon_nopower.tga new file mode 100644 index 0000000..9a65acf Binary files /dev/null and b/assets/gfx/ckit/icon_nopower.tga differ diff --git a/assets/gfx/ckit/icon_nosurge.tga b/assets/gfx/ckit/icon_nosurge.tga new file mode 100644 index 0000000..e55a715 Binary files /dev/null and b/assets/gfx/ckit/icon_nosurge.tga differ diff --git a/assets/gfx/ckit/icon_off.tga b/assets/gfx/ckit/icon_off.tga new file mode 100644 index 0000000..e3f75b7 Binary files /dev/null and b/assets/gfx/ckit/icon_off.tga differ diff --git a/assets/gfx/ckit/icon_power.tga b/assets/gfx/ckit/icon_power.tga new file mode 100644 index 0000000..581f171 Binary files /dev/null and b/assets/gfx/ckit/icon_power.tga differ diff --git a/assets/gfx/ckit/icon_storedbp.tga b/assets/gfx/ckit/icon_storedbp.tga new file mode 100644 index 0000000..a466b60 Binary files /dev/null and b/assets/gfx/ckit/icon_storedbp.tga differ diff --git a/assets/gfx/ckit/icon_surge.tga b/assets/gfx/ckit/icon_surge.tga new file mode 100644 index 0000000..f1a398c Binary files /dev/null and b/assets/gfx/ckit/icon_surge.tga differ diff --git a/assets/gfx/ckit/icon_time.tga b/assets/gfx/ckit/icon_time.tga new file mode 100644 index 0000000..421c8e2 Binary files /dev/null and b/assets/gfx/ckit/icon_time.tga differ diff --git a/assets/gfx/ckit/icon_voltage.tga b/assets/gfx/ckit/icon_voltage.tga new file mode 100644 index 0000000..7385ee2 Binary files /dev/null and b/assets/gfx/ckit/icon_voltage.tga differ diff --git a/assets/gfx/ckit/icon_width.tga b/assets/gfx/ckit/icon_width.tga new file mode 100644 index 0000000..13c1622 Binary files /dev/null and b/assets/gfx/ckit/icon_width.tga differ diff --git a/assets/gfx/ckit/noise.jpg b/assets/gfx/ckit/noise.jpg new file mode 100644 index 0000000..d6d0a5f Binary files /dev/null and b/assets/gfx/ckit/noise.jpg differ diff --git a/assets/gfx/lightning/lightning01.jpg b/assets/gfx/lightning/lightning01.jpg new file mode 100644 index 0000000..b827cd2 Binary files /dev/null and b/assets/gfx/lightning/lightning01.jpg 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 Binary files /dev/null and b/assets/models/buildables/capbank/capbank.jpg differ diff --git a/assets/models/buildables/capbank/capbank.md3 b/assets/models/buildables/capbank/capbank.md3 new file mode 100644 index 0000000..8dd509f Binary files /dev/null and b/assets/models/buildables/capbank/capbank.md3 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 Binary files /dev/null and b/assets/models/buildables/capbank/capbank_lights.jpg 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 Binary files /dev/null and b/assets/models/buildables/refinery/refinery.jpg differ diff --git a/assets/models/buildables/refinery/refinery.md3 b/assets/models/buildables/refinery/refinery.md3 new file mode 100644 index 0000000..2c9a19a Binary files /dev/null and b/assets/models/buildables/refinery/refinery.md3 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 Binary files /dev/null and b/assets/models/buildables/rtg/rtg.jpg differ diff --git a/assets/models/buildables/rtg/rtg.md3 b/assets/models/buildables/rtg/rtg.md3 new file mode 100644 index 0000000..40d1878 Binary files /dev/null and b/assets/models/buildables/rtg/rtg.md3 differ diff --git a/assets/models/cuboid/concrete/concrete.jpg b/assets/models/cuboid/concrete/concrete.jpg index 2d1fac2..647f4f8 100644 Binary files a/assets/models/cuboid/concrete/concrete.jpg and b/assets/models/cuboid/concrete/concrete.jpg differ diff --git a/assets/models/cuboid/cracks.tga b/assets/models/cuboid/cracks.tga new file mode 100644 index 0000000..da5654c Binary files /dev/null and b/assets/models/cuboid/cracks.tga differ diff --git a/assets/models/cuboid/cracks_0.jpg b/assets/models/cuboid/cracks_0.jpg deleted file mode 100644 index 86b8e7b..0000000 Binary files a/assets/models/cuboid/cracks_0.jpg and /dev/null differ diff --git a/assets/models/cuboid/cracks_1.jpg b/assets/models/cuboid/cracks_1.jpg deleted file mode 100644 index 11d6cc9..0000000 Binary files a/assets/models/cuboid/cracks_1.jpg and /dev/null differ diff --git a/assets/models/cuboid/cracks_2.jpg b/assets/models/cuboid/cracks_2.jpg deleted file mode 100644 index 5f4665e..0000000 Binary files a/assets/models/cuboid/cracks_2.jpg and /dev/null differ diff --git a/assets/models/cuboid/glass/glass.jpg b/assets/models/cuboid/glass/glass.jpg index 75275e7..0d59554 100644 Binary files a/assets/models/cuboid/glass/glass.jpg and b/assets/models/cuboid/glass/glass.jpg differ diff --git a/assets/models/cuboid/ladder/test.tga b/assets/models/cuboid/ladder/test.tga new file mode 100644 index 0000000..78173ee Binary files /dev/null and b/assets/models/cuboid/ladder/test.tga differ diff --git a/assets/models/cuboid/organic/fragment.tga b/assets/models/cuboid/organic/fragment.tga index 28f12c0..45694fa 100644 Binary files a/assets/models/cuboid/organic/fragment.tga and b/assets/models/cuboid/organic/fragment.tga differ diff --git a/assets/models/cuboid/organic/organic.jpg b/assets/models/cuboid/organic/organic.jpg index 3aad4c0..3da1b63 100644 Binary files a/assets/models/cuboid/organic/organic.jpg and b/assets/models/cuboid/organic/organic.jpg differ diff --git a/assets/models/cuboid/organic/organic_fx.jpg b/assets/models/cuboid/organic/organic_fx.jpg index b2ca34e..55798a8 100644 Binary files a/assets/models/cuboid/organic/organic_fx.jpg and b/assets/models/cuboid/organic/organic_fx.jpg differ diff --git a/assets/models/cuboid/slime/fragment.tga b/assets/models/cuboid/slime/fragment.tga index f16641c..0ce4ea9 100644 Binary files a/assets/models/cuboid/slime/fragment.tga and b/assets/models/cuboid/slime/fragment.tga differ diff --git a/assets/models/cuboid/slime/slime.jpg b/assets/models/cuboid/slime/slime.jpg index 090fcaa..78c9a9b 100644 Binary files a/assets/models/cuboid/slime/slime.jpg and b/assets/models/cuboid/slime/slime.jpg 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 Binary files /dev/null and b/assets/models/weapons/ckit/ckit_background.md3 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 Binary files /dev/null and b/assets/models/weapons/ckit/ckit_bigicona.md3 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 Binary files /dev/null and b/assets/models/weapons/ckit/ckit_bigiconb.md3 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 Binary files /dev/null and b/assets/models/weapons/ckit/ckit_digit.md3 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 Binary files /dev/null and b/assets/models/weapons/ckit/ckit_icon.md3 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 Binary files /dev/null and b/assets/models/weapons/ckit/ckit_overlay.md3 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 Binary files /dev/null and b/assets/sound/buildables/human/powerzap1.wav differ diff --git a/assets/sound/buildables/human/powerzap2.wav b/assets/sound/buildables/human/powerzap2.wav new file mode 100644 index 0000000..9e5dfe1 Binary files /dev/null and b/assets/sound/buildables/human/powerzap2.wav differ diff --git a/assets/sound/buildables/human/powerzap3.wav b/assets/sound/buildables/human/powerzap3.wav new file mode 100644 index 0000000..c1b28f3 Binary files /dev/null and b/assets/sound/buildables/human/powerzap3.wav differ diff --git a/assets/sound/buildables/human/powerzap4.wav b/assets/sound/buildables/human/powerzap4.wav new file mode 100644 index 0000000..9be82bf Binary files /dev/null and b/assets/sound/buildables/human/powerzap4.wav differ diff --git a/assets/sound/buildables/human/switch.wav b/assets/sound/buildables/human/switch.wav new file mode 100644 index 0000000..49db34d Binary files /dev/null and b/assets/sound/buildables/human/switch.wav 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 Binary files /dev/null and b/assets/sound/buildables/human/unpowered_surge-old1.wav 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 Binary files /dev/null and b/assets/sound/buildables/human/unpowered_surge.wav differ diff --git a/assets/sound/buildables/refinery/idle1.wav b/assets/sound/buildables/refinery/idle1.wav new file mode 100644 index 0000000..c002946 Binary files /dev/null and b/assets/sound/buildables/refinery/idle1.wav 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 Binary files /dev/null and b/assets/sound/buildables/rtg/idle1.wav 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 Binary files /dev/null and b/assets/sound/feedback/hit.wav differ diff --git a/assets/ui/assets/human/scanner.tga b/assets/ui/assets/human/scanner.tga new file mode 100644 index 0000000..b0aeccc Binary files /dev/null and b/assets/ui/assets/human/scanner.tga differ diff --git a/assets/video/ckit.roq b/assets/video/ckit.roq new file mode 100644 index 0000000..815e0a7 Binary files /dev/null and b/assets/video/ckit.roq 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;iverticalMargin-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 ] ); } } @@ -1618,28 +1689,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( ¢->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,589 +111,715 @@ gentity_t *G_CheckSpawnPoint( int spawnNum, const vec3_t origin, return NULL; } -#define POWER_REFRESH_TIME 2000 +/* +================== +G_GetBuildPoints + +Get the number of build points from a position +================== +*/ +int G_GetBuildPoints( const vec3_t pos, team_t team ) +{ + if( G_TimeTilSuddenDeath( ) <= 0 ) + { + return 0; + } + else if( team == TEAM_ALIENS ) + { + return level.alienBuildPoints; + } + else if( team == TEAM_HUMANS ) + { + return 0xDEADBEE; //humans use the material system + } + + return 0; +} /* ================ -G_FindPower +G_IsDCCBuilt -attempt to find power for self, return qtrue if successful +See if any powered DCC exists ================ */ -qboolean G_FindPower( gentity_t *self, qboolean searchUnspawned ) +qboolean G_IsDCCBuilt( void ) { - 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; + 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->powered && cache->health >= 0 ) + return qtrue; - // Reactor is always powered - if( self->s.modelindex == BA_H_REACTOR ) + for( i = MAX_CLIENTS, ent = g_entities + i; i < level.num_entities; i++, ent++ ) { - self->parentNode = self; + if( ent->s.eType != ET_BUILDABLE ) + continue; + + if( ent->s.modelindex != BA_H_DCC ) + continue; + + if( !ent->spawned ) + continue; + + if( ent->health <= 0 ) + continue; + + if( !ent->powered ) + continue; + + cache = ent; return qtrue; } - // Handle repeaters - if( self->s.modelindex == BA_H_REPEATER ) - { - self->parentNode = G_Reactor( ); + return qfalse; +} - return self->parentNode != NULL; - } - // Iterate through entities +/* +================ +G_IsRTGBuilt + +See if any RTG exists +================ +*/ +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 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; + if( ent->s.modelindex != BA_H_RTG ) + continue; - powerEntity = ent2->parentNode; + if( !ent->spawned ) + continue; - if( powerEntity && powerEntity->s.modelindex == BA_H_REACTOR && ( powerEntity == ent ) ) - { - buildPoints -= BG_Buildable( ent2->s.modelindex, ent2->cuboidSize )->buildPoints; - } - } + if( ent->health <= 0 ) + continue; - buildPoints -= level.humanBuildPointQueue; + cache = ent; - buildPoints -= BG_Buildable( self->s.modelindex, self->cuboidSize )->buildPoints; + return qtrue; + } - if( buildPoints >= 0 ) - { - self->parentNode = ent; - return qtrue; - } - else - { - // a buildable can still be built if it shares BP from two zones + return qfalse; +} - // TODO: handle combined power zones here - } - } +/* +================ +G_Overmind - // 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 +Since there's only one overmind and we quite often want to find it, cache the +results, but check it for validity each time - if( self->s.modelindex != BA_NONE ) - { - int buildPoints = g_humanRepeaterBuildPoints.integer; +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 ); - // Scan the buildables in the repeater zone - for( j = MAX_CLIENTS, ent2 = g_entities + j; j < level.num_entities; j++, ent2++ ) - { - gentity_t *powerEntity; +gentity_t *G_Overmind( void ) +{ + static gentity_t *om; - if( ent2->s.eType != ET_BUILDABLE ) - continue; + // If cache becomes invalid renew it + if( !om || om->s.eType != ET_BUILDABLE || om->s.modelindex != BA_A_OVERMIND ) + om = G_FindBuildable( BA_A_OVERMIND ); - if( ent2 == self ) - continue; + // If we found it and it's alive, return it + if( om && om->spawned && om->health > 0 ) + return om; - powerEntity = ent2->parentNode; + return NULL; +} - if( powerEntity && powerEntity->s.modelindex == BA_H_REPEATER && ( powerEntity == ent ) ) - { - buildPoints -= BG_Buildable( ent2->s.modelindex, ent->cuboidSize )->buildPoints; - } - } +/* +================ +G_FindCreep - if( ent->usesBuildPointZone && level.buildPointZones[ ent->buildPointZone ].active ) - buildPoints -= level.buildPointZones[ ent->buildPointZone ].queuedBuildPoints; +attempt to find creep for self, return qtrue if successful +================ +*/ +qboolean G_FindCreep( gentity_t *self ) +{ + int i; + gentity_t *ent; + gentity_t *closestSpawn = NULL; + int distance = 0; + int minDistance = 10000; + vec3_t temp_v; - buildPoints -= BG_Buildable( self->s.modelindex, self->cuboidSize )->buildPoints; + //don't check for creep if flying through the air + if( self->s.groundEntityNum == -1 ) + return qtrue; - if( buildPoints >= 0 ) - { - closestPower = ent; - minDistance = distance; - } - else - { - // a buildable can still be built if it shares BP from two zones + //if self does not have a parentNode or it's parentNode is invalid find a new one + if( self->client || self->parentNode == NULL || !self->parentNode->inuse || + self->parentNode->health <= 0 ) + { + for( i = MAX_CLIENTS, ent = g_entities + i; i < level.num_entities; i++, ent++ ) + { + if( ent->s.eType != ET_BUILDABLE ) + continue; - // TODO: handle combined power zones here - } - } - else + if( ( ent->s.modelindex == BA_A_SPAWN || + ent->s.modelindex == BA_A_OVERMIND ) && + ent->spawned && ent->health > 0 ) + { + VectorSubtract( self->s.origin, ent->s.origin, temp_v ); + distance = VectorLength( temp_v ); + if( distance < minDistance ) { - // Dummy buildables don't need to look for zones - closestPower = ent; + closestSpawn = ent; minDistance = distance; } } } + + if( minDistance <= CREEP_BASESIZE ) + { + if( !self->client ) + self->parentNode = closestSpawn; + return qtrue; + } + else + return qfalse; } - self->parentNode = closestPower; - return self->parentNode != NULL; + if( self->client ) + return qfalse; + + //if we haven't returned by now then we must already have a valid parent + return qtrue; } /* ================ -G_PowerEntityForPoint +G_IsCreepHere -Simple wrapper to G_FindPower to find the entity providing -power for the specified point +simple wrapper to G_FindCreep to check if a location has creep ================ */ -gentity_t *G_PowerEntityForPoint( const vec3_t origin ) +static qboolean G_IsCreepHere( vec3_t origin ) { gentity_t dummy; + memset( &dummy, 0, sizeof( gentity_t ) ); + 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; + return G_FindCreep( &dummy ); } /* ================ -G_IsPowered +G_CreepSlow -Check if a location has power, returning the entity type -that is providing it +Set any nearby humans' SS_CREEPSLOWED flag ================ */ -buildable_t G_IsPowered( vec3_t origin ) +static void G_CreepSlow( gentity_t *self ) { - gentity_t *ent = G_PowerEntityForPoint( origin ); - - if( ent ) - return ent->s.modelindex; - else - return BA_NONE; -} + int entityList[ MAX_GENTITIES ]; + vec3_t range; + vec3_t mins, maxs; + int i, num; + gentity_t *enemy; + buildable_t buildable = self->s.modelindex; + float creepSize = (float)BG_Buildable( buildable, self->cuboidSize )->creepSize; + VectorSet( range, creepSize, creepSize, creepSize ); -/* -================== -G_GetBuildPoints + VectorAdd( self->s.origin, range, maxs ); + VectorSubtract( self->s.origin, range, mins ); -Get the number of build points from a position -================== -*/ -int G_GetBuildPoints( const vec3_t pos, team_t team ) -{ - if( G_TimeTilSuddenDeath( ) <= 0 ) - { - return 0; - } - else if( team == TEAM_ALIENS ) - { - return level.alienBuildPoints; - } - else if( team == TEAM_HUMANS ) + //find humans + num = trap_EntitiesInBox( mins, maxs, entityList, MAX_GENTITIES ); + for( i = 0; i < num; i++ ) { - gentity_t *powerPoint = G_PowerEntityForPoint( pos ); + enemy = &g_entities[ entityList[ i ] ]; - if( powerPoint && powerPoint->s.modelindex == BA_H_REACTOR ) - return level.humanBuildPoints; + if( enemy->flags & FL_NOTARGET ) + continue; - if( powerPoint && powerPoint->s.modelindex == BA_H_REPEATER && - powerPoint->usesBuildPointZone && level.buildPointZones[ powerPoint->buildPointZone ].active ) + if( enemy->client && enemy->client->ps.stats[ STAT_TEAM ] == TEAM_HUMANS && + enemy->client->ps.groundEntityNum != ENTITYNUM_NONE ) { - return level.buildPointZones[ powerPoint->buildPointZone ].totalBuildPoints - - level.buildPointZones[ powerPoint->buildPointZone ].queuedBuildPoints; + enemy->client->ps.stats[ STAT_STATE ] |= SS_CREEPSLOWED; + enemy->client->lastCreepSlowTime = level.time; } - - // Return the BP of the main zone by default - return level.humanBuildPoints; } - - return 0; } /* -================== -G_GetMarkedBuildPoints - -Get the number of marked build points from a position -================== +================ +G_ScanPowerGrid + +Recursively finds all power entities reachable from the specified entity +================ */ -int G_GetMarkedBuildPoints( const vec3_t pos, team_t team ) +static struct { - gentity_t *ent; - int i; - int sum = 0; + int networkID; + + gentity_t *load[ MAX_GENTITIES ]; + int loadCount; + + gentity_t *sources[ MAX_GENTITIES ]; + int sourceCount; + + qboolean visited[ MAX_GENTITIES ]; +} grid; - if( G_TimeTilSuddenDeath( ) <= 0 ) - return 0; +void G_ScanPowerGrid( gentity_t *this ) +{ + int i; + int nextList[ MAX_GENTITIES ], nextCount; + gentity_t *next; + vec3_t mins, maxs; + float range; - if( !g_markDeconstruct.integer ) - return 0; + 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 = MAX_CLIENTS, ent = g_entities + i; i < level.num_entities; i++, ent++ ) + for( i = 0; i < 3; i++ ) { - if( ent->s.eType != ET_BUILDABLE ) + 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; - - if( team == TEAM_HUMANS && - ent->s.modelindex != BA_H_REACTOR && - ent->s.modelindex != BA_H_REPEATER && - ent->parentNode != G_PowerEntityForPoint( pos ) ) + 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( !ent->inuse ) + if( next->health <= 0 ) continue; - - if( ent->health <= 0 ) + if( next->buildableTeam != TEAM_HUMANS ) continue; - - if( ent->buildableTeam != team ) + + //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( ent->deconstruct ) - sum += BG_Buildable( ent->s.modelindex, ent->cuboidSize )->buildPoints; + 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; } - - return sum; } + /* -================== -G_InPowerZone +================ +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 | + +--(-+)--/\/\/-->-+ +--/\/\/--+ -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 ) +void G_CalculatePowerGrid( void ) { - int i; - gentity_t *ent; - int distance; - vec3_t temp_v; + int i, j; + gentity_t *ent; - for( i = MAX_CLIENTS, ent = g_entities + i; i < level.num_entities; i++, 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++ ) { - if( ent->s.eType != ET_BUILDABLE ) - continue; - - if( ent == self ) - continue; - - if( !ent->spawned ) - continue; - - if( ent->health <= 0 ) - 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 ); + 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; - 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; - } + // 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; } - - return NULL; } /* ================ -G_FindDCC +G_UpdatePowerGrid -attempt to find a controlling DCC for self, return number found +Recalculate the entire power grid ================ */ -int G_FindDCC( gentity_t *self ) +void G_UpdatePowerGrid( float dt ) { - int i; + int i; gentity_t *ent; - int distance = 0; - vec3_t temp_v; - int foundDCC = 0; - if( self->buildableTeam != TEAM_HUMANS ) - return 0; + // reset all ckits + for( i = 0; i < MAX_CLIENTS; i++ ) + g_entities[ i ].powerNetwork = 0; - //iterate through entities - for( i = MAX_CLIENTS, ent = g_entities + i; i < level.num_entities && foundDCC < MAX_DCS_PER_BUILDABLE; i++, ent++ ) + // 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; - //if entity is a dcc calculate the distance to it - if( ent->s.modelindex == BA_H_DCC && ent->spawned ) + ent->powerNetwork = 0; + ent->current = 0.0f; + + if( !ent->spawned ) { - VectorSubtract( self->s.origin, ent->s.origin, temp_v ); - distance = VectorLength( temp_v ); - if( distance < DC_RANGE && ent->powered ) - { - foundDCC++; - } + 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; } - return foundDCC; -} + // 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; -/* -================ -G_IsDCCBuilt + // unique network id + grid.networkID = ent->s.number; + ent->powerNetwork = grid.networkID; -See if any powered DCC exists -================ -*/ -qboolean G_IsDCCBuilt( void ) -{ - int i; - gentity_t *ent; + // traverse the world and find all reachable power entities + grid.loadCount = 0; + grid.sourceCount = 0; - for( i = MAX_CLIENTS, ent = g_entities + i; i < level.num_entities; i++, ent++ ) + // 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->s.modelindex != BA_H_DCC ) + if( ent->buildableTeam != TEAM_HUMANS ) continue; - if( !ent->spawned ) - continue; + if( ent->isPowerSource ) + { + if( ent->active && ent->s.modelindex == BA_H_CAPBANK ) + ent->voltage -= ent->current * dt / CAPBANK_CAPACITY; - if( ent->health <= 0 ) - continue; + //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; - return qtrue; + chance = 1.0f - chance; + if( random() > chance ) + G_AddEvent( ent, EV_POWER_ZAP, 0 ); + } + } + else + ent->voltage = ent->current * ent->resistance; } - - return qfalse; } /* ================ -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 +G_SetupPowerEntity -The code here will break if more than one reactor or overmind is allowed, even -if one of them is dead/unspawned +Called when a Human buildable finishes spawning and needs power grid +related variables to be set accordingly ================ */ -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 ) +void G_SetupPowerEntity( gentity_t *built ) { - static gentity_t *om; - - // If cache becomes invalid renew it - if( !om || om->s.eType != ET_BUILDABLE || om->s.modelindex != BA_A_OVERMIND ) - om = G_FindBuildable( BA_A_OVERMIND ); - - // If we found it and it's alive, return it - if( om && om->spawned && om->health > 0 ) - return om; + 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; - return NULL; + 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_FindCreep +G_PowerForPoint -attempt to find creep for self, return qtrue if successful +Returns to which network ID this point belongs ================ */ -qboolean G_FindCreep( gentity_t *self ) + +int G_PowerForPoint( vec3_t point ) { - int i; + int i; + int list[ MAX_GENTITIES ], count; gentity_t *ent; - gentity_t *closestSpawn = NULL; - int distance = 0; - int minDistance = 10000; - vec3_t temp_v; + vec3_t mins, maxs; + float range; +/* + switch( this->s.modelindex ) + { - //don't check for creep if flying through the air - if( self->s.groundEntityNum == -1 ) - return qtrue; + }*/ + range = REACTOR_BASESIZE; - //if self does not have a parentNode or it's parentNode is invalid find a new one - if( self->client || self->parentNode == NULL || !self->parentNode->inuse || - self->parentNode->health <= 0 ) + for( i = 0; i < 3; i++ ) { - for( i = MAX_CLIENTS, ent = g_entities + i; i < level.num_entities; i++, ent++ ) + 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 ) { - if( ent->s.eType != ET_BUILDABLE ) + 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( ( ent->s.modelindex == BA_A_SPAWN || - ent->s.modelindex == BA_A_OVERMIND ) && - ent->spawned && ent->health > 0 ) - { - VectorSubtract( self->s.origin, ent->s.origin, temp_v ); - distance = VectorLength( temp_v ); - if( distance < minDistance ) - { - closestSpawn = ent; - minDistance = distance; - } - } } + + if( Distance( ent->s.origin, point ) > range ) + continue; - if( minDistance <= CREEP_BASESIZE ) - { - if( !self->client ) - self->parentNode = closestSpawn; - return qtrue; - } - else - return qfalse; + return ent->powerNetwork; } - - if( self->client ) - return qfalse; - - //if we haven't returned by now then we must already have a valid parent - return qtrue; + return 0; } /* ================ -G_IsCreepHere +NOTES TO G_CheckPower AND G_Surge -simple wrapper to G_FindCreep to check if a location has creep +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. ================ */ -static qboolean G_IsCreepHere( vec3_t origin ) -{ - gentity_t dummy; - - memset( &dummy, 0, sizeof( gentity_t ) ); - - dummy.parentNode = NULL; - dummy.s.modelindex = BA_NONE; - VectorCopy( origin, dummy.s.origin ); - - return G_FindCreep( &dummy ); -} /* ================ -G_CreepSlow +G_CheckPower -Set any nearby humans' SS_CREEPSLOWED flag +(Helper for Human buildable think functions) +Checks if there's enough power for the buildable to idle ================ */ -static void G_CreepSlow( gentity_t *self ) +qboolean G_CheckPower( gentity_t *self, float min_current ) { - int entityList[ MAX_GENTITIES ]; - vec3_t range; - vec3_t mins, maxs; - int i, num; - gentity_t *enemy; - buildable_t buildable = self->s.modelindex; - float creepSize = (float)BG_Buildable( buildable, self->cuboidSize )->creepSize; - - VectorSet( range, creepSize, creepSize, creepSize ); - - VectorAdd( self->s.origin, range, maxs ); - VectorSubtract( self->s.origin, range, mins ); - - //find humans - num = trap_EntitiesInBox( mins, maxs, entityList, MAX_GENTITIES ); - for( i = 0; i < num; i++ ) + self->surge = qfalse; + self->surgePowered = qfalse; + self->powered = qtrue; + + if( self->current < min_current ) { - enemy = &g_entities[ entityList[ i ] ]; + self->powered = qfalse; + return qfalse; + } + + return qtrue; +} - if( enemy->flags & FL_NOTARGET ) - continue; +/* +================ +G_Surge - if( enemy->client && enemy->client->ps.stats[ STAT_TEAM ] == TEAM_HUMANS && - enemy->client->ps.groundEntityNum != ENTITYNUM_NONE ) - { - enemy->client->ps.stats[ STAT_STATE ] |= SS_CREEPSLOWED; - enemy->client->lastCreepSlowTime = level.time; - } - } +(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; } /* @@ -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,115 +1814,83 @@ void HSpawn_Think( gentity_t *self ) //================================================================================== - - - /* ================ -HRepeater_Die +HRepeater_Think -Called when a repeater dies +Think function for Human Repeater ================ */ -static void HRepeater_Die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod ) -{ - G_SetBuildableAnim( self, BANIM_DESTROY1, qtrue ); - G_SetIdleBuildableAnim( self, BANIM_DESTROYED ); - - 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 ) - { - self->think = HSpawn_Blast; - self->nextthink = level.time + HUMAN_DETONATION_DELAY; - } - else - { - self->think = HSpawn_Disappear; - self->nextthink = level.time; //blast immediately - } +void HRepeater_Think( gentity_t *self ) +{ + self->nextthink = level.time + BG_Buildable( self->s.modelindex, NULL )->nextthink; - G_LogDestruction( self, attacker, mod ); + if( !self->spawned || self->health <= 0 ) + return; - if( self->usesBuildPointZone ) - { - buildPointZone_t *zone = &level.buildPointZones[self->buildPointZone]; + self->powered = self->active && ( self->powerNetwork != 0 ); - zone->active = qfalse; - self->usesBuildPointZone = qfalse; - } + G_IdlePowerState( self ); } + /* ================ -HRepeater_Think +HRepeater_Die -Think for human power repeater +Called when a repeater dies ================ */ -void HRepeater_Think( gentity_t *self ) +static void HRepeater_Die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod ) { - int i; - gentity_t *powerEnt; - buildPointZone_t *zone; + G_SetBuildableAnim( self, BANIM_DESTROY1, qtrue ); + G_SetIdleBuildableAnim( self, BANIM_DESTROYED ); - self->powered = G_FindPower( self, qfalse ); + self->die = nullDieFunction; + self->killedBy = attacker - g_entities; + self->s.eFlags &= ~EF_FIRING; //prevent any firing effects - powerEnt = G_InPowerZone( self ); - if( powerEnt != NULL ) + if( self->spawned ) { - // 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 ); - return; + self->think = HSpawn_Blast; + self->nextthink = level.time + HUMAN_DETONATION_DELAY; } - - G_IdlePowerState( self ); - - // Initialise the zone once the repeater has spawned - if( self->spawned && ( !self->usesBuildPointZone || !level.buildPointZones[ self->buildPointZone ].active ) ) + else { - // 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->think = HSpawn_Disappear; + self->nextthink = level.time; //blast immediately } - self->nextthink = level.time + POWER_REFRESH_TIME; + G_LogDestruction( self, attacker, mod ); } /* ================ -HRepeater_Use +HSwitchable_Use -Use for human power repeater +Use for switchable buildings ================ */ -void HRepeater_Use( gentity_t *self, gentity_t *other, gentity_t *activator ) +void HSwitchable_Use( gentity_t *self, gentity_t *other, gentity_t *activator ) { - if( self->health <= 0 || !self->spawned ) + if( !self->spawned || self->health <= 0 ) + return; + + if( !other || !other->client ) + return; + + // ckits and blasters switch the building + if( other->s.weapon == WP_HBUILD || + other->s.weapon == WP_BLASTER ) + { + self->active ^= 1; + G_AddEvent( self, EV_POWER_SWITCH, 0 ); + return; + } + + // 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; + + self->powered = self->active; + + G_IdlePowerState( self ); - if( self->dcc ) + 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 ); @@ -2938,201 +3061,6 @@ static qboolean G_BuildablesIntersect( buildable_t a, vec3_t originA, vec3_t cub return BoundsIntersect( minsA, maxsA, minsB, maxsB ); } -/* -=============== -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 @@ -3141,249 +3069,55 @@ 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; - } - - // 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++; + if( G_BuildablesIntersect( buildable, origin, cuboidSize, ent->s.modelindex, ent->s.origin, ent->cuboidSize ) ) + return IBE_NOROOM; } - - // 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 @@ + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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== + + + ti3NrlSr0mzKj7UohyWZNtG5NTZ3HJnLsC0rosIalTsg5stxOYJdWlxX47cap13jc2R/SowOUTp+ +bjVSh1idA2idbFN5okXu6EEAnyN4xeJ4FdE8ffryjH+D4/x3vXkOu+fm5HO7fQbH9edPgK2dO9qH +WvWBw/9Tn/9kjv67PJwC9t7ff+eowXvBlYPjx0AwP+H53hx3INHB8Rx89Ds+P3L8keP8/eL190d2 +oxvmN/nlQ+vjXCHvcQ++JHbOjwOksvN3/OKEZfnJfwqrms1RHy9SXo3phWrvXQ4mR0bqMf37WqnR +nbRSB/nYG/2/1SpQ6cgaed9q5eLtNn93WLTxalr49UTyrV7voS2Xj/d8ay/guxQnoPwT7+cV+8c6 ++8ga+08Le8oye10j+8sCe2qdJY3c0vSx90z8Z1esOGgy3EyH04S4eVL8R8n1j9x1R7G0Sze0ocJh +rZ6di1T5yrWYKm+I0IvGferlmIG0cbx88p+KG+ejdmD9znu3/nBurXg65jPIx86g/63b7D+boy7l +9FEO1SWXXF2qHhk9M5OR83iefHaUxaM5POczeCyHB89hk8VzPdb6zOa52mT17J/2/seCOYDcLXC7 +PdTuGGi3h9ltgXZ7qN0axtmHbq6X5/jfmJ9N6OZcEOejHhNbH3es/+epo/+hHDdi8j9tf2+Oy49N +yf2IcPDYqR86Fm/sOLzCQTiPwXkIziNQssBnHvjMBK9jh+jxl/4Djr+PUiO/2zF3ORS5U6fOp/7p +Rx9znJ8RL8eEUhXVTzvojv4WbX5MV0PYx1A+8Q+/78Ga88mDdZCPyqGNFbMJOa5BxzXsuAYew65S +wNVaKYDh3Il9shyCtCCkhiFP5dqGE5m2GpSkRItTubYcoETFAAlRzpoBs2rArBsgAUvOtR079o5j +x5+Ybbvk2h5l2w6VeZ9vm8/l29r5fIvI/WGe0si3bQxMOc64PT6vw3vP66OMW0786Seybst7sm43 +ebfHWbccer1bYvgqa2eAaXqI1uDXJvd2zbwdHD8u+3aff7vLwJWBfs/Z+rEy8b3wuQ//21T3OA8I ++FAtpB0kAEkp7czuvGHlZl/FI7KD9zgHnvclA40+XMNDwQICFyjvy39/8hky4Pumksep7PfbpZ7H +rOihuzHrbuTAS1gqexzvxlOZ76f2oWW+j512a7rycd5722nMH9qDY/+NnXZmD57Mel93Xz65+zTj +/QfMeV8y3n+gnHfOeI/fM+vdb3fOd9tpi1TXlbTKdpXuuqamjA8Qfm6ztsZ8InR4MIl/jTBj36y1 +tc6CrrmEAGZYVx6HOJ1lAN8enQXbdXhl+XJtWY96LmBVjlWcNhUZdHWqVedtGu42Z8Xeujss1t3e +rps2Wz2q2rCu4rxEUXUtjxVip8l6oizrelnZd0dny+1Gmz8GOBzHI67OnDf7U+doBywn0CmwyPEp +dO4sWnaI7YuT59N3sfo+Ws//hJ3zHXbaWdD4yWK6Z7LUSxawFQGNoHaXy+5cOcJjve+9D+jLn1ht +mIv/S1V5qZU9VOz7Z1+/e/WMtGr8F3moLsduSBctXfpcIv3fSmVofvLFO+mzx2f/4W/y8z+N//73 +Qf3rRbr45cW//Ku7+PIJ0f/wa/k9+D3KT8Lu4p5+2jaxpeGv7jc8+KdXQvqV9ob682d2l7uLX46W +U7h0tfmLOIa0j3Hkhn0YdkgYFlC4HKpAv+jDdhkm0PgxuRYufk/v1GE41cFv9KA6grsphz8yh9GH +kvxFcJfZtzFN/dIPwUvWVIytXxw3e6A/+or+R3+T62Uee3TboeTkl+hQpNstetp0KPnLWD19pnLY +dCjVyyGrmnUojw7GMZzHze47hHHf9KeMRmuN2p9Shkk3DLm1P6Vd5krWnjLYdKemyyFMrTd19C65 +cHHU5uzM+VSJP2/WwzqbOV1G55rNZvaXXiZ3zmbql7HkYNN5PD/c6Zwvx8ESbFKrH6NQik3qceuz +2/qbzaRqv3RS0a/NpGq/dFaPp2nTL51b7ZfO7XHr+36tc6vd0rlFtzZzq93SyT2ar02vMMXaKZ3i +o6bXKV7qS/CsBn/p6DtivMxjwmQFdukdaHyLSR2DFwbXEOfPmIrn/DcghnZZwpgv5RHGl9LlKtqO +/sx/FMaqoeGwl9L4jtFDZaI/b1oyIrqjTNDbow96bt+uvyiXcegW2y8FTT9ijGqmDCH9UJF5m+/0 +l2lsQftMZ+267ac5+wj8hXV/Yao0tKt/i14ddfzEF41zq4WjyVOidjiPZTW0uPkzFuzmq8a6asPA +s8+i9drHftGW9OfNJ9pL+AplYj+vLRkR3bFvRXePv2n/ta1e9hbS9muVqB/SyuUwAev8WXbC5mNb +vHShRfvY5kc/xy60hvDz5mPtJXyHMrGfl4aMhs4YD3T2+Ivmt1LCm69hsyvLEFPDrlXaGMAecrNt +YD+ve0WJuqGUh244bWezK0saspx2n740Fp4jUaxM8POmJSOiO8oEvT36oP2XrrtSewmafgR2h33o +soGUhj2mDJy167af5uwj9C+0+wtTpaFd/Vv06qjjJ75o3ZX2SSBqh3Ub2M/rXjEiNpQy0Q2nLW12 +pXbTXsJXGBP9eW3JiOiOfSu6e/xN+6/d7ErtqBL1Q3Qj2M/LZjEaNpTxwIazhtZdqf20l/AdxkR/ +XhoyGjpjPNDZ4y+a3/oBBWmrYA+1qw0LnRSa6hKfRy7QgTiO/BqbnPWR+kUCKPlFAQEbPunHphv/ +PSTy+POSMmlWPdD540QDsEaXQ36romlHhgbTXYzWkdSG2pPWfqRyWbxLpxU07cjQqEJJxToSKZGU +0QF71cxtlTLtSc2X3sVsPRk/55rD2pUaL5t3+bROpl0ZWlQqqVlXxkyWFMuinq9dWZSeo4Hmzg0d +qkdfbL64kyQq1/mqQ1Ercj7yjB3ZSNy7OpZIp4MXMzY2nnO524wdNb43Bjazp93S2dNurbOnvdL5 +O9aVN93S+dNu6fx9otWk/dK51H5t5lI7prN5rCxvOqazqR3T2TxvPf3uyWe3sKbpUjaxpb+zSd7k +d3xPkfH66T8//NVutPI/e+Iursir8Ie/PvnsHf3HaoKfNsDF/H46jKNhgmH48FMbqr4Lma3pp4SX +vkx9nLdn6fTX9xte46dX1PCvnti9QX/m24x++UTbGHLV5VbWZjNZFiks7BtZNufpYHG/sJikrya1 +0mEYN5841kPrJe94nqWDxf2e62wrjhXTx1prdEgUUZC29CGqU0877mfp4HN/hv+JpscGKDG0XdO0 +nH3w+w87Rwef46YX+u6rh/ShyxZ3Xz2Yklzcfd05OvjsvnrSd02P/4rjv3ZND9U2nxrYc3Tw2TU9 +6bumyziPc9o3nS9jPNHCGTK47Bqe9NHwP7wj5+PN/NuGNetT3n+80ndTOCRY82XSS/bpffQ4Wkr7 +vr2H7oLf7CHp53n6wmfQ+XLS99Cpn6ns+Zyjz3H4igSSjF93lz7kvPydjF+jM7T3Hb+Fvv3uyecc +ffL5Sn/Vhq63/AmmbqiLsfg9q0nfdGnhc44++UjTrV1Wn9L+q9s43fp+FBf6pksLn3P0469uhNdM +Yd/0UHh723/FQt82Mfmco++aJqkey77psTJay/umJ33bxORzjr5rOo0X44kBj5e0RvdNT/q2icnn +HH3X9Nhv1bd902GcHjXsm570bROTzzn6rulxShDCaNc01U6pJwZ80rdNTD7n6LumhyKZ/X5f135J +cc+9nJj0bROTzzn6bl8PhT8NPfK46UEPydX9Pp307X6ffM7RN03/w9A4fwdlcSiYW1Xxo1TI8AOo +kMMS6Hs1Mqi8j1mUx7N05XC/4ynqpB1+5/RK0tRFUaX/SjmiM+PI7UU1Dv4vIg7p4ksRjabTDiIi +Sa+MAfYtsjlPa4SUpFRU6XOdXq6kE3BzFRd0EzFfphyKnDocawCH8UrNEO1DtMjL5TIFmc8hsUmh +IyJ556qX3hYKTIBDIN8BdIVUPXMYKpEjTz3rFT1E+bTdODzfnHyDr8++Swtsw2Ccxk6oAS2UjO5Q +2Cd5YcYGkPTR4c1xKo/to32kTojOQOZq9PjKUFQxoNpA4NCSCv3xd0k5RHJ8YVB9p+vKefipd1DP +6c/kKzre1D+mHlZhSu4+lzDRNXKf6PsuTn7/c9tGIsxz5DEdhkcoY38+qqQlwJHQfRwT89LoND5U +uiqOQ+OlipWeMnTN3kYHXp7h/lLFB0VNkuMGhpI4VBaVXOM0CmTLtkzAzGKSK8kF8UxP2evyib4l +IXIvdany+s1D8SXOBx3tIUa8tNh968qZJkpazPQZcdKT7KTBJ01FmTS7TLW1iO590ZVTXOPP8Zct ++Aii6z4KsfhhkR90des3ls03js3peIsQvU7NmTxrsQmfseP8pAfHIjWTo84XXT/DaAGRXN1CDCUp +kbp3UA4uVhqrYZUlErf3ujsI9aWczXgY9Dh+RE+or1iceJVQNyCxm5qJuQSdA7JqMkuGsSCmaTDI +oXeYv8E7nRpavKlkYTNULZWXhWJssg6p0FmMKglCxHy5lDqIY9xBnN0Yfx9Zj8i0i0qYfFNhsTMm +oCdv/RvT4XlbDS5jHMukD9lesP7IqIUE9h2LckyiErPIrjxEHrlvD8rBVY8pj6kb5zzWk/NC54it +0X2UjxwbYpjkSk8SveRF7ESaDVrCchpbrIssGsZdi9K70URyKvWJnh0YlCgye+xmylgHsYWixFT0 +zRyjchj0nrGjU6zaXCkZm4vnGMSkxEhOqec2nL1i5NgzIV9MMCcsxeg8joIhYJmDo/9aBKpjpY5C +w74WPWNEh6H5EIE8Zr2XIKPoxs7Uvx+rhbYp6EFf1g1F4qYmEIeqAmLKzrZ2VVE/6JNBynwmDBoH +1oU4ThosiDQ+fZ6dOvGjNQqRCdGljlkPFF0WSYkTLJM16q0LdBYHTJoCRU5K3NVaKYUP8rEDWOsy +8zAkMc15EOo0D7OoN7RDm0zUIA4tLQgxl86bkgxDcB5SgkTXQVt0WQTPaIMOT7NrXAwBB1jM5g6i +UL++n6bwJuuvODhShg7Dm36YkD5nOHzCUN1BHGYliLxQD2p5hezgNVq/sUi/xGvU/GqfjkERXSr0 +OMnjO9VphCEhYpWOkMg3WlZaCSqJhz2SQ4czqk1BQK/7CrWZCmUt3RDBMeg5ycYiogtQ79kdL8QE +fY52Qm3aYhJRJop3NF8IHfElg57HuM4WQwmwpBjiYHTvo/keXMG89+gDVMMSOohVtL1BZMl4UDWh +Ow9PpSeJYlPgYlYmvs05j5E3P6lN45CYq7KBfaH17C90CfM+I62UhPtTNtxLTzx4w46ueS6FEirc +nQ07ROjNifoM0I/Z/4FEMNOrrdWxhhtJW0Jjy+kixKFkgphoOQkRx2klhFFV9ZfocP8MOnlDhDiW +G3GgC1wITYQ3A8shJvoyOfD+bJSNIjoAbXIaLGbK6Cbd+WKL8kCpCj+GzTUHIyA3Ww== + + + XiXJy4N9kQNl2GneJXWF0Rn3XO03SD3asc2pjFj0/WGAYza6L3AjIkSoZPYzELnK7qGZK6LuZ91R +g5Y5hEU0l2xHNdXriBybx7tJbO9BTNghxMB5EPlksh6Mlctirsi8C7HGAsNBJQ71tYkCXEW2mpgb ++0mtk+nz3Atck8VDA1Irpwh0QWTxEPJTFpeYeEbGkdizg7jsQRRgItYEay+XrNsss2cNsjiJcTPM +02KishHkSYgE5BURRalLysDpMcTebN7oqYreKI0NNRnEMct5EWbCII0Nk1mfIAZQH1k5yRj9cULx +ut6PwkEHiNzTVacw+K4mS7GtkLuEC6EDhRhF02Mol3AYygPUv1jrVIG6vcuIBGEwhiJDNe3QKocg +dTx9Gcv4YBwSm2nU/2GxoTWOUzLb5uVcJJ987+gCw+EOqsfhvCTODhplUnFVvPBCW47bKgSOsJ27 +Hx6zuXgoAzYPH+CPqmYXF+H6987siCGRePEHwebImxJppDEupWmbY2iCw9APNTHgXQ4ZsW1RfWnK +QE7E8SmOrqE6KIfxsUFeJlEvE4pNQriErrRhOSEgxlvV/p5jFvwJrsZwcfJ7/7bsspL5WKUVQq7u +R6VTro18dSbNkIjkYxA+XgwEWbZjbaLHyxof+noS9Z/oRcaCzAyvdlaPripbWS0U4lo4kG3twHn0 +RnbJMEFyx2iy0StE3t9CpJPkuXIIVYNt40STlxFRkklKqWKfIdBAi8yb8N2Pj62i8eEZqlumk1+V +xcxnNwJLbNUSMZiAiixzfq/CLMcEskpW0m3hvBgmuY5cMkk5uDazoYkuNgQxJtCKsNWvCQIVFWKh +o1WI2RYty53ghc6xOSEOm193FdkSfzvz0XM8ghoNhGoh2/pRxa12JpNeAdGsyzyLNidildEARJyS +FictGXZdrBb64yazPfrWZEeS0R06nGIs/0zYD7XHTj8R7Jl8SwkchpkSQRx6MT45O5UjZC9TkXIm +8+o8+a1/NOEyxH8uYMMa36PSC3mneJWrj4Y3eYUcSRljP/ZeLXAOcDgOn0LWRkHQnL0AwoF9L0xk +tU+I2YtrhvCEXVUBoovOTm2Q9SBshwCFc0q9b4M4tOqkRLMsqcNhvpz0HHFOX3ZQksZX0ujIOFRv +Ls39+Exf2NjbnadlaMLOxzp9YbHxzLQufsOnbON6x5rZUMdUu6xe1RoiDhtTbcExoyWCniBK2F9Y +6Fv62GdVFiF5gjwL0B5FfTUOxfExQA75KruamqvyMhmhXTl4WTCDODrbFw4yU50si6rmrxN1mFQh +9dztxsEOfbKrnRgfwOJbZGnY22pSOLGMWxYvGevaQ1vMIBbxJZGmO7XMrL61Qfb67uho6FDWq/cd +xEi+bCa2udMGvcsOpK5V6Jnj7HUeRHb9oV+eZRkp66FOBiATY3izKOjjRQcTT9lTjvK6ysub+uqn +v303OC+XcRtbF3p8c3NpdXNek4Yk9tno1ZAOcCl3VdnNPUoOBHrzuY687wUBMTaPnkpUzWUN/qSg +xHHSw3BcTspGPtOCPuihyKjBCPd31MGgdVphIFZbWOR1bmhs7OR+cfKD7czXxTCGP62QlfHZqfBY +DLpZW7RdY5W1yGeV9BhLfKxaX8zrQ3TRosmEdOIiauz9BZHjypjWyu74hp1jHJx4ynlBivttEAUG +RxwC2eQYtcbreBBTMflCLycO47YMNxdNUeVDvNF5C6c0ad684AkJRnG152dGZ11EkJQNDlJbREE8 +fmTyynlEEcbCorY7EU+/13ehcxO2gLQpIcL6IKsKyjVxFQOLLDhaATbdubPYIjriUmPuEAcfbM0T +RQcqr4FBjIQrfa4TPSanq9CRg2R8N440trprxYm//+iNvBa/O7k5SB9/1D+BJUM+kZZU0nXHbrfu +bZXTTg4RUnUcDSoKqDPiRRp07jlejrwUiQMMpMG2dD4byOnTzQSh5hobw+w5cio4gKmgKKwII6IF +j6bW4B0F4gImcBz4Jpm3X/zHZVfl3HmRknJs5tj4qYl61TwbWbIgx8HDExDMuuHlxq5r2n7ZLf6p +6Fi0059Bsic5qZlB9yAOxZATcYiYydVlDGCsEN0FleJsoDBXjd4wMWOjsLn3XDm0wN5c4tDhriBh +JR/mZBZlFKLn0Rxfyx7a52dGR1bRO/5/T9lzgJUwlHby8xtEZRi9RciqnNC7oslmcnDJ6iDR0B2C +SaxpTQ+reFIprOUMWEeuii6RiEHvSb1kQ8TB9GWZIURfJPpC7q3aFsdMjbBRGacqxJwaQjid/M/4 +Cteg5ln0pXX1rJIN50UsEVHcsGTKdLFBW9cPJhOyz/YrNFOvRyO1JBEk0r+yutxwPpQg5pc5hoaW +ASshmguoFR4Ahp5H7T50HzZe6mwfc0NBE/1+su0rVOuAaDBJDgmEcywmLK6plJuq94hpkFRz01q1 +78JxOIjNW+iYBFiXMSg0S2gtSGCGlHMdwkLRKLyYowWeyDNV1J3ECAUh4tBjH5NXvyGcOYPI6slz +9Ypq0JdCxHi5mGFHo4RjcyxROH1ouM3ZqhZ7k/UpxNLUn5UAM6BzzmlQmyfEOuBKV98/AjOk5lV9 +2dhmVd2ISObGdDyXCkxC1iM6m5/UiTsHqpsTJQ9at0mIIQzga4ukbkByZfb4UIigFhVzHmwHsfk4 +9ahxFMGBxsepHOZNfCekVWNyAjksg3bBGQNyHggUjPob9XjIVaMdQU2HLDuTiRy+P+h55qsDkoGd +bUr0K/EvdkRFfdklVZawT4kxQCekFIn3lAa3z+1DumXEy0VFWxKFVj6C3BQYXPFYUGiGFHLT2eFG +rMASY47lGKE+JGPLG1Q6S8fdPFvEq0d0uIvomKm8+itXbFIVyus4DmOvz0HHqc50WTl0JsPUHdpO +ixqma9HjI4bpuQy6E8Tf4rrdEmnf2qCHmMA5DfVJVVSn65/dW1ADg+4gDjbOZQbHG9FtoWL9087q +XgdymLJoi6Nntt2gTQ46pxBga0MWs2WtG0gOaQoEknCy3caxVnH+FzvRg9eXGZGLzoptQSAlivTb +0olFRQlao0FPfJpQd5MsyJpNPI5xnBEe2gHmL2fjQ4l+Jc5BF72CetHh6SfAQapC1Cg320JdpR4p +6iYdQtbRUd9Hy6pLMTZHNDQSfGIXFPipp5AtHNEj9zYcQXy0Z0QVfNCJiGIIE1hhifKRNHOIYcCJ +SuZtrohW+BiUCJ82J0bPk4acZhE9KClpSBtWM80a7DwKSIuWWbqoJzbo7LyQGaJDx4h9IU7x0iNC +y8Oq1EXtY9cPrt2UyVZxsrWJIqCvgxuxWLidhkd2IZ2NKWvwCxGDwrH0uByu8Ijl9WV1RE6HGkUG +a8JBXofpOw83qluGl+0I8U1DV2xSS2dzazjfc0tztw7RCky8mjVk2jYOtVDQCN47spJzweBG2rc2 +6OoabpLUp8RqxKED2aDrSVpthtiW9/Bf8nqRjgHfQA7MnOIUyXBNkB9ZFUiaF4/RMbbkrPBwE7OG +YFoV8GzsVusaqIWzqwQBgWLaYkNkguFENugZztVgdlKDLsVsY256Fg/bBG2VNg8WirEl+O5yNgHD +YkUGJyRd65JqRcPu6HCzYQfKlWVf05cRg1biX9RWqzljBY9t6DHs46SDIumDLvVxsOuYkbk4D8KU +MTy5OVU6PUKkXiYZo9u8puVMoCUpnXIQktpNuZ5QcAWHM4jOz0ixnIQUPvDrUufsEn45lWJHQJEx +m05KOm0kSYF8oTGEZdShpas6QLF6cYnRyAAEkxRyQ+K4xGXIfaxQWns3cIyPLeheGcqCDTn0Ilq/ +PZqnRpyRFOpSpTXaOiUVLCwOQ58bojOLoh/EYUiGTnFqU2xNO0Fe/u7JZ/3ipz+7+MP/MBtwTGPk +YyJLLQkD7MMdR8GOnOaB6wEm4kUM4lkb0AMKtNqApLrzuU/QoSSeG2pO8B0UnenYwiS0AhBuC3SV +5BZAkINDyXqEuKjgJzNA6Cz3+LihaVnfqKiIU84RfQiCZWFi6c6kv6hVGfaW6WDwH2aKmqp/jXUs +GTOAUQhwHwJe5DzHg/qD4KtiBJUonZUimA0ALHXn1q6JB/Rl0QC8fcFl6QxVAwjkrKczO2AqMHOc +YTn9PeLlJRQYZTpDziM4MrhGiUMTNE0ybLBGDC6GY5TLkTRsHjXFswSOhZgkXEy3z05NuDIWFlg8 +X8XVTYeKa+ju6ICivcdOhuOAj/fn6t9v9rKNIo1HBq4xOezqZONdJDRiEQI4P6lv2MDRQjnFdhRB +dWPCOufSL4b7m4DaphGNaA6QeaixY1vix7B10QWC+HoMT68i8giP271xiEocUlg5RLPjOFewIEI0 +9LuGlxX+2AxGQ8TcEbpiQTY5JPWLRGehliG34QJxeRLF1uGI18qhi/ObJCy8yAQzK4qviMWQ7tmp +VsfgGBuH6tWvwA6Cl0qnG37kVGLpj0GrIrq9yaJBZJWJ+7aoZYSthzQjG9wGWFwIHMQLGp4KANtW +wWNPBt3DHaWWAnWhJ/jJFN9Bkyw+D5qK6VGkjygKzygBAYOgfgga9WJwbrYaAGhofvYBaRB0rlk8 +TqJphLdQljWr0u4nuIMBUprpOI6ZdrEnetPJooEOCPpedE0PtRBZsYzZA1FiOXQiBVfnroDDgA+l +pC8HjCE78YSE/CKCKaQFTDskOnZl1dWf7ExjFyRoCrxmD5Sf23qMMehNndlJbXda/KpNkVtXDkDY +cCZa2DUl61xlMZ0MuemAZwX9O1vPYcpXExhs/ZhoiRKK4ITTqRskSZ0UHbZbhkp2sW81GZJuNSPO +XBdv70RhkzHbNPtDfLZ1he7GKmcf8kWem9KeLBWhNrWU4FnkQ9wUJN88OLApNsV5Up1jsbWaeNIp +eN2iKqUF3t0mSHLrQ5DMDwqxq+mRyL0KiJ2hklVvqyLhbcjV4KzqmWSaX2g24Iv1lKqa7rU4lR+a +v1DUl8TVUcxBz0lFHhH46UPJAHcXCzJQaEbQOnR4UWkRC53qy8CZC3GMMw5QxQ+TNwBiqYhhagEX +6L+ctIEQO6E9q6p+xesRHnNFZzldY57hYmGTsOliolBINAMUYggJhvqqKza3JUbvfIGFQmLrpc6k +zgQNtMDGSI8QhY4MgalcVMEsUE2BRbtoCvnlHYxztelkUmpCaBq0QyQvs+Zdp4YEHDCpqwW+Csoq +zFAJW4Sp5wggqVoLgdBMSXMCzszTcqdYYFM5BrgYxQ3F2UJSP5U+PyI2gW70aWBkSn5TcE5H7DIK +LorHscW86CcpODhnSu8qA1TqgvgXnc3ig1oYGgRsgieWUU9iZtGYVT2OxrltFgZZYh0iQ/U3crHK +HOdsy4xsxaLaLq9C89lkQQpxFoIGkztOgyU0HxXpycu/LeHohBBPMf/FqviYV9tbxkVdUYg0xWI0 +06DXuTMFjUJpL6GqUgi/OGMAZyAzmauuSiBfid6I87C0hKBFx6Fwr6xJkiRq+pM+1Q== + + + sNmWhUpuLmjtVeoryfAgHEGDrjiQY2ttb9at/72WMeD0z2K1O4rmzCZvCCfQ75Wu1heyHojozE7r +5pcZRHXOOooW6zwQvSsSUIOVsUtZKhHx8OTGrnudsYTKIHaZFDmCRQxRD1pT9VMGe3S12BHOISCZ +xkTqYIOLYuYxJUrNU8gpLwWjAzTBkqjWSZ8ILtXzUjDR29RuSAQdlN1exdeCfiQNopPLJ1gCSaKT +Tahs3oIaNfBL8VBC4tnb3jvIPiixg5ZS0ANAsFDJMj4zUhHQCywjFslLXnDKChwmOhkPRo+xwGJi +l4nREaTPAIEQsQj0S4iACQ+iWq5FgmDoCan9DgFPDondK11d2VESdkAvkgQjfOgwsffTQpcRGaIA +BuxoHe4FKpYkSA1GrVY9P1MzlTaKnnuv9BLV58XmptFrt+RJgpmBPnMIi3lHB5GRqDyP7M18yoBH +H1QlWzDEDG/PcBVyLsS90oE+2q5VyjGrWdHeaSGrCtZ0RDgVUxVDxUJzTqMV95l4MKIHD48YF14F +42D6aZCyVpOeVRsNvbVJZ0SvbEkkZJFvpylkWN2s5HyQCCtpIFQWAT2JGgMkDnIQZUrzC2ovIXad +zZxUAQYGWYF0W8FG2Nhu6F1k8/Ji73qiQvNMzrzQXnbMwQRbMzWxCdo/dgvCO0k7FSI8JwWo2sOR +MFb6/THdS40I0JvupB2do99MV9d3rGLPio8aqzE29Y9xSR7bAkuLoO96QjnNLS8tltZP0ZEhRHAD +RAljk7QM0QKRjB/J3FY3KAdGdj0BfdeTIviiez0d6mJKrfSe1ALWYCxNmfOa9AKtgg8uPf6TDyd6 +AvquJ8CR3dt6sLj/ER0Yjm6lD6h7RWPb6rPmb5llok6MidKPe8KuHzva6CAVkPURvalPgbNqJFOG +1gnQlUHsOCHqm3Fd89xi7Av9fk9nL6LRYw3+ffQkab07PufolOFn9BQUCHREj+prrDMTmA5a35WY +g56TSLdQDnYoNIlqHXHuivrmtELkO5ko4PhWN1R7S2XHmdPzY9hx5pxxw512sRoHMXrFnaqxRGK1 +6tcxNn+3TkDfrRPU07hX4YpM7CM6OUO0KoSloOQljbFFINiLwWLBQXpCFS2SJu8tnCedws2zBhvH +GAWXzIagYOmLoWKbuMCUA8tShlsamMHoszweh6bplD1BIhQhexGMjkwhghw6Tdwv4tIlxCE846T0 +S7kVSkal2MtBGSid1E2/NDhkTxF6g+1IprPAEHo0MbRwSCJcd5ybYIONc5aI6aCPxVeUs5ytvUsE +GRwaZZV151Zo/kJfS8EQRioe1YM5JnOkwSoniMfoffTJRkEs58lZkNRGl6wHomtKHWcK0CnWXbKs +B0I/dVkAkfF3MOImuUps4F79qBL3OE+n4HBf6DnnIHRXLBNCild0Fyyrg1wknEdNxJbzUv1D6dsW +KTshvpce1nxskho+RTSqEReCD5SK7hl+igtLy6eYK2FSt81VODXP0wmfsRYQ9LEEoVvgqKEiABE5 +1PaUvQySNUTEdUAmfdMipSawcnGensRranSdmmzuIMak6RppKD1B8bosQ5dYm4SvYZK3DRI4s5/o +4KRHyRs3eioRdPgCGTjSgs6iwerFo0TEGsISSEY2dq/Te9s1z77P9KWGmCcLzLDUEjB654yjpXgY +YqCDHlASpNGZLJK0aeA9Wh5Bu5xVU1rUZFjCzidvfy7FlwbPpD6aKD51JrLLz5xoKDlG9GalLslF +0jjkROURXLLiB+RRdFHpZakNECUTvnuzY5ql4nUKpCvCQqRjEPXe1hwAfT2sKjclBzQ+3XpYay0Q +pq9q8hF7Ro0OkFuPVlWEqwUIyH3mH3LiBLu+O7ILrSfIaukUqg5LgbTo2eDuSbDJFjFP4o6lJCZa +M0bncq2c9OQV0V401ahny4kmopSY7EXK08x9KDVnehZo+v2evi7/QnHGIHymwCeyRJJ7kfRv9A5H +XbVqVPQpAsPgZd5XgeDlU6oEvk3UoNZlr1Y3RPjATdmbOJ9m4QzBX/XGTmrMjaCROif7w482NKUs +pyWn2lk/giSy9CbWxZwaKatAPHoMczHA9qRTN9eFznFuPnjnUpXMMKJlg3hyMTGm9RjLulhTEXrw +sc89I5AZopel/EREfdMhk5baRiSWuOwKSZswcQ7iNWEZpjjnIBhMOUNnXJjAwCXjdFm8ub1BhrUJ +HRJtWqTdiv1kUKJ0AZE8kklOPoMSVWMzwSYcuJTIKteE3KYkENXqJIkzVec8cH01mYdo0LAuhaB6 +F2/QU0EueUlMhAPL8HhBMxOj1/w6ZFNyAg1So9jqRaIMZxUb2hf00WxNdog2PbZbyxpFoC0jIceG +qjroLXRh+GAMX9OaoICrxY4ZXalA76Yl4LoWR6LcSfIH2CKrvgH9XfwsfZKknpTYhQvaEEjvKvgq ++Qg45o76RmjbiDwxp9kvXoPdCk7CEZdV2PvpIKHIVq8Y+Iy8OPpQCe+POVKBR/hBqRZC2jBVkbDQ +Cw8Ar4jiLbMxYOEaysgDGEIrPMcV2i5FqUhjUKytE2+gKDmKFukADBORM7vsE6TeJatJsRuyvUgt +bz9T0QJKybFSkC2Vnq/1CdA8rdobAdpVTe3oWNVUNFFvZvzJwWfMihNsEI59+22/GPJdMDQcx5+w +BT4FiW55jmGRZA61WAgiwRheEVlu6UKGxuNVNSIQtxh9vcvRj74KrLE3UWwm9sJrbu8SR0fubafy +KEXDt6wViynmLVmjcnwWCb8d5n/tGr8inawGDW3rVoGbyFTnKsBIimGSMW4qsiYfFDttiYgqTcU0 +8kpiXJ0KVgeAVnTTyq6Ky+UN1uAKmX8/67b26apaMiKi4cSr1ZShlzVqT0Qty+rTLCVJuXhCrcn2 +GSrHEAIhWCUxrXCUFrQwdaBpFWzXrANVwlQV2czYkIKHoG+1yid0xJeEorcdlU8qg/S1DpQiH5qo +AOJS6mvdM4CMuJyiBd01RXiWo6plqYo7k6ookh8LvkFTaImISjbV8hazwMGYxs5Sw15wSkttjNuv +FjCXhCaaPO1BsDJUVeq7P1ebuYUOt0lBGRS+qaRjFNRZAFQAUjqsciqXZYiKxc7VircACtsELiUc +3Ey0Sha4pWA0cONl1tCzWs+lrBUWk+EDOH7zXB0F2oc8iyWQhPeAbwSsMM6w8oAHLBmkXONRURlB +i4iyC0YczslqwaC4J8WsZkoUl4QLAFErWJ+8HYDaQ3+WN6NALRklnyYDlD3gIhn6qi+KzdGcQ8YB +N0uvM6QYQbKdQqitXk6H4c49aN5KV6L2fFoTw6jSqySEFtzyhg+WXE5O0OtadRLJpwokeK4esSqp +j1wP0llBmqyV8RtEDTFDVKDIFXIHXQvQhpQO144zZEi0BF2q+lg0/VBRM5m9aZrj1227U6ArG3Qn +C2IzGcSVQ+vCITXDYTdRDRBWrgoxLc2qQiTSyRIS1DjS8Ed5mXxH4tAMHFl+Ko5flGigeJKcaSmp +7kV7jezf5+pPjrnAv12Bx0kWyCcNKYiblMPKGb56rrUEDmFx+Fv42EnwRLYxQBmJQEdZ6+05g/lQ +GEUQPYyFkhpA0fImGHIohxrFiaQ4RkURmhlJl1QPAZvymEUrQjLGrMKSpethqpUkdLa3CSYQVRAo +mCY2NcNKnhH+plW5KOuBjEr7Ci4Jy5EmjicLEZYpId0BAY4URSlA8CdTBJLTksWUZ4uibMlrAYti +QGyKlEOSJSmlCgZFY8MFeZa69rSIDdIdyVFvUVcuAW0hRUX6efU2EG7RkPZABHJY0APQ4ebOzppC +lotlOpOfU4pIEw4VuJT5UVEyO82lychjiRJviveiNkRuVqyBvhFQX0Qbtj0rkhGHL+vqwKAIudPC +UQWAgxlII9BgC+gu5y3NwHFUbCXTLSKNI5OYFBtzL0XF8iyvx7cXKbFPiUoRHUlYVvAbNpvIaQqu +o1RH8lZldNO3Bfqy6dseEnO/rd+d4Oi0OCCqK1lJ8218kFAfwBhVS63OTXGVXJ6vaT0s7HSNXR60 +RVSJ2MY0S7IU82r1J6h7yAOaCLl9nw9WJYkO/q5VRWfpCArLBxVcS5CR0iAEBUGprlowijAiBWmb +VjGP5H7S1OmZ5EBHoJQr2AZGud6XR0KoIt7p8EB0DPWgT/bZPodiWFM7Itltn6OBs2D2DVUwhGEM ++wZvoqoOoqW2T7WGzyaKWgxRQLEC6IkEJxOoP50FsCOK+ae2UVTanlm10iWKSqJD6vSxGYWaVFVr +INDZBQwlJRkE3/acd6NxvxRN43JfMxT7uKezhmRBwFyK2hSwrQimYbfOoMjBEi0E48OZBmdfiuYR +HvXFciQFr6sxRo1eRjlbhTnUI7YB8yKbJ30JOO9bnJ0xR+xRZ/pSdmiJRROwGmWcztG3Te/4W9PF +gHTbphf6pglOwKjlffRN03v+s2krJHTU9KRvm/Bai/4sfdv0jv/9Uj4ztxMDvtC3Taj34Tx92/SO +/2w6waN63PSkb5ugUuntvfRt0zv+1nR1F1xfhlNaHiepIl9uxjvFUShXWGghTL0Po85SChTY9LAh +8+LNN3rrEmw3zsgmpFJuist3imImIjCyTn4MhE4+LH0vm/CfU5WNvOjF680RTWIXlLWHmmObD5/H +UFclhiI61cpfWpjZ6PfHdBINsxD/5HOOPvl8dcwqSEHmXdNwUu9Ynaczn11XJ33XNFX3sgv5FroT +s2zXxDk6+OyanvRd0yjefNw0pRim9UYENHGOrnx2TU/6cdPsEqpx33STNNFd0+fpzOe46YW+a7qK +GbJruohWs2viHB18dk1P+q7pvOTUbsih2uFfNHTOwCJURSIvAKqEZMOldFOGhO/hdHOzI5z/uIpu +u6inCND2SLhN+la4TT7n6JMPmibfRM/7ppGVtmt60qPEECc+R3IQaxLBJMQc9Co6xXPtWzSRYwCM +VlGv+/GITmnnM7LK7jYP4eg0kz4oUJUqVs2MQyTR0r0Ebr1lBRUUq1RAmFiSKhiyZuh3ak0cGuTh +zEUBJkddPiwl4LQ0vSQePR6RKeZGKq6hRrSSX5JLroSIrLc2a+RzvU3ZyEXKu1g6BOi1ibk28Sjw +0hLdacJXSfqyucSPu3zY7ZXuiqRtPG63ndHv93TGre9ASufpymfXNKUCpdlybL1MsjXMTlEhA/TL +5eUrYj8aS126mOQarMNx19nt5vddPEe3jux6HiU9yLquWCrQjVOvDoEkxj6AyEXyOZAEBxLfcxWr +tMmAucO+L0zf9XG2uOtkkHLbc2YNAsP0+znuFXiZxVEseZxE1KsLyJ3KkBaOl5HTZ9dJ0HednC3u +OunkgmWT1YJA5HhyMVe0VJ7hUJbv6h2WfEwOvbvpQp2cNzCWfYtrZ8Z+0U05r1mlJiSWQfk/DSVv +HXmgsmxrPipArLNy6MwdduqibahChMUrCU2k4CWvRJT6b8ifMMc4nAFU2EGL2Te9vg== + + + ke9ByDo7qOBBiCFCN1g0kwMeguvxiBpGyfMU+UnxRfHb8m04Hp9scLKqGTCkaHipAP1U4ntil7dk +9WopbF6iSmvLO01OA4TsErMQI7xihGtpqmUrbClb8nvphnSpImVsdJrj7D3Ch6AOGi3TYCug+WZs +FdlR1wR1C54WlAYhryzXV+DlphVKPUBFjJKgAhAWd9BIb7DiE1w0zzeFoUTVLHCNEwXMZ+Ieh4gE +w1QlgAt5IEXBxshYhrofzBhMP4aGq9KosaDlxogOuAktB4l8MiBJu4AJ6+ROakst/1kI2u58qpqp +S3AL5JwVy+jpbAsu4RupuUZgLlSC5DJR0t0oYB9IvyRIIcramqUUnFbYZHAWVumYCVcVZUby8Y92 +JsjtId1L/rxwrnLnE+HUgHihzHBJO2UbzPA1FBzJWkPWdL+iSHO+/SWpnDkSDs/3FhUtayoE8XhM +33ib5MqziFHq2mtUFyCaIQWgWHKZVquGu6Fze8eq8kL/yoZVzGOqAkvFqh5tydg82kWGfA0DhltD +fmxM9rgmKwkprHeUERBCXHrcDgzmXeN/3KvqnXPSd6p6T+zUv59CsIUTZNwWQ0A8PV67bA3ZDF33 +gg5QFolwOB446cWxiTHJ1m3kLvC2bItxgwS1XqxyNMcOK/bwEn1U3qR5W+2uhV7WO9H3La5ziyNj +dJNjxDa3fAWY7HxNuXVS6VyIKGsrE5nF8bfObZaQgc2tE++OtgN+pRqx6TF41KNT3ocqNx4e7xVO +OZhmXteaR3rVD4hRsbJJTwb4QpXv8dQq/X7pCu4jIZDZWNezK8EVwFWcndUxW/qE3gEweRP65FSL +zPb+THPTEVr1FNb0kUel4wabOqv5cOKigxWqfvo80SGblJeZw7BNeZl08heRzWl0GEhaN1WIUZgT +ng918osVJSI3VHJLbgPKWG9TYfbfOD+fwhth9fU9Kl1DrMmu1CFi0Iu6FU2QnQYGjzzhFG5rJ5zS +k771JO96snZS05K24Q6nAO2jkAKpgh0hheLkIKN0UsRYCFXVLFQP0FOQHFPrfJWiN8QBF2btu/F7 +7WGqGt7culhTVYz2dhCS3YTJ2KWq1ze1qrfCe8RYU1P1laBDzSqObOjLMC49OUc/dtImgJSPhzfZ +hTha2QfEroEghYUSLkFSoCn2TjeoHpRDBkYsGNp+83JHkIqIReMma77prm+z21ZCa7t0U9GKR+Qh +KQLFoXzsrpch8DkoRNy2w6WwoiXPr/R1DHctzs54hcZX3B9pJQb0Drtkl1tRsLZowp+mmiWq27tZ +/4c957UzuxbXzqD+NWlvlKttnVFsmjczM9ltuaSQQOtLQW8yorSjYhihRMWQk1ZTRrCOmpOsU5pQ +WAAE/UCl3iiOEwtpowIIT4RoKZS3bxmTAAKkLDUBmcZG5MTACLheUWBYlYJYY8yVeK1Y0iREjpfi +MxzclRBsETzYUwlkdcMp2W1h3dsVaRN5mO1KwAVkRPcjC6yFr8Scdy55rT3AQQqxTqgLTiE3nDoi +BTUo/uj04ndkzRIkQDDbLAGQDVnkGgsMr5XGo+R8GzVF3PBtu1k3MoBHdMDJjQU8a2bP8VXAUWcz +Nr2KS5N0kxRvFeLE5uTJgGBTdvWj3jYXBfcijtpiV0Tp1ZZZ0OTPdcjmlZcBzrWMux34y7SGMN3N +hBPArxcAchWDABmjyXJ06R7AkgQuHdJGBj11rTrBAzyzW4NCNrUme2Ynv4I7J8aIkR6KBFUtOFlx +f4KHAglO99J7DWby1Ru2qlGGh3aAa7qqKaYhX+FRJzpZIVcuR2d3SpPQkvqjjPqE2MsGzAI4+ikw +QgoF5bPYNjfXmZevQKHoZFZFna6yvYAxg4wLB2gwnoEgj0oXSDgvWED7uKKJB3O9/Th5TYhhR7Dh +dBb6VhDOFs/R0RMTkJSH39UTz0a4dDIaWLHOi4ipbEu1l1GdNlLJaltLs97Jhr7mcq8tnqNzT2Yn +ixTEOT7fYtGCkEesJn2bdj75nKMfn2bRqkEfNV3h8z1uetK3TVAdwBMR49i0uk2NZqtRo3YxLhKY +lo5E2dGHMx2Uvv/D77gK0E+uftG+uH315fWbd9/+6fNnb98+vHkF6vXD1y9ebek//d2rV88eH768 +iD974i6uCAT1h7/qXSHuwl84fv7wN/rpn8Z//fug/fUiXfzy4l/+1V18Of7oD78e3aJr7S7zRXIx +801XNGbDZKYLDccyNPL9Edk3qRB1v7I4SZwMXs3u/Yr+hx5/8WfhTNJmmAzJBQQv0JEkxfGZzvBs +IbLrkYnj6IsgFjqOBzGLV/2gHAIVwxLOdGUviCTk5eWcle0Qg2jLgJCDHiUzhS7loCixNEfl1QJe +TqQY4U06s5jIVzAaBw6OCmeP4LAwoUOX6UNXrZPO5bm5xdyjtBgEzSRMWOKvMxI4qB5niwnjFkVr +N84cFRHOGrBlOuv88n7qGA+XjDfXbpJBolq7wqDGMIfZk5eB6VwPDETaQEzkO2/ANni8ySrJQZfA +OLwi6AzK55cZgycfzQlS/Gag3DssCkCKhEMtGGZ2XQrN6ZQMoR8vTq42+Bv4V52iTtwLD7NikLno +dhfysGBt3DiBEl/ICZKTToeErJnsZYERgtrrdBd0kBJUok5rzzYcpP/YmtEvR6yMiYGczUJsqYEt +ww4P1geK8GCb1IDmqqs6RljLVP2qFtkNPtewdAHDRANGWFBwbRUvs47BxOITPoJLuFkXPCGtZEME +rIosYErp15zT3GTz5Ql0ZXqyL+50foOIPix7mm76CCYqcIWP0LsOJAPlhMguCiEyPk6IECFE7AsH +BurI5gjFxCHHbLBiRWlkYqm6wxpde4lPJpeHEGPrk7NrsjopCzPEyVmXG9ca0cnXFUF3V4UKYiwV +b3JpEx15MOUakTJDxeE9ri99arGv2+BoMB+Nnmz5ZGMTCEsMYikf2KSnX17YTuJuQqV7zdsq7pIH +8Kj0htHo9pWUyEjXhjCRQc8gkp3ARHNHRbltUYQeadhJRXLjAqdgUuieASHObkhFUCZGQn0w0eqe +MD17ERWIZQiRYcPyco7aN5czviJlFMmVl0lHlpd90tXCFRQ8+ixXETCx0BnGzXFFAbyJo4zCE1FX +ONGbfHUTixCcg0ACxjHuuD65kRkwyuRAwlyIwVeMaMaa3U+UzmH3XLenooMFU0jkQtWwmJw5QY2J +uUf0O7usxCK9oE4H1M1gOgMohE51K0Bs/CWh6cLdd2EuMK45WOULx4iqYsTXJPJail4qwN0r3ZGD +ht/nKLEw4f9kYvWiI+w5z0ZJ+W9N9mgC0E7JHuTqbZVRIEaISWSPpJtXEClXxBYOhwqZzgWJ7ic9 +loWuxNBPEP1KnJx9UM6+VdsBcmgHSYM69XH22XQNrSgEcf1sIhdZZFPcEVEWAhObB9FTqE2IMeuq +5pd5epkuopgvveXDjjmIiNh1wTrHIWg+anyXxSS9q0WyXJnOl+TdK93L4ea7VPYW4tA8QGShIkR2 +SjDRYKFCb6yKEV1OaIK4VW1N54SLFye8OMzrOBmkyCoadYFun7OuqR7rdF8Ik1qFOKxiIVZJ/RnE +JTleOBRR0Whf+7rt2yBGLswufUii//hVG6ePK7wlgoNXR8ayi/6BqgogRlETndyufdAJ4Wp9MvCh +61reT9S9ShqHu7ZEXehADgkdcpPcJcpK6F3VC1F8hYlXnbHyhjvB+bA2Sg4fMRB8/nCbuauim4OI +PUfO7NCVR1filvEqtEpzkNZcQ+PR6N2rFOeqxkysorxEZ/rlSeH03nNgjA54CIpYWiOjV3rBKein +urb22pUKcc1ntp3lp88k2+2hiYtwnoIUmGL62JvJzp+AQze6oj08anF2pkvRYBYE7CU1YYSDM0Zx +hsnLmIkYkEsduWoPOHhxVEEYUeFIGQFP90okvMw5isxhdCSfE0bommsge3vVi8Yao2x1YQq7LcZ5 +b7D0zPEAxSS3UgqxibYS9ep2ZstjNkh8f42J01I9GktVDDT6e9nQMUr+Gj6LPKMyit0vHGCLR0qY +DFN6i5TmJDklxsCKXITjFByCABOlD6myqkNQBNHwI9fXlXmI5BLGKMxR5Ho/GWS5D5CJukGiGRlU +8U00vigoJTBIUpGHPRvQ+amtILSEUkdM1K6KC8Q64GpSzwjn2jPRi3CJWTJJQRQjIG48Gp1vdY54 +WYvYyPtYjsl0EHoZA6mxnGjwEPm06svkrPMuuFaeCCjPRISKS8QiJEaRzb8WXS8muXTjXme9tYYu +cIqwEIfg7LrInDbmC8tw4pwmZ2/DkwRcLWsJWyfNpe/1JInkJa7L5oMpTF/Rui79nPVlBrAwUX62 +qv38Hn84Wur6XVSMq1asRa5yRsQmprZsMiwFuprMiCz0saWp+oAOAqcoCjE21vKpW3wJtBDlRCa2 +tpi4qIxOBV+KKUTe9dKaF/eY3uEqk9DzwgH2Y4T7gYhFbbSxwoSSbYeQIW9m5nv04YDmPAr5MDFW +Pi2jnxKaZElSYooLZ8YX8YkhVzMwsQVZ4g5lf4VDyHk5cIxD8x0cGNgoxIIlNnUNus+wgGQmEbmp +mrafYPBxcSPYOBJY4DfVi0dBtGLt812ROPNMby90LRXODPXgtKbKJMnF3tb1UTwUWKx7gkcKoSUc +Z11AZ/KW1i2T40l0c2rKiWCldCFxANKZlW3JwYNEZ5PC4vllhlEIXdQ9wn2SMi40tXS6JCTKoVc3 +Z9b2OL23k5YcEjK/FDkrZmERXqZh5TDGX4g1ZrzMAwRi1Z7wKjwoh5qVLikIQgy6yOTo2vdgqgFN +bmiUj6Rw/KPRcXp4IN1ArNgDfMPv7k0fypzSWgqWe9dFyXVBvXIQSXR2UjYvw83JbLW7Fye/YH4c +QHniiChuURPVs9fMc8UFxQosb7nrQHTHFkBkddbUxBaT+hxaN53S9DIupoK2ZGUTsUwnSTTnMJWf +ybrr1RHdpIrjya9YNUr1lHf5EPvAClHjJvTmSBXmwx1E7EnWp3Q09mos6KIaBVxYhXfVK9OKqZ5H +XZtmcDbjvUmU+1Hp6gFtEgy4t/flUGFHCRRKqktp3pMULk4yXk1v+KRIGpDHc9rewTTbaTmzM4qX +lKmKU9UjogVN6MQtDZsiOgs0dPMukLDVQ5MU6RD1tAgNRAdbxM/qGkJvTrsB9ybVwBRPTqQ0V5c+ +sAf1QGeki56acK5Fjzu05NQUnxaJCDoS7dRM8+s6tnylqL2eIw3H23kh1V0xhxHcc+QS8CCGLPES +YtvVnuJ5tj5MlxMjlkAs2ge18RmWqEcZ5wgYB9XBHCo1yCeL94ydVkFH0segxOAXWRQlEkecEebg +QYvog9oZXMkrg4Ov6xGXWs96SHc90Yo0R7skw5XYBX/Kbw4dqy5nTMs67BEKNd1s0s31JmdAd3L5 +gYwYlY6ztcrZUDxHxTs1KpI4iJfBYWKATGbzY1F953qIqoyyS19eDkHV1nl8+lAXFQ== + + + 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== + + + REzQJ7JoHsa5dlvtAmbl5rruQqff62ylsophf68GOi51x0AABYJdrKOgm23ViXYFR5aSJVnXlKDw +mQi1POG+Jyk0Ams8bbTZoolJOnH3Sp/zweX6QAQilzOxhK9ziuldBDtd7+S0mIqUmRUVypAZAAAT +MdpW1qiu6luKOoFTTQYig8jJTToKXcEshphlDjjz4qzdUiyAb3k+RFTdmfLSbWO4YvZGXItcsn6Y +sOP0O2hLeYxElWIDq9YZpRYBGNN0VYyEz90U8KQZdzzsUH7XepEOStui5KYlu48vYDIUPNKSSa9X +dEoU9IEQNdwdLFdY6AquD1STQI2ZCSTSJJneLU6Nqz5hAHYK+oNuuXnd5F80+Ernqy61Y9Gym3oX +VUKaC2rnuaSoMM0So4t8vC6I7OPCAKnpjPtHvadm6nMSpw0M02rVOGeqJl+74zDAWraxNxMRSbcy +EVVri5K9PDkgDYDoZnZrLcdgmbC9LXU4+QYa46BlLNm3GsBh1v7L8JXRnSE4OpHmY/4AjQYExRyQ +9yFrYUMFV3RyGCoxzDyUXqy+GxJGzF0yznudY/WKlcumQ47s4WIKUzRQt/y5VjANasnwXT4LeAyp +xrzD0BAXrTIHEVJvGARXKl7WOAddDhhBC8F2fJldSHIfsEywVl/JUhFcXpYEKPIYZUWkBT//vJtM +dig6SH+OFysK5C1dSpIIb3+fugKVGWJyr/RshStZJdg5vihlwlmdF6vA6WLSOi3FMlaWzEkq2uMd +BieGppV89DgNFjCkchGp6Zj7tFSGyDYXsMc4l9eWngU0uilim31J17M0FYhcyvwp8owVWppQHoyI +yF6l/DkrLkocoqKdvZZkbJanEG0uyfXrdI1NdYf9xFUx/wWARqqpgu0eLLBIHmgpasXf2xcfdo1a +Qa9lS6FW42TuiJlKTgtyycGtdKOAbbeoHGaySeld/eiafxSkkKlxcEFRtpre1da6oFYppViuEzpm +0QQtqBwEI2FxipY0fYlvGhWiakxhJiNm00iphFiz7NZkkaBguJqWDOMWzIHMpVWE5L2BPdssK0yY +rJkde9R8FBNurjz8uVU/YkB80eiUQue94FmfchxLUaVBTDSLb+l6IiyTvayR8WVwvdRWE0E26xpT +ABHQ0WCBAIrnG9iZ71IQ4lGZRgv+J5RRpmmYIUgnwdptNzZMmp+cT5dvjFXP7QJQDVeR1L1dNJH2 +RPnGp5ze2OdUoi4hVR0U+eSNKeVBurrmxBgDBe46S+ImDjirvC0Qagpf60VTsm/QQ9dLeNhGJ1pl +Q0vcdVorhyoYarI0eVEdiDks5VaRXx6c1b+uBAv2qFXI9uZTSX9E1xxhlpekUC9xK/JXwAffnKa9 +U31HaA56abS8GWeGuuU6cM5eWxAlKGhF9KU4npN4K/eEvHPzdQQBHa4FxNJ2+D7xX0vV2KwA1rIG +itVJ5S6T5h8rNn8p2uEVwhlQQsT+HrkfYSlW4U3n8xI2ld3pIWm95OTOQLMk9gc/6xV6zX0noibK +ewuk+qPqNDqf3oq+c6i6og+W/RytlKATx6RFijUaweMEYYY6c+LQ0YJSuoW8eLNMnDlMj5fC1fdK +V7OOxN+c5mwuBG/RPpKJqOzrLapCAtgQxgwnNNHegPhZupeXEaqzHJKqIYTIsmwUKgYGhyyFNJty +qEhIoKWlNcJUvXKyVufpknRNsryd0XGcvk4hc8tAkMjKVp4LAoWWd0pzNFtTmeKQc8JDnMDVxG00 +j9i2loyVKAhLka9kVvpStpdsRK87aG5xejkqNlzRsjRDTlMgIzIw6NNSwptrGDyuQPJZpgwnsm92 +AwBXF5DSp23NZWlWadB3y1dtQcUfy56m5Yfg36GSsS0tlQ+8LGwuUGswGWwuqiOrEAivMXCPOti2 +PWF6b26BkFrWLCXIhRmnFEY0wOHKEpHjYtF7svnqCqoT9Z44A2hP9QmKdiNEKxQCddf3owIDRfIo +qAq0HkcAc9MHawoFR0102kKwv2/LDCHgw0QBvrAvGnUPmlYJp2+YpeBmdjsNJcw3yuEXPYRkOBRu +ulK86zpbQfoUtFB6QnZHNTCks+p/tcqlRcK1zBSEJhVapQsoxV/5UiiMGG9GIc6PYI0THAwP67ul +BBEH+zKg1GpV/U6XHhhUNamoC9DG6L6lqPJTRfggwtHGVZRLm12oJgkQ0eDmqklggK74HnfNIe7N +ah5RhQO4gnAI3Cu9AYnMR5gyUeSAly2LgUTUyYsmbJxb1eLIKrqoG04B/Gr5E9G0MZ8ssZsrPVg+ +WPM6mN2OBme1GzS275dwcNOLlaW1qrUmEvwi3twMfHF918z3mWtPO6CqJ4juwtJ1CixM0Ogff61x +WDRuWpMwZ4IVkaNBx+INVkSuVq38xC6NuCyzo8LPVuBZnchubrhsAYSphNDVVZK0STPhDVJZkyH/ +nZg/90qf+7sjp6Ba/UfiLCKK7xGr67lpjDW66a1kdyJzQa0M+FboQiunTBcXBtGDmSRFG8tJs8i1 +EBcRpXosESe2nS8zSzjgKkpeMFFzP+R+LiF2TTlfqlXWWWjCzxLj0arme7smg4hZFQK+rME4KEox +zGIf0YAd06tQuQ6U1uKY1iJdl9i0mgcfaZbwVpzaoYpIpJe72enA01SunKHW4aw8zFc5JvV+SQhQ +7tRU4z3pfvGmKof13gqiT5svmxZTvTmig1xEK0R1Wc+yQ3RVobeU00VwOKuaiDQaIUbTbUoTEBJd +HghJ59c6oXUCSfws8ELnhFb24IafnkkvAx2OWqd1A+lW3u6PdHYi1pkLl5cMN7XCnNQBxEd0U3kA +N+J+6Um2Hi9cQLbqQWADWabdASyWXPUOkcb3YBgHrSDiTZOqq0Vjw+ApiQnbZSnnVSfezc8S+cH8 +Tx7wCb5hNauw54DUXGeLGu6XFXxU6MHo6vBys1CSFc9dB97qUWq+obWoW9QZUow5qBKsNibvIh1g +Hh7bdVU1eYslMtXamyIJhcI4ol20hoWmTvEaSLvNzDpP9ctQmCISqwnhoJWZSLuobqFjbfv/xd6b +Ncd5XGnC947Qf8CNI+wvmujcl/aVRdsdPQMvYdk97piYUEAgJGGMRQOCstW//svnbJmFAkUULRos +qMLdNnmYlW+uJ8/6HCluMu9dMKG3ipXB8PkwQJE2UfVThkGFGuzAdq/yW4x6Q8WiiDEUfqeKlGzg +wgITZwuHO6qMwlUruXFVmVlzr6vTRNbgFi83lf1MCvCSBXcUlaOrqurqmkAtaGaAtJb2VqLKd1HV +ilJPmKiCCMw7LA+hWwkRdWtxM9C7qrSqFBdDtKUt7UosjEtNpRuMtaKAc1KLSBeE8VI1Ptk3xgh/ +QRArogFhJYsBmg+6JGCpXCi5mVKvibdIULsBneS0PEaVqNgSVKHwfQ1yLsHcdoCijHodi+D68FUQ +D1IJC6/pgm8/iMow/RryjS9WVVRz4RD3Eg2BwLFHmok1GnLOvHYlLhe3CGJPWe+o5qSUaCGejkth +zx4kUNVxlqesT9BtEoG8JLPKuBXwDnTT4hWuDphVVc0LCqNQkmXAeK0UxWR1MDh+0k50RwOjnpJI +nqQLFWQ920flSMhG+LWc3KALNrsK2dpr0jUPxbqV/JnN5UUJLVUVNJsLJyrqkybAUCUpTCcYhOvL +EGKM9vzZeDPjruHCfQ9cEdO1+JkzeAAQgzL8EFhLIPQinQNVPbcehiyivGsKrKUs9sagGz+9DnLD +hSgPnVsds6UsUqB3igLU7LW2s5cNqstzhJx1oDzNS6bAIKlA7zXc4GEUIaF3owsqEDCLvJYeUtg1 +EM0FFaJpcmWm7E6loswsyjCZ0ewhctKg9aAbN2HIxoRbVdQTxTAq2XJU4lowoWR7vicOCc60SZAK +JLMNLzVPWVWxkky9doM012ADrXEbD87oU6NTCPGSLEsksnNP7kBTpJZUTPguU2GJlkRdNlymwW6y +OmLjivpT0iK+K+4eiBIhtuzIFi6ecVWNhYmGTl+C2sBnzAJx8KLOVHI9WQ8zboLMK/IMGECTZkqD +WDRIx8W6cPbgNXxDKvG0AoFSI0vUBFTgh1D9YdHmQC/msFTO7tQIRRuntFmNk8DxpANn9ZcCp8NI +Y0k+gvLJanhxFpEEB1abI5ivehMPPIYlQTcT9hoT8+pgy91sXiVoFQoMzZudhNa9yfkjl6jRNZQg +aKkibPPEgFEDbYkWMRs4fXq+qEHVICcAR8UqlaxsIjAgLU8kxWXvVY/3XPjiRFdDsLYJbsFOlcbK +GcAFFqOrQ2I92NC1dY1ZmC7ets4bTmvx5hrd0AqwHVWx3zSNBiucFMMhi8ceo0puFQrmCMzwpVVj +irMIEs9+QTkmBkFCJhw7U4KRqsKCoUJqLIDXmCIQs5nADVDh7XiEAtQuPqcXhEE53x0tYIkq7U07 +oB2WDtqCDEgvvAwNWe8qDFHgzYm2F3QTlTqYqK5MZ2jDWcoiBClTaN/ThH/Hf7KlmL5IQjFlYjJr +h+rWeUY5yjmwpdCI9gnikduy+wqNla20B6SLyTtyXaQkB5TnuRYmWoJ9GDnPZ1hSiqmtOmDVR4kP +Si7Yhs0Qo4tqOSJwqs3F9BrrS8Sk39JiZ0zPEmjmrb4P1ljMLRI0SIuT1TS4lCrNzSQ4z15N2w4N +afFcc5ePsTd5QhGvirNgrLCWfsXedcV6rKLP0dFU5kqFaHnJppBBUUi2HWPK6rATb1KeEfteiqsT +0U3J0JzIALPoah9vIoYSEIY5USRRE5nnQXX2pfwQ6GLcEe3xROnOtAJxXOZk7m3HhrUXAgmiLsCZ +EQG65jU5zi1lYu16mdU1uICKQAGxDLEc7fURQ8WJ0sdjpodY78wsk+Mtew0DLgZwk6zAAk3Em0XL +GbZJNaejhH5kqbglEq65LXO2wHBn9kxgVkgshp9TzgxZzlPuVj8I4CRZOam82KOtBvtOi1Yuy86F +CWYJIBJ5DtycRLHaKc5SZBekEDFSWQ8t2vI07UAlH8/XiInR5PkZngF4lqrMXUGqMN+o/Mgb7EEO +6iCNM74JC2aPVJKCR5ivBXio4woHXVbLW1E9uSx23VSdzNX84NHgxbEyTkP2KBzAJqExq4EREmTA +UcVKzfXDKlQDQrW4a8Y60Xdd60kAFsJ88Sq749wZz1lnkdaYgmhQbDmZCuGXPBS6W854pb5GyQTZ +GXySCZxUxZ6Z1Z6jCVSek6qtZy1Q7K1mQY6GTeXZMMlEKayHCZa09OzmnvK0g5bswJGQEFe0iyox +0HWz38eupg9KmGCiRg/6+fxGNeDQUfVLDxrNKoYv4xsKayX2RaEHA9pzrIQa3WeNIND4VepErcAS +OY2WUjRgUyrKYeGBFDsqPXstI7E4GrMzkBJnTgRAQFedS5lO59QtQmIGJ6S+Bl5woZEHMaSlbdUD +0AV+JbulrqqKstkZ9lCg9AqZm7OqH7OqVHZmB5zltfAp4x5UhtJ68BY2pP7P7FcvpQ== + + + 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== + + + jaBy6DxM0N1w8gQ8GvbnCacPOLnupbEGIoMoz644TLeIU+KphaGR2ec2cUtqtczgZoDgtS3irnK5 +zVLP0RIXF0TlahakOiuVVA4zZaKWH6wbOIJNNXgqf25xiBgGE4uUWa3dSmtUC/Ov3aKLG2c0Wbdp +lrabiJcaRNgMfBz4j1b/anPjotVWUqDGZkEIdV6TZrk1hTOXbAgKmlXngw4hKEnIgyZ1AshQqlS3 +CQGMlRFlpBgqOpbRRqVBONgdiWKU4te2O6oelA0Qt24w5cUCmrCSSStEGbIblIImMR6ULv1Se9DI +zWLSK9CbxZMttVOF2HR/Kcx7npymFeQXZI/tkuBG12hTK7DHONJWPlWWeLs48ksp70yVnrrWyyTW +f2X0bIWm2XFMxFkYmKMcieiVWKyCpTSWE1utqR0sqxi3NQIenJPKzpBEndZsGuxLCjvXWRA9W9mI +6q2EHjBY2K9Sw1LhZ4lUJ2lWy4ITjqp8zWuNNzWYoAenNciKFaYhIc5qNVO8r0GTdStWZ6x75osh +xV9lu1kQvJW6oPEViTab9WtLV/kSC6HwHd0CLvNS8YagxUqUxlpjpcyUxGyBU5ixlI/JHNHw8uF1 +P9GS4NBEJP6lUirZleo9YszWGARuK1Z2zFDgQMsMsqsboE99KX0pyRKlWzhJtaq9ZUaAoVLZorTM +Qp1aHZ30pqRr7Cca2sYU+MxpNfEyk8nAgod6dDUVM634qVZM0qD0A6ZqI3BNAy8I0uLlW3o+2Tjt +4LFWQJxSyK6MLkQViapVHy1az4XAeLPy0kXKrsjq1LY1G0qvlCAodiArtHTl3DMfDHSpuFPMDDRh +fmlYVd/sexNQXoNHV4vPCqe4MkEjKeNbYD7QnrVxeiDZsAHpw6rGK0YHnnOJq63sT53PvMu2X1Ub +56o1z5Ok0G6PbQ47Gqfp3PmV0jUPSFIamSU0C3RSHM1gZfoq42MY+2i2VIpkBwBTm7RCQxCUYrBX +dopolAWhlyOoNiM6GV8i7UADObHDU5KKlh1ZOVBJJmzXUG3RpKhZue+0ql+amFNZ/GWiPmVtxaRU +gIC2AWBpgH4bk9BnrE87QTILd2O9a2qhcqe6majRgyBhdINI297KzXsPJ37V5SA39ZXRJcmxmqEQ +RMkZnAWEkc+TNPhyWSYkozStCO1nTh0c+YIKJbU0magpNXXmL7UlXrQtSQ1tqdSr1UzirNtZ2bzO +RIULKhsxgxJlx3QN62wGxlBnugYijfWmupmUi8gDixMWpIxIJV1VQBZX1vYCbz72KRrmsWRbXSld +71phtilEKcBJiez/xU0ngkM19EtKG1VJuUqAfSpW8XR9ReDo9BqMqtm3s3Bk01CFlJcS3Us1KbQ1 +47af1VqS1ieGT8syKrWAS+c1mhmYSQ+vZg1mEyq66RCDKK1mJT9KyRTGPq3+WBYJuO+MMsBEMYdw +KPsyBeVhFA16olRvVZY1lDUlwz5plpiXoqX1NA7MeKnbqElETbHM0wTfroYmkSb2NYr42u9nzlS1 +WEJ43OfFEFEnpUUUiBOPIM1sn2KJKCmaFlQNKjIFDaaiOz/XJljyTGPcWYsn0GTjxiZKJiqEcjUE +00S2ZZWtZ/Qv8kLdvOFRGxcBUGgGDp0CxxvwTkyNHzENps5puCc1VodGWKJMJFqzr2k2iNuQkgLN +hBmEVlQN1LXbQzgaFhhqVrPkFnvI8jkn4mi33Ee0nCe6rcE2XRLuuuXWpVmuvZn0Sy11Hfwsa5Tc +coW1fhCIFk+ueT4YWFC+TDYq60ETQ+sKSZuc4bpUS4dJzsABq+W8LutQ1yo0Sdw8Ivzy24iwIaev +vqLnYcpVORmh8J5pD87pcdV6d1iKqPWIFS0kTgiRsgJfYgxyDynUQ76mSBDFAHXSWqN4QQcE3Z6M +MPPgVI9XaRDHSZ69YjlMiCKSSPuyVLUFfeZakN3hhSRQJ5VSXdVrpVHqZa0ph+uW9Jmg/Ba7mwqU +WziWiIlScmnJTtl+gEwOLBbSCu0JV+ZK6QqRWaxmQpngHtCfk0LJKYCebL2ED0wlrq5WCSCVJWOj +Cs1WF+OKKjl5JsZW9uBZYEIy76uCb+Zq0PLVAnYR72AZG22BTqoGDN8Y12ACz3EVq9DNmQRYJ2Pb +BnZWTEBpfLCsZ1V+++IbzFUN6aEb1ko1XtMn6tYETOirPJnrEt6ggX3AqDOOoDAFAJ7rau0jQfel +rrvK4DPrA+tuRPV7IiCkdYvQSMuq9V6ksQZQUw/qvXeu6CxmWNVSMhSN+UxQcJngKdUlBFuDvdGS +jQXR3VvfGSgySwUTPWoEtJYsBDrgtCFnA8Ur5v9d6rjwqVL/pDivsM1doy40CisXFUWiX0r6Ep1j +8jdty7noIxoXfLZipntnVh0Ak1mAxaJUEd2phVzjmrJiaCwBafQti+qfBRkBIsbRAovlP1s5xehU +2wYumYVQLaHOuIz2Na36Rphp6tPVGCPkuBcNLISZ58xWp+veG8JSVRWOHBVFiZr30TlOx4YwHXZL +lZsFSm1GPGB9hUn0iU+JbDk97vQIW88K6dosbhiLHvR5V9kUCG1OQ5rW5ckG0tbM7TiIins+jUeA +8BPLCuFRzkgwhQFE3pCBnWnZw25Pfo5mBm5r1GQOZptsHLJjeGKlqElVUVYRuiYJfM1e9wWAqrEs +Zj0vkkcycAHQi86PWIrRVU5tK1iZz6YU1q7YVJpxCEgZA89fMNAk10kmYlxbkwtpbElWg4pQWQ/B +DMkGhBeWYEtjd/CP6tb1aVbPllQBuqJ8BUND6gqVni0sihTwyVFmQU3E1whP8hriSLloQYn6hjZ2 +8MqdcVa5A2aPpo3Vc1PnTfSGM1xXvLUF7Ixuz4TYCiKlFisOhOhLE9UtenLmNNfluBLylr3uAqHN +MGxqHZcXjSDjVLCr1QIhQDeFwSnYVDcIRZgdk8JS5a75skt2d2qWd1lZUBZiVqJmyafG1nQmThSi +pmkdlChWta0WBYB90IKPVT5ewlIRjptUHlLGniZWDKQM0SvqYlYJs4xqmogm1Vz3aTofCtfFYKKi +zZTV4L/ECRd2lxncVjNnkUoXqVlW4Ex9ThZBg5aL5tYN/AlBTFPuRB1Tta2rjz07MyYVq16eneXv +A420zzOpSZbZ1A2AycnFyhzPIUTRj/JaPS97qx2RV9NDnkJ4pjIRxo8UwDjzjZl0cW9lHv7kmOJa +KihragiMcsuLqcIAiKy6RkvtLKJ3cxZW7UF8xLTZVWOLtTReRSnyBc9yalqqvgM+M6qpQOsyAq92 +tlxgVmd5yGnXfwQxrGid79XDxhi0OjgEN6/goE7ky8LpyUzUsMWywszQOvRVMzBUTcUoKlZmFY3F +op9Zc9Qx+Lrs/pxdtXOswj6QOuS8Jadz09pZeU1SBN2S7WM3rGJ1r2ZOGGViEBaYWTg1oUGCAyld +X+UWPTmJEXxFNhWQ6byGbEGm8uoo0+JkudkrnhnKi3vwXQe7ArJWQ9lMXD2KiQqql6e42QytJzNf +NL1C04+zWTGzVYFE4ynsdfEyZwYeM01Rb1YySGyKHefdtag+Kies7CQbo1oidzOnelkctTcICRXg +EFwthsxsIJvbWvBUkKPZlArf9SulTyOCVFpCaKnYEsss7ZMWXZ/Ohow6aTQjGQyWmjbqcF+JAkhU +OP7NelAQ0cLarUW4pq4OeoWpL2mN1tDqC4nV+MSOzFkHKBkUW10LZEh+H0kCUgwhHetbO1XNkjk2 +bUO6KBYuFYrV9UZVEfNxLWWolrI6hTEgubH69prZNkqy3PUN3wSKmwTNVo+Sb48QXRMWNd0CxWDa +FL5msQiI+io0KJvCLLKarywEvhjCal0h+RGOa9KtInIiHFcYFxpLIZW69EBPmPQAwUbjEMjqxUQF +LYUtv2lIsEKhNk4+nz0EFZpt0SCZNLW/6jGrtumNfQ/WwyJ2612sBv/fDOYIxK5xBqS+b/VQOVmd +iWq0nuFDpVo59LriL5RmsBnL2WtWnW9KWqXZWy9RBtZDENGnGmh4kSgnGZgkVbRjfaQXnJrSzEIu +Y5yB0TY3FakKhNAiKoXXs94WrYgshGfag1YgmM5G1CUzpU0jrlADTXhXW+3/CLk2izExRhvbNBpZ +7ks3gLQ2Mzua1V4lH/+yaEn1paX6ksK5zCrFywHua7DyoOesX1srq1gtXLp0RY+ExEZPK1kRmyfT +lhORzZ1oEA7ENSw6UTtN9kxvwGmASSV15alboVjsL83NygVpleK2UWkpbrg/q9Y6mR5Cl618mXdm +eJ8ovCVqZHOYgTklLiFQWgAZBdCiXgx6kq2HFDTmg/z+lkeiVSMrQ6QZPVs8lpV9mfXZykzJ2nr4 +Nt3KNS9lYSgH5sroBvGuUfpEtNI9USM8J87v8vhQ21nL1WJMl+o4C9FAdon48i1D43iU/+/P0ylL +7hING6LfXildcc/yiomVmgpqWreUrk/pKheaTkcxEqaciK+IoFGqCouyxNtjMLGDoi9Un4LYZaPL +Ft5FuNQ6kCgSWBcXA3EIFQ0XMDuan1OPxsSG3/rgyTIUxbXvnJ8lY6kmfjSL1adzrIe3TBiWyfko +yPWl9iC5eXDBCScJ1VzCYEpBV8oHvZc9W0YHDj3zouhMf2ZVQwcssbiQI9yG6Ud6KBbi2DhChD83 +UZpiNeK9dVh3K1m2HCVA2nYJLBMlH5rhjGIbNR+BLBdGn0Zhki5O3tK/7U40O7Ki5lp0h0Zqe+Mi +CNhwWtiBfsZEre7q+RGc0R3BqhhK6D5iHSbyuAGY3huCLkx33axHXJFPAjFnmSpBFT5hurcINs+x +8SC6pWJOYFa/3bHtRcqGSCuFGq6U7qrSQ3EaK1CjFjvT4FvKdlccyKXwDhLbq1bHsmRoA98giMFu +6N/Ww1J9cXtsJ8uwNbbRsd3Rhi3ZkcEbBiKhi3dhkXShmOhEmKF6W2V+NNv+dkk8wUgMVNnCHrIW +fw2eFcuXbxnbHDYyTbu6C5q9AvBwJkv2m/XO0d7AFoLZI7e7mV/oBgrm2aNxpcY7dV1JcZeZbR60 +9BPJXidv6Wd+ollgludr+o5PvJ1+r591naRgPaVt+TTXSXPmBavZgB+6wbSEmR+63c96gvQakhm6 +zhM0rfokX87Il65oYF1dxbPMI2KlNCboXsd22WC4thItZFG+UrrW2vWMl2sGutKsns7io0Cii0L8 +klHp5C39z+lWy+pxjLB+ZSbVoLl/msEPkATJwJ5FloBu7zURboUUebCHanlTs4Ds9hjmygDpxYIQ +vQ0PdNOirVLSCmanQIY5LCH1lB1hng3Fb6oK24Jeq+rRJTn1dtwbwmNG5005XUantVHqrJu25YWY +nhtn5u9kXhMKKkprqOH3DW9I3H0GrGd9T/OEW66chzXLB3UDAxQWRzWFVOiWUGDY7ExlrBPRM0cr +YYOOk4E2pGzeFzMQNsMoJICNaU3sGhNu844GeIfwhGzEt1lbqyqjqvLR58wwkJwNLA== + + + a+DrgnuCGVtIv9WlgeFH4/bzLDp2b4HXiBARc1CKGo6DK7WyiYCIsr0Sbg0ohqCVHU3bcRZ27Nhm +aHY+1cRmEWenNSqoGLBUP+sqpmjpbDP0BY6Y8H1WdnYK74Gyc5qYvjWJeba2Or9SupiiqAS3VYeU +0M6lLjcV4KONAnFx4XZF6Addndldw12oyLkPb52g3UyJdqPs3BoXvpE1yZOY0vRhGC6S7yZKbvdz +suywGLR9Xy8/AAy8ForXoMXiFfADxKA2VKkXTXNa6rPmpL83m0VQJosi5hKiuT2Cs2V7miHpknHS +tscsigZFMuOlFBskz8yKsgbwZQEmYbrIbrlbNCSsDEcPfn61BC8SNTC4zBIcraSV2ceipriGma4J +ohW7XWpNlrWmmcIrlWAav7MSUdtjmMPDC6TgvUsglzNuQ2X31A7grLKyFM0+ebiXk2VjFBIpMCqN +bYxEQU4UMUCpJAWlUbUMHbADAREks1ImDSWpkhSSsgAJKIyzPAeYRVRIhzArA82rS+mfVuE0aTCO +1cfamsO6fPf6tvWTiosEM2hcy1ukj0YiFGdwjZ4TOG1+UlA5WlFxy7Okj/nw1tl9qbYqLZfTONL0 +yoxgRQ2CVCZeiBYfIqvxPTZuTRdrZpYA0fJIk9yV7SHM0YVl4qSiGD8Rs68KXSfafrKmKEhcVEBZ +ha6YvCKUOKc9j4d7hYZhNOhotaSKFcMj+A1viDVNYdzKjAjeHvKaCCbiFZhbNf2xWB1d39eCQ2jP +UXG+MzSq0SMLSGivCVpqQ3aWF7H9vZfLUOaTS42u3vXJzIIatbcMuxyVK1sN662e50eTAiuQVdOy +FQAAI7GRjQN3mahyZ7OKgrCXmmKx1HyFC8qC4ilVQz636YJ6cAw2vOo1aR6luYKZWqpTdJkg8XSW +tqgjdKvvf7sfOwHI6WFEzs33kbKCvOzootQgK6fqa0bOqgmpwB4+iCvJilNv9z8/bfXUo1RdsNkp +2GmwqKHqNKKKIB6q0KSao4K9vLTlMZTaNhUsfLAqBKWGGcw01DihMTEEb/drwv1tD9lm05rlnTpO +ibxSuiJZO/MgtLYUCVfwh9bMcO5YLn+pPSiImLNokdbM+z9VtNYUMYN0chPWWrWMGsfe+xOlazUL +Z14/6qTJs5slb6g1xbSkmqUW3tKqVd6lEu08jLrUfdPKQ4PozN4SZ9p1MzCBMPFDWrX0MwnMZKL6 +KB3jwVoPeZZRljo6rZjHzSm+9KCpp8qtxr+GWFZd+CDgb60YAvisf94QNOT0lHvDwQDdBHBrKoxh +EbFB5OUC0ZutDHQTnNXGBSJ7M0nY114FSp7EVkt5ahZ26/uKjNcsRBaMudraiF2K7ja/yJgCp4v5 +DfBtLA5n7KAHcaG1otlYvpsqhNPUdXIEXGg9aMkovARRD7tIBb5zGAATJ7MgqdtugACIyUqc2JVj +3YvIdSFXe4yKHWCRMOkRsBuni74CQDQtSqbvBYjrc6OQ3K1rfCMGMF/c7tT9T9XBDckUdLaHgC7S +c3cqbJDSwI48EO2gLTVIuteYQS8ImkJkMBrdfCXqgCkEQXqoGq8g+owMrSiUEE62hBD0Ymj38w70 +srAjPysr9cJ4JskK9IKYzQbmDPOqZy4zxhd5Rrr1YgXevKHf9LLYaVWOwMCWkuGWmgN6M3uoAEOh +B6vKpyVI+uQFeCMszrJnw2oQKCsmJitbXsW33JMpG45MLtLBIBcto6yZKj0ZfsNETOnJ+JlfU3MG +vVjV3yJ6CejTROM5AoUbO6s0qrnQPS51CBespj7jywQsy3r2TYuTFRYxe1hKXRfBsO9Bsdgw5BkX +BbpV/CNH4okd16gvgUYBduh9av/UMnzdWTK8X8vPdGep136tkdKdxRsD2pQ50CAqTCCSD5ixdbc8 +POarB9VqqeqOtG6RAROvDCOrVkIyLFxCtQxoQNlP7pOsxLReAzAwqcEgBeoflBhM8Nt+LK+MlWY1 +NauNDU+dKEbeYvNaMZ/4BlpmK1bs11uIDHXr18+97cH+UnmIJPPS2xZ0eG/jLYAoVoZcBQq+V72V +IErBte2O55IkyBciw1CBNlmSvDxmGgY5Gks1dOJmHFo9iKU0s+4YrnjLWuCF2KdJ06A3fR/Uud+y +ZdE7xkgWolUxnzbA7SFPaTErkjfentTnZESwp0dY3tWsp5KUMb7ibxUEvmcyDMOIR00OoNXIxNck +AnRrZC+XMQtng/8ZYVA2aKnoq1DPU/YwKLsw8by3+1mF6AliStlGJkQrrkhnCD0RMzXeR7DLGrwZ +xX4fFhFaUAspNoHVh2aQ9qFbhYvtEayXshoyPLHaOThWfoHDNvk16EXhJcnjf/KWfnT+3QE2xuqh +BvX/Eb2pD7RxcB2Ikr1EVWhJmwSxmQrQrLYFNY7e6GRApG7Nmid5Iw+MYb33rquHakFV6U3tGfQ+ +yqNZDDrJaRgMpAxhjfQDE0k0OtRx5JXxDbXmM1ibkdUb49j2ZPQq+DzOfPi9WkVEJCt3ZTOixpHe +Yxe2t8X3qxBQfdZ/diYt92ZRRG5FbOuQW1XTXsr49K7o717eGKPn5pR7SUpz75Yk7zTvBrSkQ1Zr +HnYrWEIP1k4tNd1FDj4UEwGFRKCxAL9h3nzi0XLxFVuaPBqr0YAKpFNbOCy9nI3O4LwgasiuZ7uI +dCAOxVWzox5YNw9eU4RBXIt0Kyo3HVoJtHMcW3uiPWvaiuO49hNrz/C4dDI4dAlLb8dC0Vw7RfPJ +si3FpXtfNnvcYO0hdw3okswkviYaHDJzGUBXoBavgZogauKD1xDfhy+aDNir31j9kr1ZupHnxK0H +7+MajOJNYS9VOSnRsyrsFPZwYvSqAWqimhDRCmVLac4Hep4fbapEYJrmbgJdPa1+gbRHVxoDCR9W +XwfzlkFqWbvl8OCjZkDglD8QS1CZKIVsu7M1wsl7q0WSOw6OulK6lBkxPka0GQUUZCBrQe0Z+UWz +t5geKXxGPTjl6AJuipZadd0vXgPqQVy+IoDL52RcXrOAQRS3FOZXm817a3Jz3ijmq+aTDujHK6Wr +jcovMBngFwoz4Jc4rwf6WT9xryv7hF7Nzf1PhhvlpQYe0YKFUTHGDYjRRN+pQj08dhlLtugLKYR0 +pXRNOzErG4jFTHKNtX4QFYvAMfD0y7f0vC6Apgb5RXQiusnzziqbPdwV01VRWxh4thJxXiHMH/ji +y2Uw91bdBqOZr05xiIjYVHMRpZO+mNT+PJWLt0/noX3+UvUwSUyKXLDoShXHWRhokSk7lesQgFwP +jmTqYDV/0lJZdav7+eGg1SIJotikuR6XQJksBb+6wXctBTygNZvjj6zqpmVrCSUwSI5GxOeqIiIX +xzkE22OYohY2g/G/EwcJXSldSyNE8+12ZG2xpB0VlpEMEYFJCzQLqJJXHtmFzsRktZlK72ZZMLjy +Ba4KdAH7jlY7ED2I+yuqk6qjsHeTIaRZxYNGm6UtiYFi3JCguGj2NbR0CsjdvBn4e1xcm6bnR7UI +EHYyW/e/Z49EY4vGk2lttBCPZFj0FXvZT/znQa8Gg66ZELAdSeW0SPZIpTHgcGLGax3oFBKn8sim +y8lJhqq/fRLmIYnq/aTqqRpySrMLvBTZUPNg/JGaPgIHrYvWhEiOrrnCclwT3RvpVepa5bnxW0OY +o2vmv4exNy3agphSlxz9QWxVs0jUiNEBF6uVacuEMOjN8oOlYu2J0mdVVg35xTC8otYFKX++PbZl +2DIIALtevet73gAENSe6TzfOzDfa6HRjhfpEObJYTNCbZicpkHhvS+lTRYt9cB5CF+GgGfweEXPR +brN1uzmG+VAUc/o4hiG7MrpZeiVOC0SxmkPRYjM2xA6Fb3Bcw/ql9qCIX8tTUxZPWVV9YWsMNjyf +TTDzrF9LwHVZpNZsVk6iOwvn5kxPEOfjyTGgD3Q8vzkrnNKBtSDviVEqdcaFKHHbTVMDiShZbt3W +e6txFbzdbmGDTY1bD4zhbB3eZuc2PCnKR7VYrfNuB0p0nR4mbJaAf/HwSAM3ywriYk+UvuA+QMw1 +uqaldK5WKsMQc7DlLD28IGM6f/7kJ/3oZz8/+sv/+t4///SX/9E+//X1q09v37z++g+nd3fnt9dC +/fT8q4vrTfrP/nx9fXp1/uqIyEeDPr7780/c0S+RLfOXv33ykzf4gz9y9J+/fIe//Y/xp/87aH87 +Ske/Pfrf/8cdvRq/+Msfx0TreEzHJR/DrziqFFyEJR/CSOcKJpN+sklvPnGK8MlmP2+jr/1cY1i/ +x3/hP/7or0hV4gElyMSIJqoUuh0kOGrQgfsy3vNJfzGeMMTKjDNQCX6gA5mnFgcbvscQMz2v/CgA +XmnwjxK5MWWXDWKiRH9q7DiT8gVgF4ZOkyp/SwPTBhloDkHIPsMXPoiwPY4TVynsuMO5UkuVSodE +pMzlM+oB9TyGMsX0hMIBIAY2nxMRqddEjAxmSMQg14zaUtYQkR0hM3IH1GcRJA8iedRsImLqUjOG +BhCoU0D2hyRjpcItlSAaY5BJtcqbEPkRkBUYdJj/iT6koy6NKR2jEqKZ71GJOUQmZkzgTHsYvJcm +K4GF0jg2IXJBaCIO5kXfIjTq2cF4/IXM7yERO7QfIrqQdWLjj2gZJWVJNsGxgEv0ElPTHmAYJ2LG +Uy4tnfagWaBEJpcNkX1q+jWK3akAKWWALyIO7a0zMYRSZg9jn4Xu5tfItFYBXUrZK7xh3tFOEJ6p +rSPonsdQGZSeieNl7UKMsgyeS58zEWZ866EkOqNAT6UHmc5NgmGpUvZQ8nIU5YDEwoOVDuhoFKFn +1/TcFp4xggJSFmKORVtq/WqiEyR3RUnbXjL3kBhylohcJZSIEaYiIsI+JUMA/kgR8lBleRWAsFq0 +g1T5PsEHT3cXJW0Rti89SMwxrULMmb7WCDqx8faw3kzENLqRM4Yi9NxDk/QvPrykGlG3pdDAEsW6 +NRnDWJDGt8eBAckYKruyiM6IeoNY2ONIxCHhcLeZ42KIOOTypAsJ7IcujYP2kBmwST7HNxvdQrmg +gdUcbCvgkKEpI22lwksjxCI3m5wEsuaV+QUMN+sYqGAL0Y23QV8L0jgk2+AQhUb+NDtPvtF5QkYS +RdESkWxmvDate+nBQVwhljVOlnG3xHWPiM6pFUTMWYmtMs/CuITl0dracRqiV2H+GAgvhYj6+zzZ +c+a4eiIihsJ2ckgAjcmUfcG73phhAeesyfHQl0RexXka5X2QwstMHGKudMCCH50611wRYhUshUEn +9O3G9CizbcUeCFeYPzdJt+QJhKK7CLrXGQwGnqSxHg4QkxFtXXJwWe8DEvWrNOYgxkFErgyJDVjZ +HHRY3dFNR8IflETpQW4obw+FyhKRwGqYKA8H3Igt6Nvls24kfHq9CR1ywJEQE48BrlSnxCbPN7B9 +Y5w95Fg901NxXRoHH6SHwdC4hwR/jhB9sVeiRTaR0snNjg9DCwAmTnLGoxHJ7k+cpQ== + + + labyRgtsBKN3hut/ULcEC8q8KfP711DnKTZ9T5ryRziSA/UcBRBSBoyxM7EIaUxBX5kW7DQhx9zL +K0MVo3iDyUdLH2OPBBHHcSzyLDu7kogz8PqKx6ptlVvBqcUyF4XoeelAnWt8muS5R/QLs6AmeQG0 +igwWyQcEPi1qSVBVNgfaV6JzNU4i1tSFB2URGCi4gM8+IlRiXVYBAQAsibiqjV2pMgmufUMHZEg9 +0gMB5bzU00QWJGZ5Tg4vHMm16Bthd0LnC2Fq3irEMhVj5kWPP3ZmUxxD4EPmb0l5SelBgH2JXpD3 +xURdh8gbz2tO2PR0ounhsJtNVgk56fK5xpGERAwIt1LukpTY7L1ugm3BF8iz+ApiL3arvPKn8QQI +1yY+Zj0QyA3fS132zqHx/B74RESEyLSqxFS0hy55UExvWdrWGq0tM34Ya7OyITSU33vGh2GO4Vhi +oKCgLhPmyiZErEiYYi40RIPZQ0usyiSBkiBiryHcI8Jqp/ytKs7LoCe2J/K2BV4ycqdlea2LCCK9 +cYVdEZdVfhxnEL7+JAKV6D3oIdFexnlVOnipC9zSynNR43GkRXKSEzkebbho5XMU84CWcbk/QZHX ++LY4Furg12LVqcOES7pAgNkVZhQebaY9Q2Ic3E08C49bRs8w0hYqbXx1CAsOJt/DMEADS0Vlr6mO +wITNk0taSZZYLPnfKxKRZQiFivSRZJwod0znME5nI2bKCY9NFz0k0TQ5K2OMAHjv+h5QhKrNwTuS +yCJVj0BbnzleEUiIkiQ5iJEVgNoITLvbIhAgPK2Y46pi/DXP7JQg8OgNpeXiE0L4VhJfMugSkE+f +c/JUIcoAiwcXttiYR7eRfWPQutnpK8cJZQJoEt7ZrlH8Kt0U3yRSrlZy9fJoE5eD4B4IWTKKhNCi +jYE4GC0kFeeVF7DR9aH0WhN9xkEVxSGPI12Jp2PKkc8e4fyRPFMJK0D1exIPZAyAwKIHF9q1I1W6 +UjlOJ/tGcdsgJq6fzLrl+Lv0gCIZhZ67KEGM3EMKdFPImJRocbQUJt01OiPSA9QMOiZURo7ethoh +y7GeEzmzj3ptoahGA+HcFnIcLjlPLG/WkDiWgX7PtpOK6yVDdYvMUCkWmC6ghwzEW0n4+c7zvos4 +VHGOC4/AszOGe0iNk1er1Fn2coWjI4EK5dHtyU58+7IUqrQHl8qgE53rkPKjH6NnYvf22FFeRWWs +XpUaEP0ZSZXIxXi8gH1WIN5haDIqakb5kKqXDu0R5QqJjjRAYq8VuCf8VGY4lEi5qCmrLERIoHaS +MJ8S9T1gQb4CxqhHM2GRYlpRQqfWpk+iPte1Ui0aU7NIka7NKXMEr4AxHMTAUBuDmGbgOvyGjGdB +F5jcjug2cYoesddePY+hqEEDjgotFUBjGKe1MZ10SSb6ShIzThpfKFThi6RiELLbHAJqqxcvDwrF +7dEQCKKUDi5DyQwipekVPqEpemVuyKJMdB2Q/ezINFSBdZXpnpKFmU4oim62kviEkkzIQ4DfqNJh +9EjVQNOeeAEbyxoV4XWJHi3O3E26BYHxWivHUtJvY1PJhkoXMZ9z+l7AQqhl1Qcdsg/9noC8eJzj +bLVOuufoviRmJ5QvQAxpbEUwlZjurafZN4BJUFtA8hWaQp8Hw0uZiUrR6UUS1Qe96jOA0CDZLZ85 +l7ZSMARrtGCUmWxHFCAAJ6xwdgFLrd01eUgpjJvakWIMIuR4KIiICkpZstyJTraESjFrVMWZevCd +2CFF0pcgD4toMB0vaqv6+YyUE2wffHqJDwsW3NOCU0g47+J49qkcYqUw+phsDFmZes8cjsavYyTr +ZNfse+pgPGE42BQe5/QWjLetNW6MADt5oREnReysF+uBxpV1XL7ZC010L5NgNYyJ9BCCCJZvxKLT +jcsLHXlyCEtFvCwPzEdifijdGPhdwSwqCe8oyxqkKpDSo9Ajid5MdNpYriKI/GxXsRLbSWj8cush +ZWJq9IpQDVemhERaQsVRT8tBoiiqSoVZ2bLAjYmpgq2orFY46IWIVBTUzgIdF6IT4BmIUF1pI6ri +PxFRjLEo2ZlUJwc9styMEqFsRADRNSN2lXPIclhRV5OGLR1ABiOBHPQuByfylatcUlWWNqpeBCJY +ogneBOJAm0YqIl+JyJonrIn8MownnV3zRLT0HKKPi9qFzvIeEXuVHgiSnmh8paWEZ5sdiE0ZHYiZ +DGeeLTT0taiCrOf3BsSotxKiVmOpF+NNou4I46YZO7aK96AWEyrWV9pUgcjdS2eMI4FYC3NdeGtS +ItQterDgPEEY9lSi2JJCteZFeYhsBa5S4rGKApMLWY4KAa1ZD4TNSY0JHk2WjIwMlWEskzA3il0k +Nh7TVICQmEScvEgGvKxtoneMMn/Zgo7oABZj4UBZeoBxhDYNc0isaIDJNHrOq1P1hVqyIwEenFDK +HENwJEFRzU/hbnBw0L7DM9S68u0g35I9sfOY2PhcPSuVfHgDW23g1oBsyETHrhtah1amIlizyyIt +8RNN2nck62BxjGwJaQ3eJ5oFEujzNLBQlR5p7AofnUahtk2IjVXJ5tVUrsn+Z2oqo1xP/pxjZwYU +Bbb5Fy0ETwobYSkSkZDmzVSWWTdCIrpYyxvpYZ2JvrPHrwFvmqSiEhZRhYw8cnaCJDowkV/AEkzP +biY1AoIyOj97EFWjaF1ptmuxwABZiIUwkpBZAgLapCtmtqzMciuB6oq5nNJ36LYCTDayeaQJVint +JpmDXmoP4riD40gNwJJFyYcnJbUjJjYaUiHJaWiCstHkpLWqBkqXk3RAlex4f4ZUV5jYvUn/zthp +lMoP7L+JRU6kWtBqVwWEbnBWN0DnM0tkZWVUYbkKkV5WJjY2KgN7N/s0h0DlZkiiMztV4BgGIqq/ +C7aC3oXYczDbBnBCeHlhrHRJe2ATXIEGz+6QFlTPBjCrNzbfAn+ZWJFXs3+ESicMzjQj0+4I4Tbl +aZtoiBjh2bWiOzGmVnkMjENORM/qLI7NdJVChWCTORCldR1oyp6JSqHaMpXxV12at1LcyEXEO7mq +rOgDMkKOUlDHJcFFBLsQnstREZ2RoYlI9WD4Uoqdi55CXlrPJ8W8c5klnCLPhxBdlMYUhczExN4I +AsOoafZAKcJET95OHmVKE1F5HtXrjvItNy2OlWxwwvaauoAaw2FWhn3h56dWxj8hIgmC5lcaIqww +yOSKNk4pSWMvNkfSzpyyWDNaQuRyRdo6quBB7j1CMq0E9yScpRYuvM1EPyMHBLVe6OrslZsKmnjG +ggYuEEhKWpzmJI1usPNCIV06LDkgUKLY5UfYLcqYYmLuRzp9ycxCxqtGkmo2mTbj3a2s+2fO26Df +J6TnFlIQCYqffEIJIiVLEShARRdyiUARGk0gOc+GnqXpEg2DskTsUlqJkSyF9PuV7KU+3drpjGp5 +IATmTEOK3houlEH9/Hc313+4vbi+u7j+6sULoVMY0fovn/zkd9/Qv3nH//jZf/77by4uR1ef/ORf +7c9H/zb+9pffnvzu5tU5/flXF2d3FzfXp7ffveOffnH0s79fXV6Pf3wxBnh78cWbu/PXPz/6l9Hw +l7e3p/fbnH19cfnq9vyaWoSjf/2P67v5j/ivu+++Oad//Jn76c+P/vXP1xdng/rZ6Pn6q82W355e +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== + + + qzfvjjFZp7j+5qkm+fhHfZ2sjuF3NJtHz3fzZ0815dtzsq08fravXl3cXXy7y0TtF0+qHZ1eX1yd +Pi208/4jPr5oh3ikj17lPHu+8Ug7TG3PTDeHeKSP18K9y6nbFx7xfOORdpjavpilfkTxSDsgOO5v +QNKhdu5ePXCPF3r3KyJpF065NxFJz/Gxfr4RSTtMbV8e60NE0sOzPUQkfVSP2o8pIsn/6CKSduGr ++/IKPt+IpB2mtmdmrX2PSNplZ/blHj3fiKQdprYv0uRHGZG0D/6xfYys2uX87s5tnnJn9xuxc5dI +x8O+PBMUnf3Zlg86iqccwbOCUP3lf3z+K8Ld+XxHm9cPKOZ/bGuyg2FzzwC+njdc/gFA6sAIfwBG +WA6MUOb3+JU4MMIDIzwwwufCCH99OygHgfAgEO45HzzHOT6wwQMb/EfY4EEcPIiDBzZ4YIM/Wja4 ++r8+3zEm4Blzw8evxI/RB3q4W7vfrXq4WzK/x6/E4W4d7tZb7tYfLv5+fvmHy9PvPt8xP/Njjrx5 +4vJlTwOm4o7y44Niech/3CUudvnJnjLM2/Orm3fBH+wp+tGzxwryO+DqHMCCnh4s6Mj/Irgjn8d/ +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 +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== + + + 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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 +Fp+Tf8MW+BH+YG+vcl51/fm/+AjEjg== + + + -- cgit