Hi!

Can anyone please tell me, why does bounce go wrong when framerate is low?
Please, take a look at this example (my attempt to create bouncing grenade):
Code:
#include <acknex.h>
#include <default.c>

#define PRAGMA_POINTER

// default trace/move flags
#define TRACE_FLAGS (IGNORE_ME | IGNORE_PASSABLE | IGNORE_PASSENTS | IGNORE_MAPS | IGNORE_SPRITES | IGNORE_CONTENT)
#define MOVE_FLAGS (IGNORE_ME | IGNORE_PASSABLE | IGNORE_PASSENTS | IGNORE_MAPS | IGNORE_SPRITES | IGNORE_CONTENT)

action grenade(){
	
	c_setminmax(my);
	set(my, SHADOW | POLYGON);
	
	VECTOR velocity;
	vec_set(&velocity, vector(25, 0, 5));
	vec_rotate(&velocity, &camera->pan);
	
	var _soil_height = 0;		// target height from surface bellow
	var _gravity = 5;		// 1 - 10 (default 5)
	var _restitution = 0.5;		// 0.1 - 0.9 (default - 0.25)
	var counter = 0;
	
	while(my){
		
		// still moving ?
		if(vec_length(&velocity) > 1){
			
			VECTOR temp;
			vec_set(&temp, &velocity);
			vec_scale(&temp, time_step);
			c_move(my, nullvector, &temp, MOVE_FLAGS);
			
			velocity.z -= _gravity * time_step;
			
			if(HIT_TARGET){
				
				var speed = vec_length(&velocity);
				vec_set(&velocity, &bounce);
				vec_normalize(&velocity, _restitution * speed);
				
			}
			
		}
		else{
			
			// reset all movement
			vec_fill(&velocity, 0);
			
		}
		
		DEBUG_VAR(velocity.x, 200);
		DEBUG_VAR(velocity.y, 220);
		DEBUG_VAR(velocity.z, 240);
		
		DEBUG_VAR(bounce.x, 300);
		DEBUG_VAR(bounce.y, 320);
		DEBUG_VAR(bounce.z, 340);
		
		counter += time_frame / 16;
		if(counter >= 3){ break; }
		
		wait(1);
		
	}
	
	safe_remove(my);
	
}

void main(){
	
	shadow_stencil = 2;
	
	fps_max = 60;
	warn_level = 6;
	level_load("");
	wait(3);
	
	camera->arc = 90;
	vec_set(&camera->x, vector(-439, 0, 323));
	vec_set(&camera->pan, vector(0, -36, 0));
	
	level_ent = ent_create(CUBE_MDL, nullvector, NULL);
	vec_set(&level_ent->scale_x, vector(256, 256, 0.1));
	c_setminmax(level_ent);
	set(level_ent, POLYGON | SHADOW);
	
	ENTITY *wall = ent_create(CUBE_MDL, vector(0, 256, 64), NULL);
	vec_set(&wall->scale_x, vector(4, 8, 8));
	c_setminmax(wall);
	set(wall, POLYGON | SHADOW);
	
	int i = 0;	
	var counter = 0, throw = 0;
	
	while(!key_esc){
		
		if(mouse_left){
			
			if(throw == 0){
				
				ent_create(CUBE_MDL, &camera->x, grenade);
				
				throw = 1;
				
			}
			
		}
		
		if(throw == 1){
			
			counter += time_frame / 16;
			if(counter > 0.5){ throw = 0; counter -= 0.5; }
			
		}
		
		// slow down framerate for testing
		if(key_e){ fps_max = 20; }
		else{ fps_max = 60; }
		
		DEBUG_VAR(fps_max, 0);
		
		wait(1);
		
	}

}


As you can see, it starts moving towards the left, slowly... smirk


Why does that happen? Also, there is always small difference in grenade's movement, on different framerate (I guess it's framerate independent, but there is still a difference!).
Any help would be appreciated!

Best regards!


Looking for free stuff?? Take a look here: http://badcom.at.ua
Support me on: https://boosty.to/3rung