diff options
| author | Magnus Auvinen <magnus.auvinen@gmail.com> | 2008-03-18 01:30:47 +0000 |
|---|---|---|
| committer | Magnus Auvinen <magnus.auvinen@gmail.com> | 2008-03-18 01:30:47 +0000 |
| commit | 944cd68addf377f794294391da6b291a41bc43f9 (patch) | |
| tree | 31910d336f28196e8918cce079b6fc154d2f5001 /src/engine | |
| parent | 511720b0e4493617dfdbe87f98802e594e61d8ea (diff) | |
| download | zcatch-944cd68addf377f794294391da6b291a41bc43f9.tar.gz zcatch-944cd68addf377f794294391da6b291a41bc43f9.zip | |
loads of small fixes everywhere
Diffstat (limited to 'src/engine')
| -rw-r--r-- | src/engine/client/ec_client.c | 10 | ||||
| -rw-r--r-- | src/engine/e_config_variables.h | 1 | ||||
| -rw-r--r-- | src/engine/e_engine.c | 10 | ||||
| -rw-r--r-- | src/engine/e_packer.c | 26 | ||||
| -rw-r--r-- | src/engine/e_snapshot.c | 16 |
5 files changed, 38 insertions, 25 deletions
diff --git a/src/engine/client/ec_client.c b/src/engine/client/ec_client.c index 6f8a1729..a9a575b3 100644 --- a/src/engine/client/ec_client.c +++ b/src/engine/client/ec_client.c @@ -797,7 +797,7 @@ static void client_process_packet(NETPACKET *packet) const unsigned char *data = msg_unpack_raw(size); /* check fior errors */ - if(msg_unpack_error() || size <= 0 || total_size <= 0) + if(msg_unpack_error() || size <= 0 || total_size <= 0 || !mapdownload_file) return; io_write(mapdownload_file, data, size); @@ -1151,6 +1151,12 @@ static void client_update() prevtick_start = prev_pred_tick*time_freq()/50; predintratick = (pred_now - prevtick_start) / (float)(curtick_start-prevtick_start); + if(new_pred_tick < snapshots[SNAP_PREV]->tick-SERVER_TICK_SPEED/10 || new_pred_tick > snapshots[SNAP_PREV]->tick+SERVER_TICK_SPEED) + { + dbg_msg("client", "prediction time reset!"); + st_init(&predicted_time, snapshots[SNAP_CURRENT]->tick*time_freq()/50); + } + if(new_pred_tick > current_predtick) { last_predintra = predintratick; @@ -1161,8 +1167,6 @@ static void client_update() client_send_input(); } - if(predintratick < last_predintra) - dbg_msg("client", "prediction time goes backwards, that can't be good"); last_predintra = predintratick; } diff --git a/src/engine/e_config_variables.h b/src/engine/e_config_variables.h index ead4b7e1..b7b572d1 100644 --- a/src/engine/e_config_variables.h +++ b/src/engine/e_config_variables.h @@ -56,6 +56,7 @@ MACRO_CONFIG_STR(sv_rcon_password, 32, "") MACRO_CONFIG_INT(debug, 0, 0, 1) MACRO_CONFIG_INT(dbg_stress, 0, 0, 0) +MACRO_CONFIG_INT(dbg_stress_network, 0, 0, 0) MACRO_CONFIG_INT(dbg_pref, 0, 0, 1) MACRO_CONFIG_INT(dbg_graphs, 0, 0, 1) MACRO_CONFIG_INT(dbg_hitch, 0, 0, 0) diff --git a/src/engine/e_engine.c b/src/engine/e_engine.c index 0f6fad06..5ef6617e 100644 --- a/src/engine/e_engine.c +++ b/src/engine/e_engine.c @@ -25,16 +25,6 @@ const char *engine_savepath(const char *filename, char *buffer, int max) return buffer; } - -int engine_stress(float probability) -{ - if(!config.dbg_stress) - return 0; - if(rand()/(float)RAND_MAX < probability) - return 1; - return 0; -} - void engine_init(const char *appname) { dbg_logger_stdout(); diff --git a/src/engine/e_packer.c b/src/engine/e_packer.c index fa5d54cf..07b9bc51 100644 --- a/src/engine/e_packer.c +++ b/src/engine/e_packer.c @@ -5,6 +5,7 @@ #include "e_packer.h" #include "e_compression.h" #include "e_engine.h" +#include "e_config.h" /* useful for debugging */ #if 0 @@ -13,7 +14,7 @@ #define packing_error(p) p->error = 1 #endif -int stress_get_int() +static int stress_get_int() { static const int nasty[] = {-1, 0, 1, 66000, -66000, (-1<<31), 0x7fffffff}; if(rand()&1) @@ -21,7 +22,7 @@ int stress_get_int() return nasty[rand()%6]; } -const char *stress_get_string(int *size) +static const char *stress_get_string(int *size) { static char noise[1024]; int i; @@ -35,6 +36,17 @@ const char *stress_get_string(int *size) return noise; } + +static int stress_prob(float probability) +{ + if(!config.dbg_stress_network) + return 0; + if(rand()/(float)RAND_MAX < probability) + return 1; + return 0; +} + + void packer_reset(PACKER *p) { p->error = 0; @@ -47,8 +59,8 @@ void packer_add_int(PACKER *p, int i) if(p->error) return; - /*if(engine_stress(0.05f)) - i = stress_get_int();*/ + if(stress_prob(0.025f)) + i = stress_get_int(); /* make sure that we have space enough */ if(p->end - p->current < 6) @@ -65,13 +77,11 @@ void packer_add_string(PACKER *p, const char *str, int limit) if(p->error) return; - /* STRESS: do this better */ - /* - if(engine_stress(0.1f)) + if(stress_prob(0.1f)) { str = stress_get_string(0); limit = 0; - }*/ + } /* */ if(limit > 0) diff --git a/src/engine/e_snapshot.c b/src/engine/e_snapshot.c index 9dc64ae8..9d06f59d 100644 --- a/src/engine/e_snapshot.c +++ b/src/engine/e_snapshot.c @@ -313,6 +313,13 @@ int snapshot_create_delta(SNAPSHOT *from, SNAPSHOT *to, void *dstdata) return (int)((char*)data-(char*)dstdata); } +static int range_check(void *end, void *ptr, int size) +{ + if((const char *)ptr + size > (const char *)end) + return -1; + return 0; +} + int snapshot_unpack_delta(SNAPSHOT *from, SNAPSHOT *to, void *srcdata, int data_size) { SNAPBUILD builder; @@ -371,8 +378,7 @@ int snapshot_unpack_delta(SNAPSHOT *from, SNAPSHOT *to, void *srcdata, int data_ id = *data++; snapshot_current = type; - if(data+itemsize/4 > end) - return -1; + if(range_check(end, data, itemsize) || itemsize < 0) return -1; key = (type<<16)|id; @@ -380,6 +386,8 @@ int snapshot_unpack_delta(SNAPSHOT *from, SNAPSHOT *to, void *srcdata, int data_ newdata = snapbuild_get_item_data(&builder, key); if(!newdata) newdata = (int *)snapbuild_new_item(&builder, key>>16, key&0xffff, itemsize); + + if(range_check(end, newdata, itemsize)) return -1; fromindex = snapshot_get_item_index(from, key); if(fromindex != -1) @@ -553,12 +561,12 @@ void *snapbuild_new_item(SNAPBUILD *sb, int type, int id, int size) { SNAPSHOT_ITEM *obj = (SNAPSHOT_ITEM *)(sb->data+sb->data_size); - if(engine_stress(0.01f)) + /*if(stress_prob(0.01f)) { size += ((rand()%5) - 2)*4; if(size < 0) size = 0; - } + }*/ mem_zero(obj, sizeof(SNAPSHOT_ITEM) + size); obj->type_and_id = (type<<16)|id; |