Hi,
I noticed that the proportion of the projection area in full screen is always real screen sized. That is strange because while it computes the projection matrix by 'screen_size', it shows a rectangle with the real proportion of the screen, so it cuts part of the projection depending on the proportion difference. And at the end it renders in 'screen_size' resolution! It sounds like a bug for me. The good thing is that it is easy to work around xP

Code:
#include <acknex.h>

var distance = 16;
var cameraProp = 1;
var screenProp = 1;

void safe_video_switch (var _mode) {
	video_mode = video_switch(_mode, 32, video_screen);
	if(!video_mode)
		video_mode = video_switch(7, 32, video_screen);
	if (video_screen == 1)
		cameraProp = distance * screenProp / camera->aspect;
	else
		cameraProp = distance * screen_size.y / (screen_size.x * camera->aspect);
}

void onQ () {
	safe_video_switch(video_mode + 1);
}

void onW () {
	video_screen = 1 + video_screen % 2;
	safe_video_switch(video_mode);
}

void weaponLocate (ENTITY *_ent) {
	var size_z = 8 * _ent->scale_z;
	_ent->x = distance;
	_ent->y = 0;
	_ent->z = size_z - tanv(0.5 * camera->arc) * cameraProp;
	vec_rotate(&_ent->x, &camera->pan);
	vec_add(&_ent->x, &camera->x);
	_ent->pan = ang(camera->pan - 180);
	_ent->tilt = -camera->tilt;
	_ent->roll = -camera->roll;
}

void main () {
	screenProp = sys_metrics(1) / sys_metrics(0);
	fps_max = 60;
	video_mode = 7;
	video_screen = 1;
	wait(1);
	
	on_q = onQ;
	on_w = onW;
	
	level_load("");
	camera->arc = 90;
	camera->aspect = 1;
	
	safe_video_switch(7);
	
	ENTITY *_ent = ent_create("sprite2.tga", nullvector, NULL);
	set(_ent, PASSABLE | NOFILTER | ZNEAR | DECAL);
	vec_fill(&_ent->scale_x, 1);
	_ent->ambient = 100;

	while (!key_esc) {
		camera->pan = ang(camera->pan - mickey.x * 0.2);
		camera->tilt = clamp(camera->tilt - mickey.y * 0.2, -90, 90);
		weaponLocate(_ent);
		wait(1);
	}
	
	sys_exit(NULL);
}



added 'camera->aspect' as it has full relevance on the computations.

Originally Posted By: 3run
As for rotation, as far as I know, when you manually change rotation of the sprite, engine won't rotate it by itself.

Remember the DECAL flag

Salud!