Example #1
0
void SpeedWeightedObject::Properties::checkAllSet()
{
#define CHECK_NEG(  a,strA) if(a<=SPEED_WEIGHTED_OBJECT_PROPERTY_UNDEFINED) {                   \
            Log::fatal("SpeedWeightedObject", "Missing default value for '%s'.",    \
                        strA);              \
        }
    CHECK_NEG(m_strength_factor, "speed-weighted strength-factor"    );
    CHECK_NEG(m_speed_factor,    "speed-weighted speed-factor"    );
    CHECK_NEG(m_texture_speed.X,  "speed-weighted texture speed X"    );
    CHECK_NEG(m_texture_speed.Y,  "speed-weighted texture speed Y"    );
#undef CHECK_NEG
}
/** Checks if all necessary physics values are indeed defines. This helps
 *  finding bugs early, e.g. missing default in stk_config.dat file.
 *  \param filename File from which the data was read (only used to print
 *                  meaningful error messages).
 */
void KartProperties::checkAllSet(const std::string &filename)
{
#define CHECK_NEG(  a,strA) if(a<=UNDEFINED) {                      \
        Log::fatal("KartProperties",                                \
                    "Missing default value for '%s' in '%s'.",    \
                    strA,filename.c_str());                \
    }

    CHECK_NEG(m_friction_slip,              "friction slip"                 );
    CHECK_NEG(m_collision_terrain_impulse,  "collision terrain-impulse"     );
    CHECK_NEG(m_collision_impulse,          "collision impulse"             );
    CHECK_NEG(m_collision_impulse_time,     "collision impulse-time"        );
    CHECK_NEG(m_physical_wheel_position,    "collision physical-wheel-position");

    if(m_restitution.size()<1)
        Log::fatal("KartProperties", "Missing restitution value.");

    for(unsigned int i=0; i<RaceManager::DIFFICULTY_COUNT; i++)
        m_ai_properties[i]->checkAllSet(filename);
}   // checkAllSet
/** Checks if all necessary physics values are indeed defines. This helps
 *  finding bugs early, e.g. missing default in stk_config.dat file.
 *  \param filename File from which the data was read (only used to print
 *                  meaningful error messages).
 */
void KartProperties::checkAllSet(const std::string &filename)
{
    if(m_gear_switch_ratio.size()==0)
    {
        fprintf(stderr,"Missing default value for 'gear-switch-ratio' in '%s'.\n",
                filename.c_str());
        exit(-1);
    }
    if(m_gear_power_increase.size()==0)
    {
        fprintf(stderr,"Missing default value for 'gear-power-increase' in '%s'.\n",
                filename.c_str());
        exit(-1);
    }
    if(m_gear_switch_ratio.size()!=m_gear_power_increase.size())    {
        fprintf(stderr,"Number of entries for 'gear-switch-ratio' and 'gear-power-increase\n");
        fprintf(stderr,"in '%s' must be equal.\n", filename.c_str());
        exit(-1);
    }
    if(m_startup_boost.size()!=m_startup_times.size())
    {
        fprintf(stderr, "Number of entried for 'startup times' and 'startup-boost\n");
        fprintf(stderr, "must be identical.\n");
        exit(-1);
    }
#define CHECK_NEG(  a,strA) if(a<=UNDEFINED) {                         \
        fprintf(stderr,"Missing default value for '%s' in '%s'.\n",    \
                strA,filename.c_str());exit(-1);                       \
    }

    CHECK_NEG(m_mass,                       "mass"                          );
    CHECK_NEG(m_time_full_steer,            "turn time-full-steer"          );
    CHECK_NEG(m_wheel_damping_relaxation,   "wheels damping-relaxation"     );
    CHECK_NEG(m_wheel_damping_compression,  "wheels damping-compression"    );
    CHECK_NEG(m_wheel_radius,               "wheels radius"                 );
    CHECK_NEG(m_friction_slip,              "friction slip"                 );
    CHECK_NEG(m_roll_influence,             "stability roll-influence"      );
    CHECK_NEG(m_chassis_linear_damping,  "stability chassis-linear-damping" );
    CHECK_NEG(m_chassis_angular_damping, "stability chassis-angular-damping");
    CHECK_NEG(m_downward_impulse_factor, "stability downward-impulse-factor");
    CHECK_NEG(m_track_connection_accel,  "stability track-connection-accel" );
    CHECK_NEG(m_engine_power[0],            "engine power[0]"               );
    CHECK_NEG(m_engine_power[1],            "engine power[1]"               );
    CHECK_NEG(m_engine_power[2],            "engine power[2]"               );
    CHECK_NEG(m_max_speed[0],               "engine maximum-speed[0]"       );
    CHECK_NEG(m_max_speed[1],               "engine maximum-speed[1]"       );
    CHECK_NEG(m_max_speed[2],               "engine maximum-speed[2]"       );
    CHECK_NEG(m_max_speed_reverse_ratio,    "engine max-speed-reverse-ratio");
    CHECK_NEG(m_brake_factor,               "engine brake-factor"           );
    CHECK_NEG(m_suspension_stiffness,       "suspension stiffness"          );
    CHECK_NEG(m_suspension_rest,            "suspension rest"               );
    CHECK_NEG(m_suspension_travel_cm,       "suspension travel-cm"          );
    CHECK_NEG(m_max_suspension_force,       "suspension max-force"          );
    CHECK_NEG(m_collision_impulse,          "collision impulse"             );
    CHECK_NEG(m_collision_impulse_time,     "collision impulse-time"        );
    CHECK_NEG(m_restitution,                "collision restitution"         );
    CHECK_NEG(m_collision_terrain_impulse,  "collision terrain-impulse"     );
    CHECK_NEG(m_bevel_factor.getX(),        "collision bevel-factor"        );
    CHECK_NEG(m_bevel_factor.getY(),        "collision bevel-factor"        );
    CHECK_NEG(m_bevel_factor.getZ(),        "collision bevel-factor"        );
    CHECK_NEG(m_upright_tolerance,          "upright tolerance"             );
    CHECK_NEG(m_upright_max_force,          "upright max-force"             );
    CHECK_NEG(m_plunger_in_face_duration[0],"plunger in-face-time[0]"       );
    CHECK_NEG(m_plunger_in_face_duration[1],"plunger in-face-time[1]"       );
    CHECK_NEG(m_plunger_in_face_duration[2],"plunger in-face-time[2]"       );
    CHECK_NEG(m_rubber_band_max_length,     "plunger band-max-length"       );
    CHECK_NEG(m_rubber_band_force,          "plunger band-force"            );
    CHECK_NEG(m_rubber_band_duration,       "plunger band-duration"         );
    CHECK_NEG(m_rubber_band_speed_increase, "plunger band-speed-increase"   );
    CHECK_NEG(m_rubber_band_fade_out_time,  "plunger band-fade-out-time"    );
    CHECK_NEG(m_zipper_time,                "zipper-time"                   );
    CHECK_NEG(m_zipper_fade_out_time,       "zipper-fade-out-time"          );
    CHECK_NEG(m_zipper_force,               "zipper-force"                  );
    CHECK_NEG(m_zipper_speed_gain,          "zipper-speed-gain"             );
    CHECK_NEG(m_zipper_max_speed_increase,  "zipper-max-speed-increase"     );
    CHECK_NEG(m_slipstream_length,          "slipstream length"             );
    CHECK_NEG(m_slipstream_width,           "slipstream width"              );
    CHECK_NEG(m_slipstream_collect_time,    "slipstream collect-time"       );
    CHECK_NEG(m_slipstream_use_time,        "slipstream use-time"           );
    CHECK_NEG(m_slipstream_add_power,       "slipstream add-power"          );
    CHECK_NEG(m_slipstream_min_speed,       "slipstream min-speed"          );
    CHECK_NEG(m_slipstream_max_speed_increase, 
                                            "slipstream max-speed-increase" );
    CHECK_NEG(m_slipstream_duration,        "slipstream duration"           );
    CHECK_NEG(m_slipstream_fade_out_time,   "slipstream fade-out-time"      );
    CHECK_NEG(m_camera_distance,            "camera distance"               );
    CHECK_NEG(m_camera_forward_up_angle,    "camera forward-up-angle"       );
    CHECK_NEG(m_camera_backward_up_angle,   "camera forward-up-angle"       );
    CHECK_NEG(m_nitro_consumption,          "nitro consumption"             );
    CHECK_NEG(m_nitro_big_container,        "nitro big-container"           );
    CHECK_NEG(m_nitro_small_container,      "nitro small-container"         );
    CHECK_NEG(m_nitro_max_speed_increase,   "nitro max-speed-increase"      );
    CHECK_NEG(m_nitro_engine_force,         "nitro engine-force"            );
    CHECK_NEG(m_nitro_duration,             "nitro duration"                );
    CHECK_NEG(m_nitro_fade_out_time,        "nitro fade-out-time"           );
    CHECK_NEG(m_nitro_max,                  "nitro max"                     );
    CHECK_NEG(m_swatter_distance2,          "swatter distance"              );
    CHECK_NEG(m_swatter_duration,           "swatter duration"              );
    CHECK_NEG(m_squash_duration,            "squash-duration"               );
    CHECK_NEG(m_squash_slowdown,            "squash-slowdown"               );

    CHECK_NEG(m_rescue_height,              "rescue height"                 );
    CHECK_NEG(m_rescue_time,                "rescue time"                   );
    CHECK_NEG(m_rescue_vert_offset,         "rescue vert-offset"            );
    CHECK_NEG(m_explosion_time,             "explosion time"                );
    CHECK_NEG(m_explosion_invulnerability_time, 
                                            "explosion invulnerability-time");
    CHECK_NEG(m_explosion_radius,           "explosion radius"              );

    m_skidding_properties->checkAllSet(filename);
    for(unsigned int i=0; i<RaceManager::DIFFICULTY_COUNT; i++)
        m_ai_properties[i]->checkAllSet(filename);
}   // checkAllSet
Example #4
0
/** Loads the stk configuration file. After loading it checks if all necessary
 *  values are actually defined, otherwise an error message is printed and STK
 *  is aborted.
 *  /param filename Name of the configuration file to load.
 */
void STKConfig::load(const std::string &filename)
{
    // Avoid loading the default config file if a user-specific
    // config file has already been loaded.
    if(m_has_been_loaded) return;
    m_has_been_loaded = true;

    init_defaults();

    XMLNode *root = 0;
    try
    {
        root = new XMLNode(filename);
        if(!root || root->getName()!="config")
        {
            if(root) delete root;
            std::ostringstream msg;
            msg << "Couldn't load config '" << filename << "': no config node.";
            throw std::runtime_error(msg.str());
        }
        getAllData(root);
    }

    catch(std::exception& err)
    {
        Log::error("StkConfig", "FATAL ERROR while reading '%s':", filename.c_str());
        Log::fatal("StkConfig", "    %s", err.what());
    }
    delete root;

    // Check that all necessary values are indeed set
    // -----------------------------------------------

#define CHECK_NEG(  a,strA) if(a<=UNDEFINED) {                   \
        Log::fatal("StkConfig", "Missing default value for '%s' in '%s'.",    \
                   strA,filename.c_str());              \
    }

    if(m_score_increase.size()==0 || (int)m_score_increase.size()!=m_max_karts)
    {
        Log::fatal("StkConfig", "Not or not enough scores defined in stk_config");
    }
    if(m_leader_intervals.size()==0)
    {
        Log::fatal("StkConfig", "No follow leader interval(s) defined in stk_config");
    }

    if(m_switch_items.size()!=Item::ITEM_LAST-Item::ITEM_FIRST+1)
    {
        Log::fatal("StkConfig", "Wrong number of item switches defined in stk_config");
    }

    CHECK_NEG(m_max_karts,                 "<karts max=..."             );
    CHECK_NEG(m_item_switch_time,          "item-switch-time"           );
    CHECK_NEG(m_bubblegum_counter,         "bubblegum disappear counter");
    CHECK_NEG(m_explosion_impulse_objects, "explosion-impulse-objects"  );
    CHECK_NEG(m_max_skidmarks,             "max-skidmarks"              );
    CHECK_NEG(m_min_kart_version,          "<kart-version min...>"      );
    CHECK_NEG(m_max_kart_version,          "<kart-version max=...>"     );
    CHECK_NEG(m_min_track_version,         "min-track-version"          );
    CHECK_NEG(m_max_track_version,         "max-track-version"          );
    CHECK_NEG(m_skid_fadeout_time,         "skid-fadeout-time"          );
    CHECK_NEG(m_near_ground,               "near-ground"                );
    CHECK_NEG(m_delay_finish_time,         "delay-finish-time"          );
    CHECK_NEG(m_music_credit_time,         "music-credit-time"          );
    CHECK_NEG(m_leader_time_per_kart,      "leader time-per-kart"       );
    CHECK_NEG(m_penalty_time,              "penalty-time"               );
    CHECK_NEG(m_max_display_news,          "max-display-news"           );
    CHECK_NEG(m_replay_max_time,           "replay max-time"            );
    CHECK_NEG(m_replay_delta_angle,        "replay delta-angle"         );
    CHECK_NEG(m_replay_delta_pos2,         "replay delta-position"      );
    CHECK_NEG(m_replay_dt,                 "replay delta-t"             );
    CHECK_NEG(m_smooth_angle_limit,        "physics smooth-angle-limit" );

    // Square distance to make distance checks cheaper (no sqrt)
    m_replay_delta_pos2 *= m_replay_delta_pos2;
    m_default_kart_properties->checkAllSet(filename);
}   // load
Example #5
0
int main(int argc, char ** argv) {
	int cs=-1, flags=0, ret=0;
	struct sockaddr_in sin;
	char rbuf[4096];
	ssize_t woff=0;
	size_t hsent=0;
	const char *hdr_ptr=NULL, *end=NULL;
	struct itimerval it;

	cs=socket(AF_INET, SOCK_STREAM, 0);
	if (cs < 0) {
		perror("socket");
		exit(1);
	}

	if (argc != 2) {
		fprintf(stderr, ":P\n");
		exit(1);
	}

	sin.sin_family=AF_INET;
	sin.sin_port=htons(25);
	if (inet_pton(AF_INET, argv[1], &sin.sin_addr) < 0) {
		perror("inet pton");
		exit(1);
	}

	if (connect(cs, (struct sockaddr *)&sin, (socklen_t )sizeof(sin)) < 0) {
		perror("connect");
		exit(1);
	}

	signal(SIGIO, toggle_fdio);

        /* get the current flags of this socket */
        flags=fcntl(cs, F_GETFL);
        CHECK_NEG(flags, "F_GETFL");

        /* Set the current flags to what they were + O_ASYNC and O_NONBLOCK */
        ret=fcntl(cs, F_SETFL, (flags|O_ASYNC|O_NONBLOCK));
        CHECK_NEG(ret, "F_SETFL");

        ret=fcntl(cs, F_SETSIG, SIGIO);
        CHECK_NEG(ret, "F_SETSIG");

        /* Tell the kernel to notify our pid when a socket change happends */
        ret=fcntl(cs, F_SETOWN, getpid());
        CHECK_NEG(ret, "F_SETOWN");

        /* Make sure the socket really changed */
        flags=fcntl(cs, F_GETFL, 0);
        CHECK_NEG(flags, "F_GETFL (2)");

#undef CHECK_NEG

        if ((flags & (O_ASYNC|O_NONBLOCK)) != (O_ASYNC|O_NONBLOCK)) {
                fprintf(stderr, "socket cant be non-blocking and async.");
		exit(1);
        }

	for (;;) {
		switch (state) {
			case 0:
				write(cs, START, strlen(START));
				state++;
				pause();
				break;

			case 1:
				woff=0;
				hdr_ptr=hdrs;
				end=hdrs + strlen(hdrs);

				do {
again:
					woff=write(cs, hdr_ptr, strlen(hdr_ptr));
					if (woff == -1 && (errno == EINTR || errno == EAGAIN)) {
						goto again;
					}
					if (woff < 0) {
						perror("write");
						exit(1);
					}
					hsent += woff;
					assert(hdr_ptr + woff <= end);
					hdr_ptr += woff;
				} while (hdr_ptr != end);

				assert(gettimeofday(&s_time, NULL) > -1);

				printf("sent %zu bytes of headers\n", hsent);

				state++;
				break;

			case 2:
				pause();
				break;

			case 3:
				if (e_time.tv_usec < s_time.tv_usec) {
					e_time.tv_sec--;
					e_time.tv_usec += 1000000;
				}

				w_time.tv_sec=e_time.tv_sec - s_time.tv_sec;
				w_time.tv_usec=e_time.tv_usec - s_time.tv_usec;
				printf("ok timeout was %u and %u microseconds\n",
					w_time.tv_sec, w_time.tv_usec
				);
				state++;
				break;

			case 4:
				write(cs, START, strlen(START));
				state++;
				pause();
				break;

			case 5:
				woff=0;
				hdr_ptr=hdrs;
				end=hdrs + strlen(hdrs);
				hsent=0;

				do {
again2:
					woff=write(cs, hdr_ptr, strlen(hdr_ptr));
					if (woff == -1 && (errno == EINTR || errno == EAGAIN)) {
						goto again2;
					}
					if (woff < 0) {
						perror("write");
						exit(1);
					}
					hsent += woff;
					assert(hdr_ptr + woff <= end);
					hdr_ptr += woff;
				} while (hdr_ptr != end);

				printf("sent %zu bytes of headers\n", hsent);

				printf("now wait"
					" %u secs and %u microsecs\n",
					w_time.tv_sec, w_time.tv_usec
				);

				memset(&it.it_interval, 0, sizeof(it.it_interval));
				it.it_value.tv_sec=w_time.tv_sec;
				it.it_value.tv_usec=w_time.tv_usec;

				if (setitimer(ITIMER_REAL, &it, NULL) < 0) {
					perror("setitimer");
					exit(123);
				}
				signal(SIGALRM, collecttimeout);
				pause();
				break;

			case 6:
				write(cs, "AAAAAAAA", 8);
				state++;
				break;

			case 7:
				sleep(4);
				break;

			default:
				fprintf(stderr, "unknown state! %d\n", state);
				exit(1);
				break;
		}
		if (fdio != ofdio) {
			memset(rbuf, 0, sizeof(rbuf));
			if (read(cs, rbuf, sizeof(rbuf) -1) > 0) {
				process_data(rbuf);
				ofdio=fdio;
			}
		}

		if (state == 7) {
			break;
		}
	}

	shutdown(cs, SHUT_RDWR);
	close(cs);

	exit(0);
}
Example #6
0
/** Loads the stk configuration file. After loading it checks if all necessary
 *  values are actually defined, otherwise an error message is printed and STK
 *  is aborted.
 *  /param filename Name of the configuration file to load.
 */
void STKConfig::load(const std::string &filename)
{
    // Avoid loading the default config file if a user-specific
    // config file has already been loaded.
    if(m_has_been_loaded) return;
    m_has_been_loaded = true;

    init_defaults();

    XMLNode *root = 0;
    try
    {
        root = new XMLNode(filename);
        if(!root || root->getName()!="config")
        {
            if(root) delete root;
            std::ostringstream msg;
            msg << "Couldn't load config '" << filename << "': no config node.";
            throw std::runtime_error(msg.str());
        }
        getAllData(root);
    }

    catch(std::exception& err)
    {
        fprintf(stderr, "Error while parsing KartProperties '%s':\n",
                filename.c_str());
        fprintf(stderr, "%s", err.what());
        fprintf(stderr, "\n");
    }
    delete root;

    // Check that all necessary values are indeed set
    // -----------------------------------------------

#define CHECK_NEG(  a,strA) if(a<=UNDEFINED) {                         \
        fprintf(stderr,"Missing default value for '%s' in '%s'.\n",    \
                strA,filename.c_str());exit(-1);                       \
    }

    if(m_score_increase.size()==0 || (int)m_score_increase.size()!=m_max_karts)
    {
        fprintf(stderr,"Not or not enough scores defined in stk_config");
        exit(-1);
    }
    if(m_leader_intervals.size()==0)
    {
        fprintf(stderr,"No follow leader interval(s) defined in stk_config");
        exit(-1);
    }
    
    if(m_switch_items.size()!=Item::ITEM_LAST-Item::ITEM_FIRST+1)
    {
        fprintf(stderr,"No item switches defined in stk_config");
        exit(-1);
    }

    CHECK_NEG(m_max_karts,                 "<karts max=..."             );
    CHECK_NEG(m_gp_order,                  "grand-prix order=..."       );
    CHECK_NEG(m_parachute_friction,        "parachute-friction"         );
    CHECK_NEG(m_parachute_done_fraction,   "parachute-done-fraction"    );
    CHECK_NEG(m_parachute_time,            "parachute-time"             );
    CHECK_NEG(m_parachute_time_other,      "parachute-time-other"       );
    CHECK_NEG(m_bomb_time,                 "bomb-time"                  );
    CHECK_NEG(m_bomb_time_increase,        "bomb-time-increase"         );
    CHECK_NEG(m_anvil_time,                "anvil-time"                 );
    CHECK_NEG(m_anvil_weight,              "anvil-weight"               );
    CHECK_NEG(m_item_switch_time,          "item-switch-time"           );
    CHECK_NEG(m_bubble_gum_counter,        "bubblegum disappear counter");
    CHECK_NEG(m_explosion_impulse,         "explosion-impulse"          );
    CHECK_NEG(m_explosion_impulse_objects, "explosion-impulse-objects"  );
    CHECK_NEG(m_max_history,               "max-history"                );
    CHECK_NEG(m_max_skidmarks,             "max-skidmarks"              );
    CHECK_NEG(m_min_kart_version,          "<kart-version min...>"      );
    CHECK_NEG(m_max_kart_version,          "<kart-version max=...>"     );
    CHECK_NEG(m_min_track_version,         "min-track-version"          );
    CHECK_NEG(m_max_track_version,         "max-track-version"          );
    CHECK_NEG(m_skid_fadeout_time,         "skid-fadeout-time"          );
    CHECK_NEG(m_near_ground,               "near-ground"                );
    CHECK_NEG(m_delay_finish_time,         "delay-finish-time"          );
    CHECK_NEG(m_music_credit_time,         "music-credit-time"          );
    CHECK_NEG(m_leader_time_per_kart,      "leader time-per-kart"       );
    CHECK_NEG(m_penalty_time,              "penalty-time"               );

    m_kart_properties.checkAllSet(filename);
}   // load
/** Checks if all necessary physics values are indeed defines. This helps
 *  finding bugs early, e.g. missing default in stk_config.dat file.
 *  \param filename File from which the data was read (only used to print
 *                  meaningful error messages).
 */
void KartProperties::checkAllSet(const std::string &filename)
{
    if(m_gear_switch_ratio.size()==0)
    {
        fprintf(stderr,"Missing default value for 'gear-switch-ratio' in '%s'.\n",
                filename.c_str());
        exit(-1);
    }
    if(m_gear_power_increase.size()==0)
    {
        fprintf(stderr,"Missing default value for 'gear-power-increase' in '%s'.\n",
                filename.c_str());
        exit(-1);
    }
    if(m_gear_switch_ratio.size()!=m_gear_power_increase.size())    {
        fprintf(stderr,"Number of entries for 'gear-switch-ratio' and 'gear-power-increase\n");
        fprintf(stderr,"in '%s' must be equal.\n", filename.c_str());
        exit(-1);
    }
    if(m_startup_boost.size()!=m_startup_times.size())
    {
        fprintf(stderr, "Number of entried for 'startup times' and 'startup-boost\n");
        fprintf(stderr, "must be identical.\n");
        exit(-1);
    }
#define CHECK_NEG(  a,strA) if(a<=UNDEFINED) {                         \
        fprintf(stderr,"Missing default value for '%s' in '%s'.\n",    \
                strA,filename.c_str());exit(-1);                       \
    }

    CHECK_NEG(m_mass,                       "mass"                          );
    CHECK_NEG(m_min_speed_turn,             "turn min-speed-angle"          );
    CHECK_NEG(m_min_radius,                 "turn min-speed-angle"          );
    CHECK_NEG(m_max_speed_turn,             "turn max-speed-angle"          );
    CHECK_NEG(m_max_radius,                 "turn max-speed-angle"          );
    CHECK_NEG(m_time_full_steer,            "turn time-full-steer"          );
    CHECK_NEG(m_time_full_steer_ai,         "turn time-full-steer-ai"       );
    CHECK_NEG(m_wheel_damping_relaxation,   "wheels damping-relaxation"     );
    CHECK_NEG(m_wheel_damping_compression,  "wheels damping-compression"    );
    CHECK_NEG(m_wheel_radius,               "wheels radius"                 );
    CHECK_NEG(m_friction_slip,              "friction slip"                 );
    CHECK_NEG(m_roll_influence,             "stability roll-influence"      );
    CHECK_NEG(m_chassis_linear_damping,     "stability chassis-linear-damping");
    CHECK_NEG(m_chassis_angular_damping,    "stability chassis-angular-damping");
    CHECK_NEG(m_engine_power[0],            "engine power[0]"               );
    CHECK_NEG(m_engine_power[1],            "engine power[1]"               );
    CHECK_NEG(m_engine_power[2],            "engine power[2]"               );
    CHECK_NEG(m_max_speed[0],               "engine maximum-speed[0]"       );
    CHECK_NEG(m_max_speed[1],               "engine maximum-speed[1]"       );
    CHECK_NEG(m_max_speed[2],               "engine maximum-speed[2]"       );
    CHECK_NEG(m_max_speed_reverse_ratio,    "engine max-speed-reverse-ratio");
    CHECK_NEG(m_brake_factor,               "engine brake-factor"           );
    CHECK_NEG(m_suspension_stiffness,       "suspension stiffness"          );
    CHECK_NEG(m_suspension_rest,            "suspension rest"               );
    CHECK_NEG(m_suspension_travel_cm,       "suspension travel-cm"          );
    CHECK_NEG(m_collision_side_impulse,     "collision side-impulse"        );
    CHECK_NEG(m_jump_velocity,              "jump velocity"                 );
    CHECK_NEG(m_upright_tolerance,          "upright tolerance"             );
    CHECK_NEG(m_upright_max_force,          "upright max-force"             );
    CHECK_NEG(m_track_connection_accel,     "track-connection-accel"        );
    CHECK_NEG(m_rubber_band_max_length,     "rubber-band max-length"        );
    CHECK_NEG(m_plunger_in_face_duration[0],"plunger: in-face-time[0]"      );
    CHECK_NEG(m_plunger_in_face_duration[1],"plunger: in-face-time[1]"      );
    CHECK_NEG(m_plunger_in_face_duration[2],"plunger: in-face-time[2]"      );
    CHECK_NEG(m_rubber_band_force,          "rubber-band force"             );
    CHECK_NEG(m_rubber_band_duration,       "rubber-band duration"          );
    CHECK_NEG(m_zipper_time,                "zipper-time"                   );
    CHECK_NEG(m_zipper_fade_out_time,       "zipper-fade-out-time"          );
    CHECK_NEG(m_zipper_force,               "zipper-force"                  );
    CHECK_NEG(m_zipper_speed_gain,          "zipper-speed-gain"             );
    CHECK_NEG(m_zipper_max_speed_increase,  "zipper-max-speed-increase"     );
    CHECK_NEG(m_skid_decrease,              "skid decrease"                 );
    CHECK_NEG(m_time_till_max_skid,         "skid time-till-max"            );
    CHECK_NEG(m_skid_increase,              "skid increase"                 );
    CHECK_NEG(m_skid_max,                   "skid max"                      );
    CHECK_NEG(m_skid_visual,                "skid visual"                   );
    CHECK_NEG(m_slipstream_length,          "slipstream length"             );
    CHECK_NEG(m_slipstream_collect_time,    "slipstream collect-time"       );
    CHECK_NEG(m_slipstream_use_time,        "slipstream use-time"           );
    CHECK_NEG(m_slipstream_add_power,       "slipstream add-power"          );
    CHECK_NEG(m_slipstream_min_speed,       "slipstream min-speed"          );
    CHECK_NEG(m_slipstream_max_speed_increase, 
                                            "slipstream max-speed-increase" );
    CHECK_NEG(m_slipstream_duration,        "slipstream duration"           );
    CHECK_NEG(m_slipstream_fade_out_time,   "slipstream fade-out-time"      );
    CHECK_NEG(m_camera_distance,            "camera distance"               );
    CHECK_NEG(m_camera_forward_up_angle,    "camera forward-up-angle"       );
    CHECK_NEG(m_camera_backward_up_angle,   "camera forward-up-angle"       );
    CHECK_NEG(m_nitro_power_boost,          "nitro power-boost"             );
    CHECK_NEG(m_nitro_consumption,          "nitro consumption"             );
    CHECK_NEG(m_nitro_big_container,        "nitro big-container"           );
    CHECK_NEG(m_nitro_small_container,      "nitro small-container"         );
    CHECK_NEG(m_nitro_max_speed_increase,   "nitro max-speed-increase"      );
    CHECK_NEG(m_nitro_duration,             "nitro duration"                );
    CHECK_NEG(m_nitro_fade_out_time,        "nitro fade-out-time"           );
    CHECK_NEG(m_rescue_height,              "rescue height"                 );
    CHECK_NEG(m_rescue_time,                "rescue time"                   );
    CHECK_NEG(m_rescue_vert_offset,         "rescue vert-offset"            );
    CHECK_NEG(m_explosion_time,             "explosion time"                );
    CHECK_NEG(m_explosion_radius,           "explosion radius"              );
    CHECK_NEG(m_ai_steering_variation,      "ai steering-variation"         );

}   // checkAllSet